> On Jul 19, 2016, at 3:02 PM, Eric Christopher <echri...@gmail.com> wrote: > > ... this is pretty crazy. I think that you needed to plumb the effective > triple through everything means that it really needs to be owned somewhere > else and cached. > > Can you rethink this? In general it doesn't make sense to have everything > need this passed down.
This came up during review. I did try to find a suitable place to cache the effective triple, but did not see one. I still don't, and am open to suggestions / willing to revert for more review if you'd like. Initially I thought it would be possible to cache the triple in the Tool or ToolChain, but that seems like it could break use-cases in which jobs are constructed from different threads. Caching the triple in the Compilation seems like it would have have the same issue. I'm not sure how much of a problem this is in practice. We could try setting the effective triple in the Compilation with a RAII wrapper, e.g: { RegisterEffectiveTriple TripleRAII(C, EffectiveTriple); T->ConstructJob(...); } // Effective triple cleared from the Compilation. Let me know if you have alternate suggestions, and how you'd like to move forward. thanks, vedant > > Thanks! > > -eric > > On Mon, Jul 18, 2016 at 1:04 PM Vedant Kumar via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > Author: vedantk > Date: Mon Jul 18 14:56:38 2016 > New Revision: 275895 > > URL: http://llvm.org/viewvc/llvm-project?rev=275895&view=rev > Log: > [Driver] Compute effective target triples once per job (NFCI) > > Compute an effective target triple exactly once in ConstructJob(), and > then simply pass around references to it. This eliminates wasteful > re-computation of effective triples (e.g in getARMFloatABI()). > > Differential Revision: https://reviews.llvm.org/D22290 > > Modified: > cfe/trunk/docs/ReleaseNotes.rst > cfe/trunk/include/clang/Driver/SanitizerArgs.h > cfe/trunk/include/clang/Driver/Tool.h > cfe/trunk/include/clang/Driver/ToolChain.h > cfe/trunk/lib/Driver/Driver.cpp > cfe/trunk/lib/Driver/SanitizerArgs.cpp > cfe/trunk/lib/Driver/ToolChain.cpp > cfe/trunk/lib/Driver/ToolChains.cpp > cfe/trunk/lib/Driver/ToolChains.h > cfe/trunk/lib/Driver/Tools.cpp > cfe/trunk/lib/Driver/Tools.h > > Modified: cfe/trunk/docs/ReleaseNotes.rst > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/docs/ReleaseNotes.rst (original) > +++ cfe/trunk/docs/ReleaseNotes.rst Mon Jul 18 14:56:38 2016 > @@ -121,7 +121,8 @@ These are major API changes that have ha > Clang. If upgrading an external codebase that uses Clang as a library, > this section should help get you past the largest hurdles of upgrading. > > -- ... > +- Classes which inherit from ``driver::Tool`` must be updated to use > effective > + target triples when constructing jobs. > > AST Matchers > ------------ > > Modified: cfe/trunk/include/clang/Driver/SanitizerArgs.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/SanitizerArgs.h?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Driver/SanitizerArgs.h (original) > +++ cfe/trunk/include/clang/Driver/SanitizerArgs.h Mon Jul 18 14:56:38 2016 > @@ -16,6 +16,10 @@ > #include <string> > #include <vector> > > +namespace llvm { > +class Triple; > +} > + > namespace clang { > namespace driver { > > @@ -66,7 +70,8 @@ class SanitizerArgs { > bool requiresPIE() const; > bool needsUnwindTables() const; > bool linkCXXRuntimes() const { return LinkCXXRuntimes; } > - void addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, > + void addArgs(const ToolChain &TC, const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const; > }; > > > Modified: cfe/trunk/include/clang/Driver/Tool.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Tool.h?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Driver/Tool.h (original) > +++ cfe/trunk/include/clang/Driver/Tool.h Mon Jul 18 14:56:38 2016 > @@ -14,6 +14,7 @@ > #include "llvm/Support/Program.h" > > namespace llvm { > +class Triple; > namespace opt { > class ArgList; > } > @@ -127,6 +128,7 @@ public: > virtual void ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const llvm::opt::ArgList &TCArgs, > const char *LinkingOutput) const = 0; > }; > > Modified: cfe/trunk/include/clang/Driver/ToolChain.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Driver/ToolChain.h (original) > +++ cfe/trunk/include/clang/Driver/ToolChain.h Mon Jul 18 14:56:38 2016 > @@ -260,11 +260,13 @@ public: > return ToolChain::CST_Libstdcxx; > } > > - virtual std::string getCompilerRT(const llvm::opt::ArgList &Args, > + virtual std::string getCompilerRT(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > StringRef Component, > bool Shared = false) const; > > - const char *getCompilerRTArgString(const llvm::opt::ArgList &Args, > + const char *getCompilerRTArgString(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > StringRef Component, > bool Shared = false) const; > /// needsProfileRT - returns true if instrumentation profile is on. > @@ -410,7 +412,8 @@ public: > const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) > const; > /// addProfileRTLibs - When -fprofile-instr-profile is specified, try to > pass > /// a suitable profile runtime library to the linker. > - virtual void addProfileRTLibs(const llvm::opt::ArgList &Args, > + virtual void addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const; > > /// \brief Add arguments to use system-specific CUDA includes. > > Modified: cfe/trunk/lib/Driver/Driver.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/Driver.cpp (original) > +++ cfe/trunk/lib/Driver/Driver.cpp Mon Jul 18 14:56:38 2016 > @@ -2256,7 +2256,21 @@ InputInfo Driver::BuildJobsForActionNoCa > TC->getTriple().normalize()), > BaseInput); > > + llvm::Triple EffectiveTriple; > + const ArgList &Args = C.getArgsForToolChain(TC, BoundArch); > + if (InputInfos.size() != 1) { > + EffectiveTriple = llvm::Triple( > + T->getToolChain().ComputeEffectiveClangTriple(Args)); > + } else { > + // Pass along the input type if it can be unambiguously determined. > + EffectiveTriple = > + llvm::Triple(T->getToolChain().ComputeEffectiveClangTriple( > + Args, InputInfos[0].getType())); > + } > + > if (CCCPrintBindings && !CCGenDiagnostics) { > + // FIXME: We should be able to use the effective triple here, but doing > so > + // breaks some multi-arch tests. > llvm::errs() << "# \"" << T->getToolChain().getTripleString() << '"' > << " - \"" << T->getName() << "\", inputs: ["; > for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) { > @@ -2266,7 +2280,7 @@ InputInfo Driver::BuildJobsForActionNoCa > } > llvm::errs() << "], output: " << Result.getAsString() << "\n"; > } else { > - T->ConstructJob(C, *JA, Result, InputInfos, > + T->ConstructJob(C, *JA, Result, InputInfos, EffectiveTriple, > C.getArgsForToolChain(TC, BoundArch), LinkingOutput); > } > return Result; > > Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original) > +++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Mon Jul 18 14:56:38 2016 > @@ -602,7 +602,9 @@ static void addIncludeLinkerOption(const > CmdArgs.push_back(Args.MakeArgString(LinkerOptionFlag)); > } > > -void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList > &Args, > +void SanitizerArgs::addArgs(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs, > types::ID InputType) const { > // Translate available CoverageFeatures to corresponding clang-cc1 flags. > @@ -626,21 +628,24 @@ void SanitizerArgs::addArgs(const ToolCh > // Instruct the code generator to embed linker directives in the object > file > // that cause the required runtime libraries to be linked. > CmdArgs.push_back(Args.MakeArgString( > - "--dependent-lib=" + TC.getCompilerRT(Args, "ubsan_standalone"))); > + "--dependent-lib=" + > + TC.getCompilerRT(EffectiveTriple, Args, "ubsan_standalone"))); > if (types::isCXX(InputType)) > CmdArgs.push_back(Args.MakeArgString( > - "--dependent-lib=" + TC.getCompilerRT(Args, > "ubsan_standalone_cxx"))); > + "--dependent-lib=" + > + TC.getCompilerRT(EffectiveTriple, Args, "ubsan_standalone_cxx"))); > } > if (TC.getTriple().isOSWindows() && needsStatsRt()) { > - CmdArgs.push_back(Args.MakeArgString("--dependent-lib=" + > - TC.getCompilerRT(Args, > "stats_client"))); > + CmdArgs.push_back(Args.MakeArgString( > + "--dependent-lib=" + > + TC.getCompilerRT(EffectiveTriple, Args, "stats_client"))); > > // The main executable must export the stats runtime. > // FIXME: Only exporting from the main executable (e.g. based on whether > the > // translation unit defines main()) would save a little space, but having > // multiple copies of the runtime shouldn't hurt. > - CmdArgs.push_back(Args.MakeArgString("--dependent-lib=" + > - TC.getCompilerRT(Args, "stats"))); > + CmdArgs.push_back(Args.MakeArgString( > + "--dependent-lib=" + TC.getCompilerRT(EffectiveTriple, Args, > "stats"))); > addIncludeLinkerOption(TC, Args, CmdArgs, "__sanitizer_stats_register"); > } > > > Modified: cfe/trunk/lib/Driver/ToolChain.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChain.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChain.cpp Mon Jul 18 14:56:38 2016 > @@ -267,46 +267,52 @@ Tool *ToolChain::getTool(Action::ActionC > llvm_unreachable("Invalid tool kind."); > } > > -static StringRef getArchNameForCompilerRTLib(const ToolChain &TC, > - const ArgList &Args) { > - const llvm::Triple &Triple = TC.getTriple(); > - bool IsWindows = Triple.isOSWindows(); > +static StringRef > +getArchNameForCompilerRTLib(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args) { > + bool IsWindows = EffectiveTriple.isOSWindows(); > > - if (Triple.isWindowsMSVCEnvironment() && TC.getArch() == llvm::Triple::x86) > + if (EffectiveTriple.isWindowsMSVCEnvironment() && > + TC.getArch() == llvm::Triple::x86) > return "i386"; > > if (TC.getArch() == llvm::Triple::arm || TC.getArch() == > llvm::Triple::armeb) > - return (arm::getARMFloatABI(TC, Args) == arm::FloatABI::Hard && > !IsWindows) > + return (arm::getARMFloatABI(TC, EffectiveTriple, Args) == > + arm::FloatABI::Hard && > + !IsWindows) > ? "armhf" > : "arm"; > > return TC.getArchName(); > } > > -std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef > Component, > +std::string ToolChain::getCompilerRT(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, StringRef > Component, > bool Shared) const { > - const llvm::Triple &TT = getTriple(); > - const char *Env = TT.isAndroid() ? "-android" : ""; > - bool IsITANMSVCWindows = > - TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment(); > + const char *Env = EffectiveTriple.isAndroid() ? "-android" : ""; > + bool IsITANMSVCWindows = EffectiveTriple.isWindowsMSVCEnvironment() || > + EffectiveTriple.isWindowsItaniumEnvironment(); > > - StringRef Arch = getArchNameForCompilerRTLib(*this, Args); > + StringRef Arch = getArchNameForCompilerRTLib(*this, EffectiveTriple, Args); > const char *Prefix = IsITANMSVCWindows ? "" : "lib"; > - const char *Suffix = Shared ? (Triple.isOSWindows() ? ".dll" : ".so") > + const char *Suffix = Shared ? (EffectiveTriple.isOSWindows() ? ".dll" : > ".so") > : (IsITANMSVCWindows ? ".lib" : ".a"); > > SmallString<128> Path(getDriver().ResourceDir); > - StringRef OSLibName = Triple.isOSFreeBSD() ? "freebsd" : getOS(); > + StringRef OSLibName = EffectiveTriple.isOSFreeBSD() ? "freebsd" : getOS(); > llvm::sys::path::append(Path, "lib", OSLibName); > llvm::sys::path::append(Path, Prefix + Twine("clang_rt.") + Component + > "-" + > Arch + Env + Suffix); > return Path.str(); > } > > -const char *ToolChain::getCompilerRTArgString(const llvm::opt::ArgList &Args, > - StringRef Component, > - bool Shared) const { > - return Args.MakeArgString(getCompilerRT(Args, Component, Shared)); > +const char * > +ToolChain::getCompilerRTArgString(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > + StringRef Component, bool Shared) const { > + return Args.MakeArgString( > + getCompilerRT(EffectiveTriple, Args, Component, Shared)); > } > > bool ToolChain::needsProfileRT(const ArgList &Args) { > @@ -517,11 +523,13 @@ void ToolChain::addClangTargetOptions(co > > void ToolChain::addClangWarningOptions(ArgStringList &CC1Args) const {} > > -void ToolChain::addProfileRTLibs(const llvm::opt::ArgList &Args, > +void ToolChain::addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const { > - if (!needsProfileRT(Args)) return; > + if (!needsProfileRT(Args)) > + return; > > - CmdArgs.push_back(getCompilerRTArgString(Args, "profile")); > + CmdArgs.push_back(getCompilerRTArgString(EffectiveTriple, Args, > "profile")); > } > > ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType( > > Modified: cfe/trunk/lib/Driver/ToolChains.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChains.cpp Mon Jul 18 14:56:38 2016 > @@ -380,13 +380,16 @@ StringRef Darwin::getOSLibraryNameSuffix > llvm_unreachable("Unsupported platform"); > } > > -void Darwin::addProfileRTLibs(const ArgList &Args, > +void Darwin::addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, > ArgStringList &CmdArgs) const { > - if (!needsProfileRT(Args)) return; > + if (!needsProfileRT(Args)) > + return; > > - AddLinkRuntimeLib(Args, CmdArgs, (Twine("libclang_rt.profile_") + > - getOSLibraryNameSuffix() + ".a").str(), > - /*AlwaysLink*/ true); > + AddLinkRuntimeLib( > + Args, CmdArgs, > + (Twine("libclang_rt.profile_") + getOSLibraryNameSuffix() + > ".a").str(), > + /*AlwaysLink*/ true); > } > > void DarwinClang::AddLinkSanitizerLibArgs(const ArgList &Args, > @@ -400,7 +403,8 @@ void DarwinClang::AddLinkSanitizerLibArg > /*AddRPath*/ true); > } > > -void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, > +void DarwinClang::AddLinkRuntimeLibArgs(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, > ArgStringList &CmdArgs) const { > // Darwin only supports the compiler-rt based runtime libraries. > switch (GetRuntimeLibType(Args)) { > @@ -1012,16 +1016,17 @@ DerivedArgList *MachO::TranslateArgs(con > return DAL; > } > > -void MachO::AddLinkRuntimeLibArgs(const ArgList &Args, > +void MachO::AddLinkRuntimeLibArgs(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, > ArgStringList &CmdArgs) const { > // Embedded targets are simple at the moment, not supporting sanitizers and > // with different libraries for each member of the product { static, PIC } > x > // { hard-float, soft-float } > llvm::SmallString<32> CompilerRT = StringRef("libclang_rt."); > - CompilerRT += > - (tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard) > - ? "hard" > - : "soft"; > + CompilerRT += (tools::arm::getARMFloatABI(*this, EffectiveTriple, Args) == > + tools::arm::FloatABI::Hard) > + ? "hard" > + : "soft"; > CompilerRT += Args.hasArg(options::OPT_fPIC) ? "_pic.a" : "_static.a"; > > AddLinkRuntimeLib(Args, CmdArgs, CompilerRT, false, true); > @@ -2858,9 +2863,10 @@ void MipsLLVMToolChain::AddCXXStdlibLibA > CmdArgs.push_back("-lunwind"); > } > > -std::string MipsLLVMToolChain::getCompilerRT(const ArgList &Args, > - StringRef Component, > - bool Shared) const { > +std::string > +MipsLLVMToolChain::getCompilerRT(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, StringRef Component, > + bool Shared) const { > SmallString<128> Path(getDriver().ResourceDir); > llvm::sys::path::append(Path, SelectedMultilib.osSuffix(), "lib" + > LibSuffix, > getOS()); > @@ -4237,9 +4243,9 @@ std::string Linux::getDynamicLinker(cons > case llvm::Triple::thumb: > case llvm::Triple::armeb: > case llvm::Triple::thumbeb: { > - const bool HF = > - Triple.getEnvironment() == llvm::Triple::GNUEABIHF || > - tools::arm::getARMFloatABI(*this, Args) == > tools::arm::FloatABI::Hard; > + const bool HF = Triple.getEnvironment() == llvm::Triple::GNUEABIHF || > + tools::arm::getARMFloatABI(*this, Triple, Args) == > + tools::arm::FloatABI::Hard; > > LibDir = "lib"; > Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3"; > @@ -4631,16 +4637,18 @@ SanitizerMask Linux::getSupportedSanitiz > return Res; > } > > -void Linux::addProfileRTLibs(const llvm::opt::ArgList &Args, > +void Linux::addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const { > - if (!needsProfileRT(Args)) return; > + if (!needsProfileRT(Args)) > + return; > > // Add linker option -u__llvm_runtime_variable to cause runtime > // initialization module to be linked in. > if (!Args.hasArg(options::OPT_coverage)) > CmdArgs.push_back(Args.MakeArgString( > Twine("-u", llvm::getInstrProfRuntimeHookVarName()))); > - ToolChain::addProfileRTLibs(Args, CmdArgs); > + ToolChain::addProfileRTLibs(EffectiveTriple, Args, CmdArgs); > } > > /// DragonFly - DragonFly tool chain which can call as(1) and ld(1) directly. > > Modified: cfe/trunk/lib/Driver/ToolChains.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains.h (original) > +++ cfe/trunk/lib/Driver/ToolChains.h Mon Jul 18 14:56:38 2016 > @@ -279,7 +279,8 @@ public: > llvm::opt::ArgStringList &CmdArgs) const {} > > /// Add the linker arguments to link the compiler runtime library. > - virtual void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args, > + virtual void AddLinkRuntimeLibArgs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) > const; > > virtual void addStartObjectFileArgs(const llvm::opt::ArgList &Args, > @@ -303,7 +304,8 @@ public: > > /// Add any profiling runtime libraries that are needed. This is > essentially a > /// MachO specific version of addProfileRT in Tools.cpp. > - void addProfileRTLibs(const llvm::opt::ArgList &Args, > + void addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const override { > // There aren't any profiling libs for embedded targets currently. > } > @@ -417,7 +419,8 @@ public: > !isTargetWatchOS()); > } > > - void addProfileRTLibs(const llvm::opt::ArgList &Args, > + void addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const override; > > protected: > @@ -572,7 +575,8 @@ public: > /// @name Apple ToolChain Implementation > /// { > > - void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args, > + void AddLinkRuntimeLibArgs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const > override; > > void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, > @@ -838,7 +842,8 @@ public: > llvm::opt::ArgStringList &CC1Args) const override; > bool isPIEDefault() const override; > SanitizerMask getSupportedSanitizers() const override; > - void addProfileRTLibs(const llvm::opt::ArgList &Args, > + void addProfileRTLibs(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const override; > virtual std::string computeSysRoot() const; > > @@ -902,7 +907,8 @@ public: > void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const override; > > - std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef > Component, > + std::string getCompilerRT(const llvm::Triple &EffectiveTriple, > + const llvm::opt::ArgList &Args, StringRef > Component, > bool Shared = false) const override; > > std::string computeSysRoot() const override; > > Modified: cfe/trunk/lib/Driver/Tools.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=275895&r1=275894&r2=275895&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/Tools.cpp (original) > +++ cfe/trunk/lib/Driver/Tools.cpp Mon Jul 18 14:56:38 2016 > @@ -771,10 +771,11 @@ static bool useAAPCSForMachO(const llvm: > > // Select the float ABI as determined by -msoft-float, -mhard-float, and > // -mfloat-abi=. > -arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) { > +arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args) { > const Driver &D = TC.getDriver(); > - const llvm::Triple Triple(TC.ComputeEffectiveClangTriple(Args)); > - auto SubArch = getARMSubArchVersionNumber(Triple); > + auto SubArch = getARMSubArchVersionNumber(EffectiveTriple); > arm::FloatABI ABI = FloatABI::Invalid; > if (Arg *A = > Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, > @@ -797,23 +798,23 @@ arm::FloatABI arm::getARMFloatABI(const > > // It is incorrect to select hard float ABI on MachO platforms if the > ABI is > // "apcs-gnu". > - if (Triple.isOSBinFormatMachO() && !useAAPCSForMachO(Triple) && > - ABI == FloatABI::Hard) { > - D.Diag(diag::err_drv_unsupported_opt_for_target) << > A->getAsString(Args) > - << > Triple.getArchName(); > + if (EffectiveTriple.isOSBinFormatMachO() && > + !useAAPCSForMachO(EffectiveTriple) && ABI == FloatABI::Hard) { > + D.Diag(diag::err_drv_unsupported_opt_for_target) > + << A->getAsString(Args) << EffectiveTriple.getArchName(); > } > } > > // If unspecified, choose the default based on the platform. > if (ABI == FloatABI::Invalid) { > - switch (Triple.getOS()) { > + switch (EffectiveTriple.getOS()) { > case llvm::Triple::Darwin: > case llvm::Triple::MacOSX: > case llvm::Triple::IOS: > case llvm::Triple::TvOS: { > // Darwin defaults to "softfp" for v6 and v7. > ABI = (SubArch == 6 || SubArch == 7) ? FloatABI::SoftFP : > FloatABI::Soft; > - ABI = Triple.isWatchABI() ? FloatABI::Hard : ABI; > + ABI = EffectiveTriple.isWatchABI() ? FloatABI::Hard : ABI; > break; > } > case llvm::Triple::WatchOS: > @@ -826,7 +827,7 @@ arm::FloatABI arm::getARMFloatABI(const > break; > > case llvm::Triple::FreeBSD: > - switch (Triple.getEnvironment()) { > + switch (EffectiveTriple.getEnvironment()) { > case llvm::Triple::GNUEABIHF: > ABI = FloatABI::Hard; > break; > @@ -838,7 +839,7 @@ arm::FloatABI arm::getARMFloatABI(const > break; > > default: > - switch (Triple.getEnvironment()) { > + switch (EffectiveTriple.getEnvironment()) { > case llvm::Triple::GNUEABIHF: > case llvm::Triple::MuslEABIHF: > case llvm::Triple::EABIHF: > @@ -855,14 +856,14 @@ arm::FloatABI arm::getARMFloatABI(const > break; > default: > // Assume "soft", but warn the user we are guessing. > - if (Triple.isOSBinFormatMachO() && > - Triple.getSubArch() == llvm::Triple::ARMSubArch_v7em) > + if (EffectiveTriple.isOSBinFormatMachO() && > + EffectiveTriple.getSubArch() == llvm::Triple::ARMSubArch_v7em) > ABI = FloatABI::Hard; > else > ABI = FloatABI::Soft; > > - if (Triple.getOS() != llvm::Triple::UnknownOS || > - !Triple.isOSBinFormatMachO()) > + if (EffectiveTriple.getOS() != llvm::Triple::UnknownOS || > + !EffectiveTriple.isOSBinFormatMachO()) > D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << "soft"; > break; > } > @@ -882,7 +883,7 @@ static void getARMTargetFeatures(const T > > bool KernelOrKext = > Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext); > - arm::FloatABI ABI = arm::getARMFloatABI(TC, Args); > + arm::FloatABI ABI = arm::getARMFloatABI(TC, Triple, Args); > const Arg *WaCPU = nullptr, *WaFPU = nullptr; > const Arg *WaHDiv = nullptr, *WaArch = nullptr; > > @@ -1011,7 +1012,7 @@ static void getARMTargetFeatures(const T > Features.push_back("+long-calls"); > } else if (KernelOrKext && (!Triple.isiOS() || Triple.isOSVersionLT(6)) && > !Triple.isWatchOS()) { > - Features.push_back("+long-calls"); > + Features.push_back("+long-calls"); > } > > // Kernel code has more strict alignment requirements. > @@ -1025,7 +1026,8 @@ static void getARMTargetFeatures(const T > D.Diag(diag::err_target_unsupported_unaligned) << "v6m"; > // v8M Baseline follows on from v6M, so doesn't support unaligned > memory > // access either. > - else if (Triple.getSubArch() == > llvm::Triple::SubArchType::ARMSubArch_v8m_baseline) > + else if (Triple.getSubArch() == > + llvm::Triple::SubArchType::ARMSubArch_v8m_baseline) > D.Diag(diag::err_target_unsupported_unaligned) << "v8m.base"; > } else > Features.push_back("+strict-align"); > @@ -1111,7 +1113,7 @@ void Clang::AddARMTargetArgs(const llvm: > CmdArgs.push_back(ABIName); > > // Determine floating point ABI from the options & target defaults. > - arm::FloatABI ABI = arm::getARMFloatABI(getToolChain(), Args); > + arm::FloatABI ABI = arm::getARMFloatABI(getToolChain(), Triple, Args); > if (ABI == arm::FloatABI::Soft) { > // Floating point operations and argument passing are soft. > // FIXME: This changes CPP defines, we need -target-soft-float. > @@ -1172,11 +1174,9 @@ static std::string getAArch64TargetCPU(c > return "generic"; > } > > -void Clang::AddAArch64TargetArgs(const ArgList &Args, > +void Clang::AddAArch64TargetArgs(const llvm::Triple &EffectiveTriple, > + const ArgList &Args, > ArgStringList &CmdArgs) const { > - std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); > - llvm::Triple Triple(TripleStr); > - > if (!Args.hasFlag(options::OPT_mred_zone, options::OPT_mno_red_zone, true) > || > Args.hasArg(options::OPT_mkernel) || > Args.hasArg(options::OPT_fapple_kext)) > @@ -1189,7 +1189,7 @@ void Clang::AddAArch64TargetArgs(const A > const char *ABIName = nullptr; > if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) > ABIName = A->getValue(); > - else if (Triple.isOSDarwin()) > + else if (EffectiveTriple.isOSDarwin()) > ABIName = "darwinpcs"; > else > ABIName = "aapcs"; > @@ -1204,7 +1204,7 @@ void Clang::AddAArch64TargetArgs(const A > CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=1"); > else > CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=0"); > - } else if (Triple.isAndroid()) { > + } else if (EffectiveTriple.isAndroid()) { > // Enabled A53 errata (835769) workaround by default on android > CmdArgs.push_back("-backend-option"); > CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=1"); > @@ -2999,9 +2999,10 @@ static void CollectArgsForIntegratedAsse > // This adds the static libclang_rt.builtins-arch.a directly to the command > line > // FIXME: Make sure we can also emit shared objects if they're requested > // and available, check for possible errors, etc. > -static void addClangRT(const ToolChain &TC, const ArgList &Args, > - ArgStringList &CmdArgs) { > - CmdArgs.push_back(TC.getCompilerRTArgString(Args, "builtins")); > +static void addClangRT(const ToolChain &TC, const llvm::Triple > &EffectiveTriple, > + const ArgList &Args, ArgStringList &CmdArgs) { > + CmdArgs.push_back( > + TC.getCompilerRTArgString(EffectiveTriple, Args, "builtins")); > } > > namespace { > @@ -3075,22 +3076,27 @@ static void addOpenMPRuntime(ArgStringLi > } > } > > -static void addSanitizerRuntime(const ToolChain &TC, const ArgList &Args, > - ArgStringList &CmdArgs, StringRef Sanitizer, > - bool IsShared, bool IsWhole) { > +static void addSanitizerRuntime(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args, ArgStringList &CmdArgs, > + StringRef Sanitizer, bool IsShared, > + bool IsWhole) { > // Wrap any static runtimes that must be forced into executable in > // whole-archive. > if (IsWhole) CmdArgs.push_back("-whole-archive"); > - CmdArgs.push_back(TC.getCompilerRTArgString(Args, Sanitizer, IsShared)); > - if (IsWhole) CmdArgs.push_back("-no-whole-archive"); > + CmdArgs.push_back( > + TC.getCompilerRTArgString(EffectiveTriple, Args, Sanitizer, IsShared)); > + if (IsWhole) > + CmdArgs.push_back("-no-whole-archive"); > } > > // Tries to use a file with the list of dynamic symbols that need to be > exported > // from the runtime library. Returns true if the file was found. > -static bool addSanitizerDynamicList(const ToolChain &TC, const ArgList &Args, > - ArgStringList &CmdArgs, > +static bool addSanitizerDynamicList(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args, ArgStringList > &CmdArgs, > StringRef Sanitizer) { > - SmallString<128> SanRT(TC.getCompilerRT(Args, Sanitizer)); > + SmallString<128> SanRT(TC.getCompilerRT(EffectiveTriple, Args, Sanitizer)); > if (llvm::sys::fs::exists(SanRT + ".syms")) { > CmdArgs.push_back(Args.MakeArgString("--dynamic-list=" + SanRT + > ".syms")); > return true; > @@ -3179,25 +3185,28 @@ collectSanitizerRuntimes(const ToolChain > > // Should be called before we add system libraries (C++ ABI, > libstdc++/libc++, > // C runtime, etc). Returns true if sanitizer system deps need to be linked > in. > -static bool addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, > - ArgStringList &CmdArgs) { > +static bool addSanitizerRuntimes(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args, ArgStringList > &CmdArgs) { > SmallVector<StringRef, 4> SharedRuntimes, StaticRuntimes, > NonWholeStaticRuntimes, HelperStaticRuntimes, RequiredSymbols; > collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes, > NonWholeStaticRuntimes, HelperStaticRuntimes, > RequiredSymbols); > for (auto RT : SharedRuntimes) > - addSanitizerRuntime(TC, Args, CmdArgs, RT, true, false); > + addSanitizerRuntime(TC, EffectiveTriple, Args, CmdArgs, RT, true, false); > for (auto RT : HelperStaticRuntimes) > - addSanitizerRuntime(TC, Args, CmdArgs, RT, false, true); > + addSanitizerRuntime(TC, EffectiveTriple, Args, CmdArgs, RT, false, true); > bool AddExportDynamic = false; > for (auto RT : StaticRuntimes) { > - addSanitizerRuntime(TC, Args, CmdArgs, RT, false, true); > - AddExportDynamic |= !addSanitizerDynamicList(TC, Args, CmdArgs, RT); > + addSanitizerRuntime(TC, EffectiveTriple, Args, CmdArgs, RT, false, true); > + AddExportDynamic |= > + !addSanitizerDynamicList(TC, EffectiveTriple, Args, CmdArgs, RT); > } > for (auto RT : NonWholeStaticRuntimes) { > - addSanitizerRuntime(TC, Args, CmdArgs, RT, false, false); > - AddExportDynamic |= !addSanitizerDynamicList(TC, Args, CmdArgs, RT); > + addSanitizerRuntime(TC, EffectiveTriple, Args, CmdArgs, RT, false, > false); > + AddExportDynamic |= > + !addSanitizerDynamicList(TC, EffectiveTriple, Args, CmdArgs, RT); > } > for (auto S : RequiredSymbols) { > CmdArgs.push_back("-u"); > @@ -3210,12 +3219,14 @@ static bool addSanitizerRuntimes(const T > return !StaticRuntimes.empty(); > } > > -static bool addXRayRuntime(const ToolChain &TC, const ArgList &Args, > - ArgStringList &CmdArgs) { > +static bool addXRayRuntime(const ToolChain &TC, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args, ArgStringList &CmdArgs) { > if (Args.hasFlag(options::OPT_fxray_instrument, > options::OPT_fnoxray_instrument, false)) { > CmdArgs.push_back("-whole-archive"); > - CmdArgs.push_back(TC.getCompilerRTArgString(Args, "xray", false)); > + CmdArgs.push_back( > + TC.getCompilerRTArgString(EffectiveTriple, Args, "xray", false)); > CmdArgs.push_back("-no-whole-archive"); > return true; > } > @@ -3825,9 +3836,9 @@ static void AddAssemblerKPIC(const ToolC > > void Clang::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, const InputInfoList > &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, const char *LinkingOutput) > const { > - std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); > - const llvm::Triple Triple(TripleStr); > + std::string TripleStr = EffectiveTriple.str(); > > bool KernelOrKext = > Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext); > @@ -3880,13 +3891,14 @@ void Clang::ConstructJob(Compilation &C, > CmdArgs.push_back(Args.MakeArgString(NormalizedTriple)); > } > > - if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || > - Triple.getArch() == llvm::Triple::thumb)) { > - unsigned Offset = Triple.getArch() == llvm::Triple::arm ? 4 : 6; > + if (EffectiveTriple.isOSWindows() && > + (EffectiveTriple.getArch() == llvm::Triple::arm || > + EffectiveTriple.getArch() == llvm::Triple::thumb)) { > + unsigned Offset = EffectiveTriple.getArch() == llvm::Triple::arm ? 4 : 6; > unsigned Version; > - Triple.getArchName().substr(Offset).getAsInteger(10, Version); > + EffectiveTriple.getArchName().substr(Offset).getAsInteger(10, Version); > if (Version < 7) > - D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() > + D.Diag(diag::err_target_unsupported_arch) << > EffectiveTriple.getArchName() > << TripleStr; > } > > @@ -4088,7 +4100,7 @@ void Clang::ConstructJob(Compilation &C, > unsigned PICLevel; > bool IsPIE; > std::tie(RelocationModel, PICLevel, IsPIE) = > - ParsePICArgs(getToolChain(), Triple, Args); > + ParsePICArgs(getToolChain(), EffectiveTriple, Args); > > const char *RMName = RelocationModelName(RelocationModel); > if (RMName) { > @@ -4187,8 +4199,7 @@ void Clang::ConstructJob(Compilation &C, > false)) > CmdArgs.push_back("-fstrict-enums"); > if (Args.hasFlag(options::OPT_fstrict_vtable_pointers, > - options::OPT_fno_strict_vtable_pointers, > - false)) > + options::OPT_fno_strict_vtable_pointers, false)) > CmdArgs.push_back("-fstrict-vtable-pointers"); > if (!Args.hasFlag(options::OPT_foptimize_sibling_calls, > options::OPT_fno_optimize_sibling_calls)) > @@ -4403,7 +4414,7 @@ void Clang::ConstructJob(Compilation &C, > } > > // Add the target cpu > - std::string CPU = getCPUName(Args, Triple, /*FromAs*/ false); > + std::string CPU = getCPUName(Args, EffectiveTriple, /*FromAs*/ false); > if (!CPU.empty()) { > CmdArgs.push_back("-target-cpu"); > CmdArgs.push_back(Args.MakeArgString(CPU)); > @@ -4415,7 +4426,7 @@ void Clang::ConstructJob(Compilation &C, > } > > // Add the target features > - getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, false); > + getTargetFeatures(getToolChain(), EffectiveTriple, Args, CmdArgs, false); > > // Add target specific flags. > switch (getToolChain().getArch()) { > @@ -4427,12 +4438,12 @@ void Clang::ConstructJob(Compilation &C, > case llvm::Triple::thumb: > case llvm::Triple::thumbeb: > // Use the effective triple, which takes into account the deployment > target. > - AddARMTargetArgs(Triple, Args, CmdArgs, KernelOrKext); > + AddARMTargetArgs(EffectiveTriple, Args, CmdArgs, KernelOrKext); > break; > > case llvm::Triple::aarch64: > case llvm::Triple::aarch64_be: > - AddAArch64TargetArgs(Args, CmdArgs); > + AddAArch64TargetArgs(EffectiveTriple, Args, CmdArgs); > break; > > case llvm::Triple::mips: > @@ -4553,8 +4564,8 @@ void Clang::ConstructJob(Compilation &C, > } > > // If a debugger tuning argument appeared, remember it. > - if (Arg *A = Args.getLastArg(options::OPT_gTune_Group, > - options::OPT_ggdbN_Group)) { > + if (Arg *A = > + Args.getLastArg(options::OPT_gTune_Group, > options::OPT_ggdbN_Group)) { > if (A->getOption().matches(options::OPT_glldb)) > DebuggerTuning = llvm::DebuggerKind::LLDB; > else if (A->getOption().matches(options::OPT_gsce)) > @@ -4583,7 +4594,7 @@ void Clang::ConstructJob(Compilation &C, > > // PS4 defaults to no column info > if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info, > - /*Default=*/ !IsPS4CPU)) > + /*Default=*/!IsPS4CPU)) > CmdArgs.push_back("-dwarf-column-info"); > > // FIXME: Move backend command line options to the module. > @@ -4637,9 +4648,10 @@ void Clang::ConstructJob(Compilation &C, > > // CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by > // default. > - bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI || > - Triple.getArch() == llvm::Triple::wasm32 || > - Triple.getArch() == llvm::Triple::wasm64; > + bool UseSeparateSections = > + EffectiveTriple.getOS() == llvm::Triple::CloudABI || > + EffectiveTriple.getArch() == llvm::Triple::wasm32 || > + EffectiveTriple.getArch() == llvm::Triple::wasm64; > > if (Args.hasFlag(options::OPT_ffunction_sections, > options::OPT_fno_function_sections, UseSeparateSections)) > { > @@ -5008,7 +5020,8 @@ void Clang::ConstructJob(Compilation &C, > Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names); > // Emulated TLS is enabled by default on Android, and can be enabled > manually > // with -femulated-tls. > - bool EmulatedTLSDefault = Triple.isAndroid() || > Triple.isWindowsCygwinEnvironment(); > + bool EmulatedTLSDefault = EffectiveTriple.isAndroid() || > + EffectiveTriple.isWindowsCygwinEnvironment(); > if (Args.hasFlag(options::OPT_femulated_tls, options::OPT_fno_emulated_tls, > EmulatedTLSDefault)) > CmdArgs.push_back("-femulated-tls"); > @@ -5049,7 +5062,7 @@ void Clang::ConstructJob(Compilation &C, > } > > const SanitizerArgs &Sanitize = getToolChain().getSanitizerArgs(); > - Sanitize.addArgs(getToolChain(), Args, CmdArgs, InputType); > + Sanitize.addArgs(getToolChain(), EffectiveTriple, Args, CmdArgs, > InputType); > > // Report an error for -faltivec on anything other than PowerPC. > if (const Arg *A = Args.getLastArg(options::OPT_faltivec)) { > @@ -5191,9 +5204,9 @@ void Clang::ConstructJob(Compilation &C, > CmdArgs.push_back("-backend-option"); > CmdArgs.push_back("-arm-no-restrict-it"); > } > - } else if (Triple.isOSWindows() && > - (Triple.getArch() == llvm::Triple::arm || > - Triple.getArch() == llvm::Triple::thumb)) { > + } else if (EffectiveTriple.isOSWindows() && > + (EffectiveTriple.getArch() == llvm::Triple::arm || > + EffectiveTriple.getArch() == llvm::Triple::thumb)) { > // Windows on ARM expects restricted IT blocks > CmdArgs.push_back("-backend-option"); > CmdArgs.push_back("-arm-restrict-it"); > @@ -5546,7 +5559,7 @@ void Clang::ConstructJob(Compilation &C, > if (Args.hasArg(options::OPT_fno_inline)) > CmdArgs.push_back("-fno-inline"); > > - if (Arg* InlineArg = Args.getLastArg(options::OPT_finline_functions, > + if (Arg *InlineArg = Args.getLastArg(options::OPT_finline_functions, > options::OPT_finline_hint_functions, > options::OPT_fno_inline_functions)) > InlineArg->render(Args, CmdArgs); > @@ -5608,7 +5621,6 @@ void Clang::ConstructJob(Compilation &C, > options::OPT_fno_objc_arc_exceptions, > /*default*/ types::isCXX(InputType))) > CmdArgs.push_back("-fobjc-arc-exceptions"); > - > } > > // -fobjc-infer-related-result-type is the default, except in the > Objective-C > @@ -5634,8 +5646,8 @@ void Clang::ConstructJob(Compilation &C, > > // Pass down -fobjc-weak or -fno-objc-weak if present. > if (types::isObjC(InputType)) { > - auto WeakArg = Args.getLastArg(options::OPT_fobjc_weak, > - options::OPT_fno_objc_weak); > + auto WeakArg = > + Args.getLastArg(options::OPT_fobjc_weak, options::OPT_fno_objc_weak); > if (!WeakArg) { > // nothing to do > } else if (GCArg) { > @@ -5805,7 +5817,7 @@ void Clang::ConstructJob(Compilation &C, > StringRef Value(A->getValue()); > if (Value != "always" && Value != "never" && Value != "auto") > getToolChain().getDriver().Diag(diag::err_drv_clang_unsupported) > - << ("-fdiagnostics-color=" + Value).str(); > + << ("-fdiagnostics-color=" + Value).str(); > } > A->claim(); > } > @@ -6476,6 +6488,7 @@ void ClangAs::AddX86TargetArgs(const Arg > > void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, const InputInfoList > &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -6483,9 +6496,7 @@ void ClangAs::ConstructJob(Compilation & > assert(Inputs.size() == 1 && "Unexpected number of inputs."); > const InputInfo &Input = Inputs[0]; > > - std::string TripleStr = > - getToolChain().ComputeEffectiveClangTriple(Args, Input.getType()); > - const llvm::Triple Triple(TripleStr); > + std::string TripleStr = EffectiveTriple.str(); > > // Don't warn about "clang -w -c foo.s" > Args.ClaimAllArgs(options::OPT_w); > @@ -6514,14 +6525,14 @@ void ClangAs::ConstructJob(Compilation & > CmdArgs.push_back(Clang::getBaseInputName(Args, Input)); > > // Add the target cpu > - std::string CPU = getCPUName(Args, Triple, /*FromAs*/ true); > + std::string CPU = getCPUName(Args, EffectiveTriple, /*FromAs*/ true); > if (!CPU.empty()) { > CmdArgs.push_back("-target-cpu"); > CmdArgs.push_back(Args.MakeArgString(CPU)); > } > > // Add the target features > - getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, true); > + getTargetFeatures(getToolChain(), EffectiveTriple, Args, CmdArgs, true); > > // Ignore explicit -force_cpusubtype_ALL option. > (void)Args.hasArg(options::OPT_force__cpusubtype__ALL); > @@ -6580,7 +6591,7 @@ void ClangAs::ConstructJob(Compilation & > unsigned PICLevel; > bool IsPIE; > std::tie(RelocationModel, PICLevel, IsPIE) = > - ParsePICArgs(getToolChain(), Triple, Args); > + ParsePICArgs(getToolChain(), EffectiveTriple, Args); > > const char *RMName = RelocationModelName(RelocationModel); > if (RMName) { > @@ -6663,7 +6674,9 @@ void GnuTool::anchor() {} > > void gcc::Common::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > - const InputInfoList &Inputs, const ArgList > &Args, > + const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > + const ArgList &Args, > const char *LinkingOutput) const { > const Driver &D = getToolChain().getDriver(); > ArgStringList CmdArgs; > @@ -6830,6 +6843,7 @@ void hexagon::Assembler::RenderExtraTool > void hexagon::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -7073,6 +7087,7 @@ constructHexagonLinkArgs(Compilation &C, > void hexagon::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > auto &HTC = static_cast<const > toolchains::HexagonToolChain&>(getToolChain()); > @@ -7090,6 +7105,7 @@ void hexagon::Linker::ConstructJob(Compi > void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > > @@ -7118,6 +7134,7 @@ bool wasm::Linker::hasIntegratedCPP() co > void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > > @@ -7193,7 +7210,8 @@ const std::string arm::getARMArch(String > std::string CPU = llvm::sys::getHostCPUName(); > if (CPU != "generic") { > // Translate the native cpu into the architecture suffix for that CPU. > - StringRef Suffix = arm::getLLVMArchSuffixForARM(CPU, MArch, Triple); > + StringRef Suffix = > + arm::getLLVMArchSuffixForARM(CPU, MArch, Triple); > // If there is no valid architecture suffix for this CPU we don't know > how > // to handle it, so return no architecture. > if (Suffix.empty()) > @@ -7453,6 +7471,7 @@ const char *Clang::getDependencyFileName > void cloudabi::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > const ToolChain &ToolChain = getToolChain(); > @@ -7521,6 +7540,7 @@ void cloudabi::Linker::ConstructJob(Comp > void darwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -7818,6 +7838,7 @@ void darwin::Linker::AddLinkArgs(Compila > void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > assert(Output.getType() == types::TY_Image && "Invalid linker output > type."); > @@ -7919,7 +7940,7 @@ void darwin::Linker::ConstructJob(Compil > if (Args.hasArg(options::OPT_fnested_functions)) > CmdArgs.push_back("-allow_stack_execute"); > > - getMachOToolChain().addProfileRTLibs(Args, CmdArgs); > + getMachOToolChain().addProfileRTLibs(EffectiveTriple, Args, CmdArgs); > > if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { > if (getToolChain().getDriver().CCCIsCXX()) > @@ -7928,7 +7949,7 @@ void darwin::Linker::ConstructJob(Compil > // link_ssp spec is empty. > > // Let the tool chain choose which runtime library to link. > - getMachOToolChain().AddLinkRuntimeLibArgs(Args, CmdArgs); > + getMachOToolChain().AddLinkRuntimeLibArgs(EffectiveTriple, Args, > CmdArgs); > } > > if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { > @@ -7961,6 +7982,7 @@ void darwin::Linker::ConstructJob(Compil > void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -7983,6 +8005,7 @@ void darwin::Lipo::ConstructJob(Compilat > void darwin::Dsymutil::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -8003,6 +8026,7 @@ void darwin::Dsymutil::ConstructJob(Comp > void darwin::VerifyDebug::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -8026,6 +8050,7 @@ void darwin::VerifyDebug::ConstructJob(C > void solaris::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -8046,6 +8071,7 @@ void solaris::Assembler::ConstructJob(Co > void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > ArgStringList CmdArgs; > @@ -8115,7 +8141,7 @@ void solaris::Linker::ConstructJob(Compi > } > > CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o"))); > > - getToolChain().addProfileRTLibs(Args, CmdArgs); > + getToolChain().addProfileRTLibs(EffectiveTriple, Args, CmdArgs); > > const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath()); > C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs)); > @@ -8124,6 +8150,7 @@ void solaris::Linker::ConstructJob(Compi > void openbsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -8195,6 +8222,7 @@ void openbsd::Assembler::ConstructJob(Co > void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > const Driver &D = getToolChain().getDriver(); > @@ -8317,6 +8345,7 @@ void openbsd::Linker::ConstructJob(Compi > void bitrig::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -8337,6 +8366,7 @@ void bitrig::Assembler::ConstructJob(Com > void bitrig::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > const Driver &D = getToolChain().getDriver(); > @@ -8446,6 +8476,7 @@ void bitrig::Linker::ConstructJob(Compil > void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -8495,7 +8526,8 @@ void freebsd::Assembler::ConstructJob(Co > case llvm::Triple::armeb: > case llvm::Triple::thumb: > case llvm::Triple::thumbeb: { > - arm::FloatABI ABI = arm::getARMFloatABI(getToolChain(), Args); > + arm::FloatABI ABI = > + arm::getARMFloatABI(getToolChain(), EffectiveTriple, Args); > > if (ABI == arm::FloatABI::Hard) > CmdArgs.push_back("-mfpu=vfp"); > @@ -8539,6 +8571,7 @@ void freebsd::Assembler::ConstructJob(Co > void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > const toolchains::FreeBSD &ToolChain = > @@ -8653,7 +8686,8 @@ void freebsd::Linker::ConstructJob(Compi > if (D.isUsingLTO()) > AddGoldPlugin(ToolChain, Args, CmdArgs, D.getLTOMode() == LTOK_Thin); > > - bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs); > + bool NeedsSanitizerDeps = > + addSanitizerRuntimes(ToolChain, EffectiveTriple, Args, CmdArgs); > AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs); > > if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { > @@ -8720,7 +8754,7 @@ void freebsd::Linker::ConstructJob(Compi > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o"))); > } > > - ToolChain.addProfileRTLibs(Args, CmdArgs); > + ToolChain.addProfileRTLibs(EffectiveTriple, Args, CmdArgs); > > const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath()); > C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs)); > @@ -8729,6 +8763,7 @@ void freebsd::Linker::ConstructJob(Compi > void netbsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > claimNoWarnArgs(Args); > @@ -8812,6 +8847,7 @@ void netbsd::Assembler::ConstructJob(Com > void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputInfoList &Inputs, > + const llvm::Triple &EffectiveTriple, > const ArgList &Args, > const char *LinkingOutput) const { > const Driver &D = getToolChain().getDriver(); > @@ -8861,9 +8897,7 @@ void netbsd::Linker::ConstructJob(Compil > break; > case llvm::Triple::armeb: > case llvm::Triple::thumbeb: > - arm::appendEBLinkFlags( > - Args, CmdArgs, > - llvm::Triple(getToolChain().ComputeEffectiveClangTriple(Args))); > + arm::appendEBLinkFlags(Args, CmdArgs, EffectiveTriple); > CmdArgs.push_back("-m"); > switch (getToolChain().getTriple().getEnvironment()) { > case llvm::Triple::EABI: > @@ -9014,7 +9048,7 @@ void netbsd::Linker::ConstructJob(Compil > > CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o"))); > } > > - getToolChain().addProfileRTLibs(Args, CmdArgs); > + getToolChain().addProfileRTLibs(EffectiveTriple, Args, CmdArgs); > > const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath()); > C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs)); > @@ -9023,20 +9057,18 @@ void netbsd::Linker::ConstructJob(Compil > void gnutools::Assembler::ConstructJob(Compilation &C, const JobAction &JA, > const InputInfo &Output, > const InputIn _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits