> On Jul 19, 2016, at 3:53 PM, Eric Christopher <echri...@gmail.com> wrote: > > > > On Tue, Jul 19, 2016 at 3:51 PM Vedant Kumar <v...@apple.com> wrote: > > > On Jul 19, 2016, at 3:38 PM, Eric Christopher <echri...@gmail.com> wrote: > > > > > > > > On Tue, Jul 19, 2016 at 3:24 PM Vedant Kumar <v...@apple.com> wrote: > > > > > 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 couldn't find a thread anywhere - and there's not one in the phab > > revision. > > Here's the relevant part of the discussion: > > http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160711/164519.html > > > > OK. > > > 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. > > > > > > Where do we do that? As far as I know we don't have a case where this > > applies and I'd consider all of this infrastructure to be internal for any > > external tools. > > We don't do that in-tree. > > OK. > > > > > 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. > > > > > > Adding Justin here a bit since he's looked at it more recently, but my > > general case would be to cache in the ToolChain. Anything that has problems > > with that caching will need to be fixed to deal (either anything depending > > on ToolChain in clang or external code). > > Sure, I can give that a shot (barring any alternate suggestions that may come > up). > > To sketch it: > > - Add {get,set}EffectiveTriple to ToolChain > - Assert that the triple exists in getEffectiveTriple() > - Use a wrapper to set the triple before Tool::ConstructJob() > - Remove the extra triple arguments > > > Seems like it'll work. Maybe even compute it at ToolChain initialization so > you don't need the setter?
In general, it looks like effective triples are allowed to change based on the `types::ID InputType` supplied by the job. I'll look into changing that. For now, that information isn't available when ToolChain's are initialized. PTAL at https://reviews.llvm.org/D22596. thanks, vedant > > -eric > > vedant > > > > > > -eric > > > > 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, > > > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits