Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -1639,8 +1639,9 @@ ArgStringList &CmdArgs) const { // Select the ABI to use. const char *ABIName = nullptr; - if (getToolChain().getTriple().isOSLinux()) - switch (getToolChain().getArch()) { + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); + if (Triple.isOSLinux()) + switch (Triple.getArch()) { case llvm::Triple::ppc64: { // When targeting a processor that supports QPX, or if QPX is // specifically enabled, default to using the ABI that supports QPX (so @@ -3652,13 +3653,10 @@ static std::tuple ParsePICArgs(const ToolChain &ToolChain, const llvm::Triple &Triple, const ArgList &Args) { - // FIXME: why does this code...and so much everywhere else, use both - // ToolChain.getTriple() and Triple? bool PIE = ToolChain.isPIEDefault(); bool PIC = PIE || ToolChain.isPICDefault(); // The Darwin/MachO default to use PIC does not apply when using -static. - if (ToolChain.getTriple().isOSBinFormatMachO() && - Args.hasArg(options::OPT_static)) + if (Triple.isOSBinFormatMachO() && Args.hasArg(options::OPT_static)) PIE = PIC = false; bool IsPICLevelTwo = PIC; @@ -3666,7 +3664,7 @@ Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext); // Android-specific defaults for PIC/PIE - if (ToolChain.getTriple().isAndroid()) { + if (Triple.isAndroid()) { switch (ToolChain.getArch()) { case llvm::Triple::arm: case llvm::Triple::armeb: @@ -3692,7 +3690,7 @@ } // OpenBSD-specific defaults for PIE - if (ToolChain.getTriple().getOS() == llvm::Triple::OpenBSD) { + if (Triple.getOS() == llvm::Triple::OpenBSD) { switch (ToolChain.getArch()) { case llvm::Triple::mips64: case llvm::Triple::mips64el: @@ -3751,7 +3749,7 @@ // Introduce a Darwin and PS4-specific hack. If the default is PIC, but the // PIC level would've been set to level 1, force it back to level 2 PIC // instead. - if (PIC && (ToolChain.getTriple().isOSDarwin() || Triple.isPS4CPU())) + if (PIC && (Triple.isOSDarwin() || Triple.isPS4CPU())) IsPICLevelTwo |= ToolChain.isPICDefault(); // This kernel flags are a trump-card: they will disable PIC/PIE @@ -3763,9 +3761,9 @@ if (Arg *A = Args.getLastArg(options::OPT_mdynamic_no_pic)) { // This is a very special mode. It trumps the other modes, almost no one // uses it, and it isn't even valid on any OS but Darwin. - if (!ToolChain.getTriple().isOSDarwin()) + if (!Triple.isOSDarwin()) ToolChain.getDriver().Diag(diag::err_drv_unsupported_opt_for_target) - << A->getSpelling() << ToolChain.getTriple().str(); + << A->getSpelling() << Triple.str(); // FIXME: Warn when this flag trumps some other PIC or PIE flag. @@ -3801,7 +3799,7 @@ unsigned PICLevel; bool IsPIE; std::tie(RelocationModel, PICLevel, IsPIE) = - ParsePICArgs(ToolChain, ToolChain.getTriple(), Args); + ParsePICArgs(ToolChain, ToolChain.getEffectiveTriple(), Args); if (RelocationModel != llvm::Reloc::Static) CmdArgs.push_back("-KPIC"); @@ -3818,12 +3816,11 @@ const Driver &D = getToolChain().getDriver(); ArgStringList CmdArgs; - bool IsWindowsGNU = getToolChain().getTriple().isWindowsGNUEnvironment(); - bool IsWindowsCygnus = - getToolChain().getTriple().isWindowsCygwinEnvironment(); - bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment(); - bool IsPS4CPU = getToolChain().getTriple().isPS4CPU(); - bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); + bool IsWindowsGNU = Triple.isWindowsGNUEnvironment(); + bool IsWindowsCygnus = Triple.isWindowsCygwinEnvironment(); + bool IsWindowsMSVC = Triple.isWindowsMSVCEnvironment(); + bool IsPS4CPU = Triple.isPS4CPU(); + bool IsIAMCU = Triple.isOSIAMCU(); // Check number of inputs for sanity. We need at least one input. assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -4025,7 +4022,7 @@ CmdArgs.push_back("-analyzer-disable-checker=unix.Vfork"); } - if (getToolChain().getTriple().getVendor() == llvm::Triple::Apple) + if (Triple.getVendor() == llvm::Triple::Apple) CmdArgs.push_back("-analyzer-checker=osx"); CmdArgs.push_back("-analyzer-checker=deadcode"); @@ -4137,9 +4134,9 @@ if (Arg *A = Args.getLastArg(options::OPT_fpcc_struct_return, options::OPT_freg_struct_return)) { - if (getToolChain().getArch() != llvm::Triple::x86) { - D.Diag(diag::err_drv_unsupported_opt_for_target) - << A->getSpelling() << getToolChain().getTriple().str(); + if (Triple.getArch() != llvm::Triple::x86) { + D.Diag(diag::err_drv_unsupported_opt_for_target) << A->getSpelling() + << Triple.str(); } else if (A->getOption().matches(options::OPT_fpcc_struct_return)) { CmdArgs.push_back("-fpcc-struct-return"); } else { @@ -4151,7 +4148,7 @@ if (Args.hasFlag(options::OPT_mrtd, options::OPT_mno_rtd, false)) CmdArgs.push_back("-fdefault-calling-conv=stdcall"); - if (shouldUseFramePointer(Args, getToolChain().getTriple())) + if (shouldUseFramePointer(Args, Triple)) CmdArgs.push_back("-mdisable-fp-elim"); if (!Args.hasFlag(options::OPT_fzero_initialized_in_bss, options::OPT_fno_zero_initialized_in_bss)) @@ -4348,13 +4345,12 @@ // Enable -mconstructor-aliases except on darwin, where we have to work around // a linker bug (see ), and CUDA device code, where // aliases aren't supported. - if (!getToolChain().getTriple().isOSDarwin() && - !getToolChain().getTriple().isNVPTX()) + if (!Triple.isOSDarwin() && !Triple.isNVPTX()) CmdArgs.push_back("-mconstructor-aliases"); // Darwin's kernel doesn't support guard variables; just die if we // try to use them. - if (KernelOrKext && getToolChain().getTriple().isOSDarwin()) + if (KernelOrKext && Triple.isOSDarwin()) CmdArgs.push_back("-fforbid-guard-variables"); if (Args.hasFlag(options::OPT_mms_bitfields, options::OPT_mno_ms_bitfields, @@ -4406,7 +4402,7 @@ getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, false); // Add target specific flags. - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { default: break; @@ -4491,15 +4487,15 @@ CmdArgs.push_back(A->getValue()); } - if (!shouldUseLeafFramePointer(Args, getToolChain().getTriple())) + if (!shouldUseLeafFramePointer(Args, Triple)) CmdArgs.push_back("-momit-leaf-frame-pointer"); // Explicitly error on some things we know we don't support and can't just // ignore. if (!Args.hasArg(options::OPT_fallow_unsupported)) { Arg *Unsupported; - if (types::isCXX(InputType) && getToolChain().getTriple().isOSDarwin() && - getToolChain().getArch() == llvm::Triple::x86) { + if (types::isCXX(InputType) && Triple.isOSDarwin() && + Triple.getArch() == llvm::Triple::x86) { if ((Unsupported = Args.getLastArg(options::OPT_fapple_kext)) || (Unsupported = Args.getLastArg(options::OPT_mkernel))) D.Diag(diag::err_drv_clang_unsupported_opt_cxx_darwin_i386) @@ -4584,7 +4580,7 @@ // -gsplit-dwarf should turn on -g and enable the backend dwarf // splitting and extraction. // FIXME: Currently only works on Linux. - if (getToolChain().getTriple().isOSLinux() && SplitDwarfArg) { + if (Triple.isOSLinux() && SplitDwarfArg) { DebugInfoKind = codegenoptions::LimitedDebugInfo; CmdArgs.push_back("-backend-option"); CmdArgs.push_back("-split-dwarf=Enable"); @@ -4659,7 +4655,7 @@ addPGOAndCoverageFlags(C, D, Output, Args, CmdArgs); // Add runtime flag for PS4 when PGO or Coverage are enabled. - if (getToolChain().getTriple().isPS4CPU()) + if (Triple.isPS4CPU()) addPS4ProfileRTArgs(getToolChain(), Args, CmdArgs); // Pass options for controlling the default header search paths. @@ -5045,7 +5041,7 @@ // Report an error for -faltivec on anything other than PowerPC. if (const Arg *A = Args.getLastArg(options::OPT_faltivec)) { - const llvm::Triple::ArchType Arch = getToolChain().getArch(); + const llvm::Triple::ArchType Arch = Triple.getArch(); if (!(Arch == llvm::Triple::ppc || Arch == llvm::Triple::ppc64 || Arch == llvm::Triple::ppc64le)) D.Diag(diag::err_drv_argument_only_allowed_with) << A->getAsString(Args) @@ -5160,7 +5156,7 @@ CmdArgs.push_back("-mstack-probe-size=0"); } - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: case llvm::Triple::arm: @@ -5425,7 +5421,7 @@ // -fshort-enums=0 is default for all architectures except Hexagon. if (Args.hasFlag(options::OPT_fshort_enums, options::OPT_fno_short_enums, - getToolChain().getArch() == llvm::Triple::hexagon)) + Triple.getArch() == llvm::Triple::hexagon)) CmdArgs.push_back("-fshort-enums"); // -fsigned-char is default. @@ -5436,7 +5432,7 @@ A->getOption().matches(options::OPT_fno_signed_char)) { CmdArgs.push_back("-fno-signed-char"); } - } else if (!isSignedCharDefault(getToolChain().getTriple())) { + } else if (!isSignedCharDefault(Triple)) { CmdArgs.push_back("-fno-signed-char"); } @@ -5444,12 +5440,11 @@ if (!Args.hasFlag( options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit, !IsWindowsCygnus && !IsWindowsGNU && - getToolChain().getTriple().getOS() != llvm::Triple::Solaris && - getToolChain().getArch() != llvm::Triple::hexagon && - getToolChain().getArch() != llvm::Triple::xcore && - ((getToolChain().getTriple().getVendor() != - llvm::Triple::MipsTechnologies) || - getToolChain().getTriple().hasEnvironment())) || + Triple.getOS() != llvm::Triple::Solaris && + Triple.getArch() != llvm::Triple::hexagon && + Triple.getArch() != llvm::Triple::xcore && + ((Triple.getVendor() != llvm::Triple::MipsTechnologies) || + Triple.hasEnvironment())) || KernelOrKext) CmdArgs.push_back("-fno-use-cxa-atexit"); @@ -5472,8 +5467,8 @@ CmdArgs.push_back("-fms-compatibility"); // -fms-compatibility-version=18.00 is default. - VersionTuple MSVT = visualstudio::getMSVCVersion( - &D, getToolChain(), getToolChain().getTriple(), Args, IsWindowsMSVC); + VersionTuple MSVT = visualstudio::getMSVCVersion(&D, getToolChain(), Triple, + Args, IsWindowsMSVC); if (!MSVT.empty()) CmdArgs.push_back( Args.MakeArgString("-fms-compatibility-version=" + MSVT.getAsString())); @@ -5508,7 +5503,7 @@ // -fno-declspec is default, except for PS4. if (Args.hasFlag(options::OPT_fdeclspec, options::OPT_fno_declspec, - getToolChain().getTriple().isPS4())) + Triple.isPS4())) CmdArgs.push_back("-fdeclspec"); else if (Args.hasArg(options::OPT_fno_declspec)) CmdArgs.push_back("-fno-declspec"); // Explicitly disabling __declspec. @@ -5554,7 +5549,7 @@ if (!Args.hasFlag(options::OPT_fobjc_legacy_dispatch, options::OPT_fno_objc_legacy_dispatch, objcRuntime.isLegacyDispatchDefaultForArch( - getToolChain().getArch()))) { + Triple.getArch()))) { if (getToolChain().UseObjCMixedDispatch()) CmdArgs.push_back("-fobjc-dispatch-method=mixed"); else @@ -5565,9 +5560,8 @@ // When ObjectiveC legacy runtime is in effect on MacOSX, // turn on the option to do Array/Dictionary subscripting // by default. - if (getToolChain().getArch() == llvm::Triple::x86 && - getToolChain().getTriple().isMacOSX() && - !getToolChain().getTriple().isMacOSXVersionLT(10, 7) && + if (Triple.getArch() == llvm::Triple::x86 && Triple.isMacOSX() && + !Triple.isMacOSXVersionLT(10, 7) && objcRuntime.getKind() == ObjCRuntime::FragileMacOSX && objcRuntime.isNeXTFamily()) CmdArgs.push_back("-fobjc-subscripting-legacy-runtime"); @@ -5704,7 +5698,7 @@ MaxTypeAlignStr += A->getValue(); CmdArgs.push_back(Args.MakeArgString(MaxTypeAlignStr)); } - } else if (getToolChain().getTriple().isOSDarwin()) { + } else if (Triple.isOSDarwin()) { if (!SkipMaxTypeAlign) { std::string MaxTypeAlignStr = "-fmax-type-align=16"; CmdArgs.push_back(Args.MakeArgString(MaxTypeAlignStr)); @@ -5712,8 +5706,7 @@ } // -fcommon is the default unless compiling kernel code or the target says so - bool NoCommonDefault = - KernelOrKext || isNoCommonDefault(getToolChain().getTriple()); + bool NoCommonDefault = KernelOrKext || isNoCommonDefault(Triple); if (!Args.hasFlag(options::OPT_fcommon, options::OPT_fno_common, !NoCommonDefault)) CmdArgs.push_back("-fno-common"); @@ -5885,7 +5878,7 @@ // le32-specific flags: // -fno-math-builtin: clang should not convert math builtins to intrinsics // by default. - if (getToolChain().getArch() == llvm::Triple::le32) { + if (Triple.getArch() == llvm::Triple::le32) { CmdArgs.push_back("-fno-math-builtin"); } @@ -6012,7 +6005,7 @@ // Add the split debug info name to the command lines here so we // can propagate it to the backend. - bool SplitDwarf = SplitDwarfArg && getToolChain().getTriple().isOSLinux() && + bool SplitDwarf = SplitDwarfArg && Triple.isOSLinux() && (isa(JA) || isa(JA) || isa(JA)); const char *SplitDwarfOut; @@ -6275,6 +6268,7 @@ ArgStringList &CmdArgs, codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const { + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); unsigned RTOptionID = options::OPT__SLASH_MT; if (Args.hasArg(options::OPT__SLASH_LDd)) @@ -6377,8 +6371,8 @@ } unsigned VolatileOptionID; - if (getToolChain().getArch() == llvm::Triple::x86_64 || - getToolChain().getArch() == llvm::Triple::x86) + if (Triple.getArch() == llvm::Triple::x86_64 || + Triple.getArch() == llvm::Triple::x86) VolatileOptionID = options::OPT__SLASH_volatile_ms; else VolatileOptionID = options::OPT__SLASH_volatile_iso; @@ -6603,7 +6597,7 @@ // FIXME: Add -static support, once we have it. // Add target specific flags. - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { default: break; @@ -6658,6 +6652,7 @@ const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const { const Driver &D = getToolChain().getDriver(); + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); ArgStringList CmdArgs; for (const auto &A : Args) { @@ -6685,7 +6680,7 @@ RenderExtraToolArgs(JA, CmdArgs); // If using a driver driver, force the arch. - if (getToolChain().getTriple().isOSDarwin()) { + if (Triple.isOSDarwin()) { CmdArgs.push_back("-arch"); CmdArgs.push_back( Args.MakeArgString(getToolChain().getDefaultUniversalArchName())); @@ -6696,7 +6691,7 @@ // // FIXME: The triple class should directly provide the information we want // here. - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { default: break; case llvm::Triple::x86: @@ -7516,6 +7511,7 @@ const ArgList &Args, const char *LinkingOutput) const { ArgStringList CmdArgs; + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); assert(Inputs.size() == 1 && "Unexpected number of inputs."); const InputInfo &Input = Inputs[0]; @@ -7551,12 +7547,12 @@ AddMachOArch(Args, CmdArgs); // Use -force_cpusubtype_ALL on x86 by default. - if (getToolChain().getArch() == llvm::Triple::x86 || - getToolChain().getArch() == llvm::Triple::x86_64 || + if (Triple.getArch() == llvm::Triple::x86 || + Triple.getArch() == llvm::Triple::x86_64 || Args.hasArg(options::OPT_force__cpusubtype__ALL)) CmdArgs.push_back("-force_cpusubtype_ALL"); - if (getToolChain().getArch() != llvm::Triple::x86_64 && + if (Triple.getArch() != llvm::Triple::x86_64 && (((Args.hasArg(options::OPT_mkernel) || Args.hasArg(options::OPT_fapple_kext)) && getMachOToolChain().isKernelStatic()) || @@ -8120,8 +8116,9 @@ const char *LinkingOutput) const { claimNoWarnArgs(Args); ArgStringList CmdArgs; + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { case llvm::Triple::x86: // When building 32-bit code on OpenBSD/amd64, we have to explicitly // instruct as in the base system to assemble 32-bit code. @@ -8136,16 +8133,16 @@ case llvm::Triple::sparc: case llvm::Triple::sparcel: { CmdArgs.push_back("-32"); - std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + std::string CPU = getCPUName(Args, Triple); + CmdArgs.push_back(getSparcAsmModeForCPU(CPU, Triple)); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } case llvm::Triple::sparcv9: { CmdArgs.push_back("-64"); - std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + std::string CPU = getCPUName(Args, Triple); + CmdArgs.push_back(getSparcAsmModeForCPU(CPU, Triple)); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } @@ -8154,12 +8151,12 @@ case llvm::Triple::mips64el: { StringRef CPUName; StringRef ABIName; - mips::getMipsCPUAndABI(Args, getToolChain().getTriple(), CPUName, ABIName); + mips::getMipsCPUAndABI(Args, Triple, CPUName, ABIName); CmdArgs.push_back("-mabi"); CmdArgs.push_back(getGnuCompatibleMipsABIName(ABIName).data()); - if (getToolChain().getArch() == llvm::Triple::mips64) + if (Triple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("-EB"); else CmdArgs.push_back("-EL"); @@ -8200,9 +8197,10 @@ // handled somewhere else. Args.ClaimAllArgs(options::OPT_w); - if (getToolChain().getArch() == llvm::Triple::mips64) + const llvm::Triple &EffectiveTriple = getToolChain().getEffectiveTriple(); + if (EffectiveTriple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("-EB"); - else if (getToolChain().getArch() == llvm::Triple::mips64el) + else if (EffectiveTriple.getArch() == llvm::Triple::mips64el) CmdArgs.push_back("-EL"); if (!Args.hasArg(options::OPT_nostdlib, options::OPT_shared)) { @@ -8442,10 +8440,11 @@ const char *LinkingOutput) const { claimNoWarnArgs(Args); ArgStringList CmdArgs; + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); // When building 32-bit code on FreeBSD/amd64, we have to explicitly // instruct as in the base system to assemble 32-bit code. - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { default: break; case llvm::Triple::x86: @@ -8460,7 +8459,7 @@ case llvm::Triple::mips64el: { StringRef CPUName; StringRef ABIName; - mips::getMipsCPUAndABI(Args, getToolChain().getTriple(), CPUName, ABIName); + mips::getMipsCPUAndABI(Args, Triple, CPUName, ABIName); CmdArgs.push_back("-march"); CmdArgs.push_back(CPUName.data()); @@ -8468,8 +8467,8 @@ CmdArgs.push_back("-mabi"); CmdArgs.push_back(getGnuCompatibleMipsABIName(ABIName).data()); - if (getToolChain().getArch() == llvm::Triple::mips || - getToolChain().getArch() == llvm::Triple::mips64) + if (Triple.getArch() == llvm::Triple::mips || + Triple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("-EB"); else CmdArgs.push_back("-EL"); @@ -8494,7 +8493,7 @@ else CmdArgs.push_back("-mfpu=softvfp"); - switch (getToolChain().getTriple().getEnvironment()) { + switch (Triple.getEnvironment()) { case llvm::Triple::GNUEABIHF: case llvm::Triple::GNUEABI: case llvm::Triple::EABI: @@ -8509,8 +8508,8 @@ case llvm::Triple::sparc: case llvm::Triple::sparcel: case llvm::Triple::sparcv9: { - std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + std::string CPU = getCPUName(Args, Triple); + CmdArgs.push_back(getSparcAsmModeForCPU(CPU, Triple)); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } @@ -8811,6 +8810,7 @@ const char *LinkingOutput) const { const Driver &D = getToolChain().getDriver(); ArgStringList CmdArgs; + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); if (!D.SysRoot.empty()) CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); @@ -8832,7 +8832,7 @@ // Many NetBSD architectures support more than one ABI. // Determine the correct emulation for ld. - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { case llvm::Triple::x86: CmdArgs.push_back("-m"); CmdArgs.push_back("elf_i386"); @@ -8840,7 +8840,7 @@ case llvm::Triple::arm: case llvm::Triple::thumb: CmdArgs.push_back("-m"); - switch (getToolChain().getTriple().getEnvironment()) { + switch (Triple.getEnvironment()) { case llvm::Triple::EABI: case llvm::Triple::GNUEABI: CmdArgs.push_back("armelf_nbsd_eabi"); @@ -8856,9 +8856,9 @@ break; case llvm::Triple::armeb: case llvm::Triple::thumbeb: - arm::appendEBLinkFlags(Args, CmdArgs, getToolChain().getEffectiveTriple()); + arm::appendEBLinkFlags(Args, CmdArgs, Triple); CmdArgs.push_back("-m"); - switch (getToolChain().getTriple().getEnvironment()) { + switch (Triple.getEnvironment()) { case llvm::Triple::EABI: case llvm::Triple::GNUEABI: CmdArgs.push_back("armelfb_nbsd_eabi"); @@ -8876,13 +8876,13 @@ case llvm::Triple::mips64el: if (mips::hasMipsAbiArg(Args, "32")) { CmdArgs.push_back("-m"); - if (getToolChain().getArch() == llvm::Triple::mips64) + if (Triple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("elf32btsmip"); else CmdArgs.push_back("elf32ltsmip"); } else if (mips::hasMipsAbiArg(Args, "64")) { CmdArgs.push_back("-m"); - if (getToolChain().getArch() == llvm::Triple::mips64) + if (Triple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("elf64btsmip"); else CmdArgs.push_back("elf64ltsmip"); @@ -8950,7 +8950,7 @@ getToolChain().getEffectiveTriple().getOSVersion(Major, Minor, Micro); bool useLibgcc = true; if (Major >= 7 || Major == 0) { - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { case llvm::Triple::aarch64: case llvm::Triple::arm: case llvm::Triple::armeb: @@ -9030,7 +9030,7 @@ std::tie(RelocationModel, PICLevel, IsPIE) = ParsePICArgs(getToolChain(), Triple, Args); - switch (getToolChain().getArch()) { + switch (Triple.getArch()) { default: break; // Add --32/--64 to make sure we get the format we want. @@ -9039,7 +9039,7 @@ CmdArgs.push_back("--32"); break; case llvm::Triple::x86_64: - if (getToolChain().getTriple().getEnvironment() == llvm::Triple::GNUX32) + if (Triple.getEnvironment() == llvm::Triple::GNUX32) CmdArgs.push_back("--x32"); else CmdArgs.push_back("--64"); @@ -9063,15 +9063,15 @@ case llvm::Triple::sparc: case llvm::Triple::sparcel: { CmdArgs.push_back("-32"); - std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + std::string CPU = getCPUName(Args, Triple); + CmdArgs.push_back(getSparcAsmModeForCPU(CPU, Triple)); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } case llvm::Triple::sparcv9: { CmdArgs.push_back("-64"); - std::string CPU = getCPUName(Args, getToolChain().getTriple()); - CmdArgs.push_back(getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); + std::string CPU = getCPUName(Args, Triple); + CmdArgs.push_back(getSparcAsmModeForCPU(CPU, Triple)); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } @@ -9126,7 +9126,7 @@ case llvm::Triple::mips64el: { StringRef CPUName; StringRef ABIName; - mips::getMipsCPUAndABI(Args, getToolChain().getTriple(), CPUName, ABIName); + mips::getMipsCPUAndABI(Args, Triple, CPUName, ABIName); ABIName = getGnuCompatibleMipsABIName(ABIName); CmdArgs.push_back("-march"); @@ -9144,8 +9144,8 @@ // However, -mplt has no effect with the N64 ABI. CmdArgs.push_back(ABIName == "64" ? "-KPIC" : "-call_nonpic"); - if (getToolChain().getArch() == llvm::Triple::mips || - getToolChain().getArch() == llvm::Triple::mips64) + if (Triple.getArch() == llvm::Triple::mips || + Triple.getArch() == llvm::Triple::mips64) CmdArgs.push_back("-EB"); else CmdArgs.push_back("-EL"); @@ -9161,7 +9161,7 @@ A->claim(); A->render(Args, CmdArgs); } else if (mips::shouldUseFPXX( - Args, getToolChain().getTriple(), CPUName, ABIName, + Args, Triple, CPUName, ABIName, getMipsFloatABI(getToolChain().getDriver(), Args))) CmdArgs.push_back("-mfpxx"); @@ -10313,9 +10313,10 @@ claimNoWarnArgs(Args); ArgStringList CmdArgs; - if (getToolChain().getArch() == llvm::Triple::x86) { + const llvm::Triple &Triple = getToolChain().getEffectiveTriple(); + if (Triple.getArch() == llvm::Triple::x86) { CmdArgs.push_back("--32"); - } else if (getToolChain().getArch() == llvm::Triple::x86_64) { + } else if (Triple.getArch() == llvm::Triple::x86_64) { CmdArgs.push_back("--64"); }