clang  3.9.0
Enumerations | Functions
Tools.cpp File Reference
#include "Tools.h"
#include "InputInfo.h"
#include "ToolChains.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Version.h"
#include "clang/Config/config.h"
#include "clang/Driver/Action.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Job.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/SanitizerArgs.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Driver/Util.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/Option.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/TargetParser.h"
Include dependency graph for Tools.cpp:

Go to the source code of this file.

Enumerations

enum  OpenMPRuntimeKind
 

Functions

static void handleTargetFeaturesGroup (const ArgList &Args, std::vector< const char * > &Features, OptSpecifier Group)
 
static const char * getSparcAsmModeForCPU (StringRef Name, const llvm::Triple &Triple)
 
static void CheckPreprocessingOptions (const Driver &D, const ArgList &Args)
 CheckPreprocessingOptions - Perform some validation of preprocessing arguments that is shared with gcc. More...
 
static void CheckCodeGenerationOptions (const Driver &D, const ArgList &Args)
 CheckCodeGenerationOptions - Perform some validation of code generation arguments that is shared with gcc. More...
 
static void EscapeSpacesAndBackslashes (const char *Arg, SmallVectorImpl< char > &Res)
 
static void QuoteTarget (StringRef Target, SmallVectorImpl< char > &Res)
 
static void addDirectoryList (const ArgList &Args, ArgStringList &CmdArgs, const char *ArgName, const char *EnvVar)
 
static void AddLinkerInputs (const ToolChain &TC, const InputInfoList &Inputs, const ArgList &Args, ArgStringList &CmdArgs)
 
static bool isObjCAutoRefCount (const ArgList &Args)
 Determine whether Objective-C automated reference counting is enabled. More...
 
static bool isObjCRuntimeLinked (const ArgList &Args)
 Determine whether we are linking the ObjC runtime. More...
 
static bool forwardToGCC (const Option &O)
 
static void addExtraOffloadCXXStdlibIncludeArgs (Compilation &C, const JobAction &JA, const ArgList &Args, ArgStringList &CmdArgs)
 Add the C++ include args of other offloading toolchains. More...
 
static void addExtraOffloadSpecificIncludeArgs (Compilation &C, const JobAction &JA, const ArgList &Args, ArgStringList &CmdArgs)
 Add the include args that are specific of each offloading programming model. More...
 
static bool isSignedCharDefault (const llvm::Triple &Triple)
 
static bool isNoCommonDefault (const llvm::Triple &Triple)
 
static int getARMSubArchVersionNumber (const llvm::Triple &Triple)
 
static bool isARMMProfile (const llvm::Triple &Triple)
 
static void getARMArchCPUFromArgs (const ArgList &Args, llvm::StringRef &Arch, llvm::StringRef &CPU, bool FromAs=false)
 
static void getARMHWDivFeatures (const Driver &D, const Arg *A, const ArgList &Args, StringRef HWDiv, std::vector< const char * > &Features)
 
static void getARMFPUFeatures (const Driver &D, const Arg *A, const ArgList &Args, StringRef FPU, std::vector< const char * > &Features)
 
static bool DecodeARMFeatures (const Driver &D, StringRef text, std::vector< const char * > &Features)
 
static void checkARMArchName (const Driver &D, const Arg *A, const ArgList &Args, llvm::StringRef ArchName, std::vector< const char * > &Features, const llvm::Triple &Triple)
 
static void checkARMCPUName (const Driver &D, const Arg *A, const ArgList &Args, llvm::StringRef CPUName, llvm::StringRef ArchName, std::vector< const char * > &Features, const llvm::Triple &Triple)
 
static bool useAAPCSForMachO (const llvm::Triple &T)
 
static void getARMTargetFeatures (const ToolChain &TC, const llvm::Triple &Triple, const ArgList &Args, std::vector< const char * > &Features, bool ForAS)
 
static std::string getAArch64TargetCPU (const ArgList &Args)
 getAArch64TargetCPU - Get the (LLVM) name of the AArch64 cpu we are targeting. More...
 
static StringRef getGnuCompatibleMipsABIName (StringRef ABI)
 
static mips::FloatABI getMipsFloatABI (const Driver &D, const ArgList &Args)
 
static void AddTargetFeature (const ArgList &Args, std::vector< const char * > &Features, OptSpecifier OnOpt, OptSpecifier OffOpt, StringRef FeatureName)
 
static void getMIPSTargetFeatures (const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector< const char * > &Features)
 
static std::string getPPCTargetCPU (const ArgList &Args)
 getPPCTargetCPU - Get the (LLVM) name of the PowerPC cpu we are targeting. More...
 
static void getPPCTargetFeatures (const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector< const char * > &Features)
 
static std::string getR600TargetGPU (const ArgList &Args)
 Get the (LLVM) name of the R600 gpu we are targeting. More...
 
static std::string getLanaiTargetCPU (const ArgList &Args)
 
static void getSparcTargetFeatures (const Driver &D, const ArgList &Args, std::vector< const char * > &Features)
 
static const char * getSystemZTargetCPU (const ArgList &Args)
 
static void getSystemZTargetFeatures (const ArgList &Args, std::vector< const char * > &Features)
 
static const char * getX86TargetCPU (const ArgList &Args, const llvm::Triple &Triple)
 
static StringRef getWebAssemblyTargetCPU (const ArgList &Args)
 Get the (LLVM) name of the WebAssembly cpu we are targeting. More...
 
static std::string getCPUName (const ArgList &Args, const llvm::Triple &T, bool FromAs=false)
 
static void AddGoldPlugin (const ToolChain &ToolChain, const ArgList &Args, ArgStringList &CmdArgs, bool IsThinLTO)
 
static bool getRefinementStep (StringRef In, const Driver &D, const Arg &A, size_t &Position)
 This is a helper function for validating the optional refinement step parameter in reciprocal argument strings. More...
 
static void ParseMRecip (const Driver &D, const ArgList &Args, ArgStringList &OutStrings)
 The -mrecip flag requires processing of many optional parameters. More...
 
static void getX86TargetFeatures (const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector< const char * > &Features)
 
static bool DecodeAArch64Features (const Driver &D, StringRef text, std::vector< const char * > &Features)
 
static bool DecodeAArch64Mcpu (const Driver &D, StringRef Mcpu, StringRef &CPU, std::vector< const char * > &Features)
 
static bool getAArch64ArchFeaturesFromMarch (const Driver &D, StringRef March, const ArgList &Args, std::vector< const char * > &Features)
 
static bool getAArch64ArchFeaturesFromMcpu (const Driver &D, StringRef Mcpu, const ArgList &Args, std::vector< const char * > &Features)
 
static bool getAArch64MicroArchFeaturesFromMtune (const Driver &D, StringRef Mtune, const ArgList &Args, std::vector< const char * > &Features)
 
static bool getAArch64MicroArchFeaturesFromMcpu (const Driver &D, StringRef Mcpu, const ArgList &Args, std::vector< const char * > &Features)
 
static void getAArch64TargetFeatures (const Driver &D, const ArgList &Args, std::vector< const char * > &Features)
 
static void getHexagonTargetFeatures (const ArgList &Args, std::vector< const char * > &Features)
 
static void getWebAssemblyTargetFeatures (const ArgList &Args, std::vector< const char * > &Features)
 
static void getAMDGPUTargetFeatures (const Driver &D, const ArgList &Args, std::vector< const char * > &Features)
 
static void getTargetFeatures (const ToolChain &TC, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, bool ForAS)
 
static bool shouldUseExceptionTablesForObjCExceptions (const ObjCRuntime &runtime, const llvm::Triple &Triple)
 
static void addExceptionArgs (const ArgList &Args, types::ID InputType, const ToolChain &TC, bool KernelOrKext, const ObjCRuntime &objcRuntime, ArgStringList &CmdArgs)
 Adds exception related arguments to the driver command arguments. More...
 
static bool ShouldDisableAutolink (const ArgList &Args, const ToolChain &TC)
 
static bool ShouldDisableDwarfDirectory (const ArgList &Args, const ToolChain &TC)
 
static bool ContainsCompileAction (const Action *A)
 Check whether the given input tree contains any compilation actions. More...
 
static bool UseRelaxAll (Compilation &C, const ArgList &Args)
 Check if -relax-all should be passed to the internal assembler. More...
 
static
codegenoptions::DebugInfoKind 
DebugLevelToInfoKind (const Arg &A)
 
static unsigned DwarfVersionNum (StringRef ArgValue)
 
static void RenderDebugEnablingArgs (const ArgList &Args, ArgStringList &CmdArgs, codegenoptions::DebugInfoKind DebugInfoKind, unsigned DwarfVersion, llvm::DebuggerKind DebuggerTuning)
 
static void CollectArgsForIntegratedAssembler (Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const Driver &D)
 
static void addClangRT (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs)
 
static OpenMPRuntimeKind getOpenMPRuntime (const ToolChain &TC, const ArgList &Args)
 Compute the desired OpenMP runtime from the flag provided. More...
 
static void addOpenMPRuntime (ArgStringList &CmdArgs, const ToolChain &TC, const ArgList &Args)
 
static void addSanitizerRuntime (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, StringRef Sanitizer, bool IsShared, bool IsWhole)
 
static bool addSanitizerDynamicList (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, StringRef Sanitizer)
 
static void linkSanitizerRuntimeDeps (const ToolChain &TC, ArgStringList &CmdArgs)
 
static void collectSanitizerRuntimes (const ToolChain &TC, const ArgList &Args, SmallVectorImpl< StringRef > &SharedRuntimes, SmallVectorImpl< StringRef > &StaticRuntimes, SmallVectorImpl< StringRef > &NonWholeStaticRuntimes, SmallVectorImpl< StringRef > &HelperStaticRuntimes, SmallVectorImpl< StringRef > &RequiredSymbols)
 
static bool addSanitizerRuntimes (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs)
 
static bool addXRayRuntime (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs)
 
static void linkXRayRuntimeDeps (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs)
 
static bool areOptimizationsEnabled (const ArgList &Args)
 
static bool shouldUseFramePointerForTarget (const ArgList &Args, const llvm::Triple &Triple)
 
static bool shouldUseFramePointer (const ArgList &Args, const llvm::Triple &Triple)
 
static bool shouldUseLeafFramePointer (const ArgList &Args, const llvm::Triple &Triple)
 
static void addDebugCompDirArg (const ArgList &Args, ArgStringList &CmdArgs)
 Add a CC1 option to specify the debug compilation directory. More...
 
static const char * SplitDebugName (const ArgList &Args, const InputInfo &Input)
 
static void SplitDebugInfo (const ToolChain &TC, Compilation &C, const Tool &T, const JobAction &JA, const ArgList &Args, const InputInfo &Output, const char *OutFile)
 
static bool shouldEnableVectorizerAtOLevel (const ArgList &Args, bool isSlpVec)
 Vectorize at all optimization levels greater than 1 except for -Oz. More...
 
static void addDashXForInput (const ArgList &Args, const InputInfo &Input, ArgStringList &CmdArgs)
 Add -x lang to CmdArgs for Input. More...
 
static VersionTuple getMSCompatibilityVersion (unsigned Version)
 
static void claimNoWarnArgs (const ArgList &Args)
 
static void appendUserToPath (SmallVectorImpl< char > &Result)
 
static void addPGOAndCoverageFlags (Compilation &C, const Driver &D, const InputInfo &Output, const ArgList &Args, ArgStringList &CmdArgs)
 
static void addPS4ProfileRTArgs (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs)
 
static std::tuple
< llvm::Reloc::Model, unsigned,
bool
ParsePICArgs (const ToolChain &ToolChain, const llvm::Triple &Triple, const ArgList &Args)
 Parses the various -fpic/-fPIC/-fpie/-fPIE arguments. More...
 
static const char * RelocationModelName (llvm::Reloc::Model Model)
 
static void AddAssemblerKPIC (const ToolChain &ToolChain, const ArgList &Args, ArgStringList &CmdArgs)
 
static bool maybeConsumeDash (const std::string &EH, size_t &I)
 
static EHFlags parseClangCLEHFlags (const Driver &D, const ArgList &Args)
 /EH controls whether to run destructor cleanups when exceptions are thrown. More...
 
static void constructHexagonLinkArgs (Compilation &C, const JobAction &JA, const toolchains::HexagonToolChain &HTC, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, ArgStringList &CmdArgs, const char *LinkingOutput)
 
static void AddLibgcc (const llvm::Triple &Triple, const Driver &D, ArgStringList &CmdArgs, const ArgList &Args)
 
static void AddRunTimeLibs (const ToolChain &TC, const Driver &D, ArgStringList &CmdArgs, const ArgList &Args)
 
static const char * getLDMOption (const llvm::Triple &T, const ArgList &Args)
 
static std::string FindVisualStudioExecutable (const ToolChain &TC, const char *Exe, const char *ClangProgramPath)
 
static void AddPS4SanitizerArgs (const ToolChain &TC, ArgStringList &CmdArgs)
 
static void ConstructPS4LinkJob (const Tool &T, Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput)
 
static void ConstructGoldLinkJob (const Tool &T, Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput)
 

Enumeration Type Documentation

Definition at line 3008 of file Tools.cpp.

Function Documentation

static void AddAssemblerKPIC ( const ToolChain ToolChain,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void addClangRT ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Definition at line 3002 of file Tools.cpp.

References clang::driver::ToolChain::getCompilerRTArgString().

Referenced by AddRunTimeLibs().

static void addDashXForInput ( const ArgList &  Args,
const InputInfo Input,
ArgStringList &  CmdArgs 
)
static

Add -x lang to CmdArgs for Input.

Definition at line 3405 of file Tools.cpp.

References clang::driver::InputInfo::getType(), and clang::driver::types::getTypeName().

Referenced by clang::driver::tools::Clang::ConstructJob().

static void addDebugCompDirArg ( const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Add a CC1 option to specify the debug compilation directory.

Definition at line 3323 of file Tools.cpp.

Referenced by clang::driver::tools::Clang::ConstructJob(), and clang::driver::tools::ClangAs::ConstructJob().

static void addDirectoryList ( const ArgList &  Args,
ArgStringList &  CmdArgs,
const char *  ArgName,
const char *  EnvVar 
)
static

Definition at line 181 of file Tools.cpp.

References clang::Name.

Referenced by AddLinkerInputs().

static void addExceptionArgs ( const ArgList &  Args,
types::ID  InputType,
const ToolChain TC,
bool  KernelOrKext,
const ObjCRuntime objcRuntime,
ArgStringList &  CmdArgs 
)
static

Adds exception related arguments to the driver command arguments.

There's a master flag, -fexceptions and also language specific flags to enable/disable C++ and Objective-C exceptions. This makes it possible to for example disable C++ exceptions but enable Objective-C exceptions.

Definition at line 2666 of file Tools.cpp.

References clang::driver::Driver::Diag(), clang::driver::ToolChain::getDriver(), clang::driver::ToolChain::getRTTIArg(), clang::driver::ToolChain::getRTTIMode(), clang::driver::ToolChain::getTriple(), clang::driver::types::isCXX(), clang::driver::types::isObjC(), clang::driver::ToolChain::RM_DisabledExplicitly, clang::driver::ToolChain::RM_DisabledImplicitly, clang::driver::ToolChain::RM_EnabledImplicitly, and shouldUseExceptionTablesForObjCExceptions().

Referenced by clang::driver::tools::Clang::ConstructJob().

static void addExtraOffloadCXXStdlibIncludeArgs ( Compilation C,
const JobAction JA,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Add the C++ include args of other offloading toolchains.

If this is a host job, the device toolchains are added. If this is a device job, the host toolchains will be added.

Definition at line 302 of file Tools.cpp.

References clang::driver::Compilation::getSingleOffloadToolChain(), clang::driver::Action::isDeviceOffloading(), clang::driver::Action::isHostOffloading(), clang::driver::Action::OFK_Cuda, and clang::driver::Action::OFK_Host.

static void addExtraOffloadSpecificIncludeArgs ( Compilation C,
const JobAction JA,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void AddGoldPlugin ( const ToolChain ToolChain,
const ArgList &  Args,
ArgStringList &  CmdArgs,
bool  IsThinLTO 
)
static
static void AddLibgcc ( const llvm::Triple &  Triple,
const Driver D,
ArgStringList &  CmdArgs,
const ArgList &  Args 
)
static

Definition at line 9229 of file Tools.cpp.

References clang::driver::Driver::CCCIsCXX().

Referenced by AddRunTimeLibs().

static void AddLinkerInputs ( const ToolChain TC,
const InputInfoList Inputs,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void addOpenMPRuntime ( ArgStringList &  CmdArgs,
const ToolChain TC,
const ArgList &  Args 
)
static
static void addPGOAndCoverageFlags ( Compilation C,
const Driver D,
const InputInfo Output,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void addPS4ProfileRTArgs ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Definition at line 3647 of file Tools.cpp.

Referenced by clang::driver::tools::Clang::ConstructJob().

static void AddPS4SanitizerArgs ( const ToolChain TC,
ArgStringList &  CmdArgs 
)
static
static void AddRunTimeLibs ( const ToolChain TC,
const Driver D,
ArgStringList &  CmdArgs,
const ArgList &  Args 
)
static
static bool addSanitizerDynamicList ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs,
StringRef  Sanitizer 
)
static

Definition at line 3090 of file Tools.cpp.

References clang::driver::ToolChain::getCompilerRT().

Referenced by addSanitizerRuntimes().

static void addSanitizerRuntime ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs,
StringRef  Sanitizer,
bool  IsShared,
bool  IsWhole 
)
static

Definition at line 3078 of file Tools.cpp.

References clang::driver::ToolChain::getCompilerRTArgString().

Referenced by addSanitizerRuntimes().

static bool addSanitizerRuntimes ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void AddTargetFeature ( const ArgList &  Args,
std::vector< const char * > &  Features,
OptSpecifier  OnOpt,
OptSpecifier  OffOpt,
StringRef  FeatureName 
)
static

Definition at line 1375 of file Tools.cpp.

Referenced by getMIPSTargetFeatures(), and getPPCTargetFeatures().

static bool addXRayRuntime ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static void appendUserToPath ( SmallVectorImpl< char > &  Result)
static

Definition at line 3443 of file Tools.cpp.

References clang::isAlphanumeric(), and P.

Referenced by clang::driver::tools::Clang::ConstructJob().

static bool areOptimizationsEnabled ( const ArgList &  Args)
static
static void checkARMArchName ( const Driver D,
const Arg *  A,
const ArgList &  Args,
llvm::StringRef  ArchName,
std::vector< const char * > &  Features,
const llvm::Triple &  Triple 
)
static
static void checkARMCPUName ( const Driver D,
const Arg *  A,
const ArgList &  Args,
llvm::StringRef  CPUName,
llvm::StringRef  ArchName,
std::vector< const char * > &  Features,
const llvm::Triple &  Triple 
)
static
static void CheckCodeGenerationOptions ( const Driver D,
const ArgList &  Args 
)
static

CheckCodeGenerationOptions - Perform some validation of code generation arguments that is shared with gcc.

Definition at line 126 of file Tools.cpp.

References clang::driver::Driver::Diag().

Referenced by clang::driver::tools::Clang::ConstructJob().

static void CheckPreprocessingOptions ( const Driver D,
const ArgList &  Args 
)
static

CheckPreprocessingOptions - Perform some validation of preprocessing arguments that is shared with gcc.

Definition at line 113 of file Tools.cpp.

References clang::driver::Driver::CCCIsCPP(), clang::driver::Driver::Diag(), and clang::driver::Driver::IsCLMode().

static void claimNoWarnArgs ( const ArgList &  Args)
static
static void CollectArgsForIntegratedAssembler ( Compilation C,
const ArgList &  Args,
ArgStringList &  CmdArgs,
const Driver D 
)
static
static void collectSanitizerRuntimes ( const ToolChain TC,
const ArgList &  Args,
SmallVectorImpl< StringRef > &  SharedRuntimes,
SmallVectorImpl< StringRef > &  StaticRuntimes,
SmallVectorImpl< StringRef > &  NonWholeStaticRuntimes,
SmallVectorImpl< StringRef > &  HelperStaticRuntimes,
SmallVectorImpl< StringRef > &  RequiredSymbols 
)
static
static void ConstructGoldLinkJob ( const Tool T,
Compilation C,
const JobAction JA,
const InputInfo Output,
const InputInfoList Inputs,
const ArgList &  Args,
const char *  LinkingOutput 
)
static
static void constructHexagonLinkArgs ( Compilation C,
const JobAction JA,
const toolchains::HexagonToolChain HTC,
const InputInfo Output,
const InputInfoList Inputs,
const ArgList &  Args,
ArgStringList &  CmdArgs,
const char *  LinkingOutput 
)
static
static void ConstructPS4LinkJob ( const Tool T,
Compilation C,
const JobAction JA,
const InputInfo Output,
const InputInfoList Inputs,
const ArgList &  Args,
const char *  LinkingOutput 
)
static
static bool ContainsCompileAction ( const Action A)
static

Check whether the given input tree contains any compilation actions.

Definition at line 2757 of file Tools.cpp.

References clang::driver::Action::inputs().

Referenced by UseRelaxAll().

static codegenoptions::DebugInfoKind DebugLevelToInfoKind ( const Arg &  A)
static
static bool DecodeAArch64Features ( const Driver D,
StringRef  text,
std::vector< const char * > &  Features 
)
static

Definition at line 2347 of file Tools.cpp.

References clang::driver::Driver::Diag().

Referenced by DecodeAArch64Mcpu(), and getAArch64ArchFeaturesFromMarch().

static bool DecodeAArch64Mcpu ( const Driver D,
StringRef  Mcpu,
StringRef &  CPU,
std::vector< const char * > &  Features 
)
static
static bool DecodeARMFeatures ( const Driver D,
StringRef  text,
std::vector< const char * > &  Features 
)
static

Definition at line 722 of file Tools.cpp.

Referenced by checkARMArchName(), and checkARMCPUName().

static unsigned DwarfVersionNum ( StringRef  ArgValue)
static
static void EscapeSpacesAndBackslashes ( const char *  Arg,
SmallVectorImpl< char > &  Res 
)
static
static std::string FindVisualStudioExecutable ( const ToolChain TC,
const char *  Exe,
const char *  ClangProgramPath 
)
static
static bool forwardToGCC ( const Option &  O)
static
static bool getAArch64ArchFeaturesFromMarch ( const Driver D,
StringRef  March,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2407 of file Tools.cpp.

References DecodeAArch64Features().

Referenced by getAArch64TargetFeatures().

static bool getAArch64ArchFeaturesFromMcpu ( const Driver D,
StringRef  Mcpu,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2430 of file Tools.cpp.

References DecodeAArch64Mcpu().

Referenced by getAArch64TargetFeatures().

static bool getAArch64MicroArchFeaturesFromMcpu ( const Driver D,
StringRef  Mcpu,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2457 of file Tools.cpp.

References DecodeAArch64Mcpu(), and getAArch64MicroArchFeaturesFromMtune().

Referenced by getAArch64TargetFeatures().

static bool getAArch64MicroArchFeaturesFromMtune ( const Driver D,
StringRef  Mtune,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2442 of file Tools.cpp.

Referenced by getAArch64MicroArchFeaturesFromMcpu(), and getAArch64TargetFeatures().

static std::string getAArch64TargetCPU ( const ArgList &  Args)
static

getAArch64TargetCPU - Get the (LLVM) name of the AArch64 cpu we are targeting.

Definition at line 1150 of file Tools.cpp.

Referenced by getAArch64TargetFeatures(), and getCPUName().

static void getAArch64TargetFeatures ( const Driver D,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static
static void getAMDGPUTargetFeatures ( const Driver D,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2550 of file Tools.cpp.

References clang::driver::Driver::Diag(), and handleTargetFeaturesGroup().

Referenced by getTargetFeatures().

static void getARMArchCPUFromArgs ( const ArgList &  Args,
llvm::StringRef &  Arch,
llvm::StringRef &  CPU,
bool  FromAs = false 
)
static

Definition at line 683 of file Tools.cpp.

Referenced by clang::driver::tools::netbsd::Assembler::ConstructJob(), and getCPUName().

static void getARMFPUFeatures ( const Driver D,
const Arg *  A,
const ArgList &  Args,
StringRef  FPU,
std::vector< const char * > &  Features 
)
static

Definition at line 713 of file Tools.cpp.

References clang::driver::Driver::Diag().

Referenced by getARMTargetFeatures().

static void getARMHWDivFeatures ( const Driver D,
const Arg *  A,
const ArgList &  Args,
StringRef  HWDiv,
std::vector< const char * > &  Features 
)
static

Definition at line 704 of file Tools.cpp.

References clang::driver::Driver::Diag().

Referenced by getARMTargetFeatures().

static int getARMSubArchVersionNumber ( const llvm::Triple &  Triple)
static

Definition at line 670 of file Tools.cpp.

Referenced by getARMTargetFeatures().

static void getARMTargetFeatures ( const ToolChain TC,
const llvm::Triple &  Triple,
const ArgList &  Args,
std::vector< const char * > &  Features,
bool  ForAS 
)
static
static std::string getCPUName ( const ArgList &  Args,
const llvm::Triple &  T,
bool  FromAs = false 
)
static
static StringRef getGnuCompatibleMipsABIName ( StringRef  ABI)
static
static void getHexagonTargetFeatures ( const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2519 of file Tools.cpp.

Referenced by getTargetFeatures().

static std::string getLanaiTargetCPU ( const ArgList &  Args)
static

Definition at line 1727 of file Tools.cpp.

Referenced by getCPUName().

static const char* getLDMOption ( const llvm::Triple &  T,
const ArgList &  Args 
)
static
static mips::FloatABI getMipsFloatABI ( const Driver D,
const ArgList &  Args 
)
static
static void getMIPSTargetFeatures ( const Driver D,
const llvm::Triple &  Triple,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static
static VersionTuple getMSCompatibilityVersion ( unsigned  Version)
static

Definition at line 3419 of file Tools.cpp.

Referenced by clang::driver::tools::visualstudio::getMSVCVersion().

static OpenMPRuntimeKind getOpenMPRuntime ( const ToolChain TC,
const ArgList &  Args 
)
static
static std::string getPPCTargetCPU ( const ArgList &  Args)
static

getPPCTargetCPU - Get the (LLVM) name of the PowerPC cpu we are targeting.

Definition at line 1533 of file Tools.cpp.

Referenced by getCPUName().

static void getPPCTargetFeatures ( const Driver D,
const llvm::Triple &  Triple,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static
static std::string getR600TargetGPU ( const ArgList &  Args)
static

Get the (LLVM) name of the R600 gpu we are targeting.

Definition at line 1711 of file Tools.cpp.

Referenced by getCPUName().

static bool getRefinementStep ( StringRef  In,
const Driver D,
const Arg &  A,
size_t Position 
)
static

This is a helper function for validating the optional refinement step parameter in reciprocal argument strings.

Return false if there is an error parsing the refinement step. Otherwise, return true and set the Position of the refinement step in the input string.

Definition at line 2060 of file Tools.cpp.

References clang::driver::Driver::Diag().

Referenced by ParseMRecip().

static const char* getSparcAsmModeForCPU ( StringRef  Name,
const llvm::Triple &  Triple 
)
static
static void getSparcTargetFeatures ( const Driver D,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static
static const char* getSystemZTargetCPU ( const ArgList &  Args)
static
static void getSystemZTargetFeatures ( const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 1806 of file Tools.cpp.

Referenced by getTargetFeatures().

static void getTargetFeatures ( const ToolChain TC,
const llvm::Triple &  Triple,
const ArgList &  Args,
ArgStringList &  CmdArgs,
bool  ForAS 
)
static
static StringRef getWebAssemblyTargetCPU ( const ArgList &  Args)
static

Get the (LLVM) name of the WebAssembly cpu we are targeting.

Definition at line 1909 of file Tools.cpp.

Referenced by getCPUName().

static void getWebAssemblyTargetFeatures ( const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2545 of file Tools.cpp.

References handleTargetFeaturesGroup().

Referenced by getTargetFeatures().

static const char* getX86TargetCPU ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

Definition at line 1824 of file Tools.cpp.

Referenced by getCPUName().

static void getX86TargetFeatures ( const Driver D,
const llvm::Triple &  Triple,
const ArgList &  Args,
std::vector< const char * > &  Features 
)
static

Definition at line 2187 of file Tools.cpp.

References clang::driver::Driver::Diag(), and handleTargetFeaturesGroup().

Referenced by getTargetFeatures().

static void handleTargetFeaturesGroup ( const ArgList &  Args,
std::vector< const char * > &  Features,
OptSpecifier  Group 
)
static
static bool isARMMProfile ( const llvm::Triple &  Triple)
static

Definition at line 676 of file Tools.cpp.

References clang::Profile().

Referenced by useAAPCSForMachO().

static bool isNoCommonDefault ( const llvm::Triple &  Triple)
static

Definition at line 655 of file Tools.cpp.

Referenced by clang::driver::tools::Clang::ConstructJob().

static bool isObjCAutoRefCount ( const ArgList &  Args)
static

Determine whether Objective-C automated reference counting is enabled.

Definition at line 279 of file Tools.cpp.

Referenced by clang::driver::tools::Clang::ConstructJob(), and isObjCRuntimeLinked().

static bool isObjCRuntimeLinked ( const ArgList &  Args)
static

Determine whether we are linking the ObjC runtime.

Definition at line 284 of file Tools.cpp.

References isObjCAutoRefCount().

Referenced by clang::driver::tools::darwin::Linker::ConstructJob().

static bool isSignedCharDefault ( const llvm::Triple &  Triple)
static

Definition at line 626 of file Tools.cpp.

Referenced by clang::driver::tools::Clang::ConstructJob().

static void linkSanitizerRuntimeDeps ( const ToolChain TC,
ArgStringList &  CmdArgs 
)
static
static void linkXRayRuntimeDeps ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static
static bool maybeConsumeDash ( const std::string &  EH,
size_t I 
)
static

Definition at line 6224 of file Tools.cpp.

Referenced by parseClangCLEHFlags().

static EHFlags parseClangCLEHFlags ( const Driver D,
const ArgList &  Args 
)
static

/EH controls whether to run destructor cleanups when exceptions are thrown.

There are three modifiers:

  • s: Cleanup after "synchronous" exceptions, aka C++ exceptions.
  • a: Cleanup after "asynchronous" exceptions, aka structured exceptions. The 'a' modifier is unimplemented and fundamentally hard in LLVM IR.
  • c: Assume that extern "C" functions are implicitly nounwind. The default is /EHs-c-, meaning cleanups are disabled.

Definition at line 6245 of file Tools.cpp.

References clang::driver::Driver::Diag(), E, I, and maybeConsumeDash().

static void ParseMRecip ( const Driver D,
const ArgList &  Args,
ArgStringList &  OutStrings 
)
static

The -mrecip flag requires processing of many optional parameters.

Definition at line 2088 of file Tools.cpp.

References clang::driver::Driver::Diag(), and getRefinementStep().

Referenced by clang::driver::tools::Clang::ConstructJob().

static std::tuple<llvm::Reloc::Model, unsigned, bool> ParsePICArgs ( const ToolChain ToolChain,
const llvm::Triple &  Triple,
const ArgList &  Args 
)
static

Parses the various -fpic/-fPIC/-fpie/-fPIE arguments.

Then, smooshes them together with platform defaults, to decide whether this compile should be using PIC mode or not. Returns a tuple of (RelocationModel, PICLevel, IsPIE).

Definition at line 3669 of file Tools.cpp.

References clang::driver::Driver::Diag(), clang::driver::ToolChain::getArch(), clang::driver::ToolChain::getDriver(), clang::driver::ToolChain::getTriple(), clang::driver::ToolChain::isPICDefault(), clang::driver::ToolChain::isPICDefaultForced(), and clang::driver::ToolChain::isPIEDefault().

Referenced by AddAssemblerKPIC(), clang::driver::tools::Clang::ConstructJob(), clang::driver::tools::ClangAs::ConstructJob(), and clang::driver::tools::gnutools::Assembler::ConstructJob().

static void QuoteTarget ( StringRef  Target,
SmallVectorImpl< char > &  Res 
)
static

Definition at line 155 of file Tools.cpp.

static const char* RelocationModelName ( llvm::Reloc::Model  Model)
static
static void RenderDebugEnablingArgs ( const ArgList &  Args,
ArgStringList &  CmdArgs,
codegenoptions::DebugInfoKind  DebugInfoKind,
unsigned  DwarfVersion,
llvm::DebuggerKind  DebuggerTuning 
)
static
static bool ShouldDisableAutolink ( const ArgList &  Args,
const ToolChain TC 
)
static
static bool ShouldDisableDwarfDirectory ( const ArgList &  Args,
const ToolChain TC 
)
static
static bool shouldEnableVectorizerAtOLevel ( const ArgList &  Args,
bool  isSlpVec 
)
static

Vectorize at all optimization levels greater than 1 except for -Oz.

For -Oz the loop vectorizer is disable, while the slp vectorizer is enabled.

Definition at line 3374 of file Tools.cpp.

References S.

Referenced by clang::driver::tools::Clang::ConstructJob().

static bool shouldUseExceptionTablesForObjCExceptions ( const ObjCRuntime runtime,
const llvm::Triple &  Triple 
)
static

Definition at line 2646 of file Tools.cpp.

References clang::ObjCRuntime::isNonFragile().

Referenced by addExceptionArgs().

static bool shouldUseFramePointer ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

Definition at line 3297 of file Tools.cpp.

References shouldUseFramePointerForTarget().

Referenced by clang::driver::tools::Clang::ConstructJob().

static bool shouldUseFramePointerForTarget ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

Definition at line 3248 of file Tools.cpp.

References areOptimizationsEnabled().

Referenced by shouldUseFramePointer(), and shouldUseLeafFramePointer().

static bool shouldUseLeafFramePointer ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

Definition at line 3308 of file Tools.cpp.

References shouldUseFramePointerForTarget().

Referenced by clang::driver::tools::Clang::ConstructJob().

static void SplitDebugInfo ( const ToolChain TC,
Compilation C,
const Tool T,
const JobAction JA,
const ArgList &  Args,
const InputInfo Output,
const char *  OutFile 
)
static
static const char* SplitDebugName ( const ArgList &  Args,
const InputInfo Input 
)
static
static bool useAAPCSForMachO ( const llvm::Triple &  T)
static

Definition at line 765 of file Tools.cpp.

References isARMMProfile().

static bool UseRelaxAll ( Compilation C,
const ArgList &  Args 
)
static

Check if -relax-all should be passed to the internal assembler.

This is done by default when compiling non-assembler source with -O0.

Definition at line 2770 of file Tools.cpp.

References ContainsCompileAction(), and clang::driver::Compilation::getActions().

Referenced by CollectArgsForIntegratedAssembler().