Index: lib/Basic/Targets.cpp =================================================================== --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -5332,6 +5332,14 @@ } }; +// SPARCV8_le is the 32-bit little-endian mode selected by Triple::sparc_le. +class SparcV8_leTargetInfo : public SparcV8TargetInfo { +public: + SparcV8_leTargetInfo(const llvm::Triple &Triple) : SparcV8TargetInfo(Triple) { + DescriptionString = "e-m:e-p:32:32-i64:64-f128:64-n32-S64"; + } +}; + // SPARC v9 is the 64-bit mode selected by Triple::sparcv9. class SparcV9TargetInfo : public SparcTargetInfo { public: @@ -6735,6 +6743,12 @@ case llvm::Triple::r600: return new R600TargetInfo(Triple); + case llvm::Triple::sparc_le: + switch (os) { + default: + return new SparcV8_leTargetInfo(Triple); + } + case llvm::Triple::sparc: switch (os) { case llvm::Triple::Linux: Index: lib/Driver/ToolChains.cpp =================================================================== --- lib/Driver/ToolChains.cpp +++ lib/Driver/ToolChains.cpp @@ -2072,6 +2072,7 @@ getTriple().getArch() == llvm::Triple::ppc64 || getTriple().getArch() == llvm::Triple::ppc64le || getTriple().getArch() == llvm::Triple::sparc || + getTriple().getArch() == llvm::Triple::sparc_le || getTriple().getArch() == llvm::Triple::sparcv9 || getTriple().getArch() == llvm::Triple::systemz; } Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -1524,6 +1524,7 @@ } case llvm::Triple::sparc: + case llvm::Triple::sparc_le: case llvm::Triple::sparcv9: if (const Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) return A->getValue(); @@ -1882,6 +1883,7 @@ getPPCTargetFeatures(Args, Features); break; case llvm::Triple::sparc: + case llvm::Triple::sparc_le: case llvm::Triple::sparcv9: getSparcTargetFeatures(Args, Features); break; @@ -2759,6 +2761,7 @@ case llvm::Triple::mips64: case llvm::Triple::mips64el: case llvm::Triple::sparc: + case llvm::Triple::sparc_le: case llvm::Triple::x86: case llvm::Triple::x86_64: IsPICLevelTwo = false; // "-fpie" @@ -3190,6 +3193,7 @@ break; case llvm::Triple::sparc: + case llvm::Triple::sparc_le: case llvm::Triple::sparcv9: AddSparcTargetArgs(Args, CmdArgs); break; @@ -6383,6 +6387,7 @@ break; case llvm::Triple::sparc: + case llvm::Triple::sparc_le: CmdArgs.push_back("-32"); NeedsKPIC = true; break; @@ -6761,6 +6766,7 @@ CmdArgs.push_back("-matpcs"); } } else if (getToolChain().getArch() == llvm::Triple::sparc || + getToolChain().getArch() == llvm::Triple::sparc_le || getToolChain().getArch() == llvm::Triple::sparcv9) { if (getToolChain().getArch() == llvm::Triple::sparc) CmdArgs.push_back("-Av8plusa"); @@ -7015,6 +7021,7 @@ } case llvm::Triple::sparc: + case llvm::Triple::sparc_le: CmdArgs.push_back("-32"); addAssemblerKPIC(Args, CmdArgs); break; @@ -7292,6 +7299,7 @@ CmdArgs.push_back("-mlittle-endian"); break; case llvm::Triple::sparc: + case llvm::Triple::sparc_le: CmdArgs.push_back("-32"); CmdArgs.push_back("-Av8plusa"); NeedsKPIC = true;