forked from OSchip/llvm-project
[PowerPC] Support powerpcle target in Clang [3/5]
Add powerpcle support to clang. For FreeBSD, assume a freestanding environment for now, as we only need it in the first place to build loader, which runs in the OpenFirmware environment instead of the FreeBSD environment. For Linux, recognize glibc and musl environments to match current usage in Void Linux PPC. Adjust driver to match current binutils behavior regarding machine naming. Adjust and expand tests. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D93919
This commit is contained in:
parent
696bd3073f
commit
6cee9d0cf8
|
@ -334,6 +334,16 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple,
|
|||
return new PPC32TargetInfo(Triple, Opts);
|
||||
}
|
||||
|
||||
case llvm::Triple::ppcle:
|
||||
switch (os) {
|
||||
case llvm::Triple::Linux:
|
||||
return new LinuxTargetInfo<PPC32TargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::FreeBSD:
|
||||
return new FreeBSDTargetInfo<PPC32TargetInfo>(Triple, Opts);
|
||||
default:
|
||||
return new PPC32TargetInfo(Triple, Opts);
|
||||
}
|
||||
|
||||
case llvm::Triple::ppc64:
|
||||
if (Triple.isOSDarwin())
|
||||
return new DarwinPPC64TargetInfo(Triple, Opts);
|
||||
|
|
|
@ -253,6 +253,7 @@ public:
|
|||
case llvm::Triple::mips:
|
||||
case llvm::Triple::mipsel:
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
this->MCountName = "_mcount";
|
||||
|
@ -413,6 +414,7 @@ public:
|
|||
case llvm::Triple::mips64:
|
||||
case llvm::Triple::mips64el:
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
this->MCountName = "_mcount";
|
||||
|
|
|
@ -92,7 +92,8 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
|
|||
}
|
||||
|
||||
// Target properties.
|
||||
if (getTriple().getArch() == llvm::Triple::ppc64le) {
|
||||
if (getTriple().getArch() == llvm::Triple::ppc64le ||
|
||||
getTriple().getArch() == llvm::Triple::ppcle) {
|
||||
Builder.defineMacro("_LITTLE_ENDIAN");
|
||||
} else {
|
||||
if (!getTriple().isOSNetBSD() &&
|
||||
|
|
|
@ -355,6 +355,8 @@ public:
|
|||
: PPCTargetInfo(Triple, Opts) {
|
||||
if (Triple.isOSAIX())
|
||||
resetDataLayout("E-m:a-p:32:32-i64:64-n32");
|
||||
else if (Triple.getArch() == llvm::Triple::ppcle)
|
||||
resetDataLayout("e-m:e-p:32:32-i64:64-n32");
|
||||
else
|
||||
resetDataLayout("E-m:e-p:32:32-i64:64-n32");
|
||||
|
||||
|
|
|
@ -5041,6 +5041,7 @@ static Value *EmitTargetArchBuiltinExpr(CodeGenFunction *CGF,
|
|||
case llvm::Triple::x86_64:
|
||||
return CGF->EmitX86BuiltinExpr(BuiltinID, E);
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
return CGF->EmitPPCBuiltinExpr(BuiltinID, E);
|
||||
|
|
|
@ -4858,7 +4858,7 @@ Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
|
|||
|
||||
bool PPC32TargetCodeGenInfo::isStructReturnInRegABI(
|
||||
const llvm::Triple &Triple, const CodeGenOptions &Opts) {
|
||||
assert(Triple.getArch() == llvm::Triple::ppc);
|
||||
assert(Triple.isPPC32());
|
||||
|
||||
switch (Opts.getStructReturnConvention()) {
|
||||
case CodeGenOptions::SRCK_Default:
|
||||
|
@ -10934,6 +10934,13 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
|
|||
return SetCGInfo(
|
||||
new PPC32TargetCodeGenInfo(Types, IsSoftFloat, RetSmallStructInRegABI));
|
||||
}
|
||||
case llvm::Triple::ppcle: {
|
||||
bool IsSoftFloat = CodeGenOpts.FloatABI == "soft";
|
||||
bool RetSmallStructInRegABI =
|
||||
PPC32TargetCodeGenInfo::isStructReturnInRegABI(Triple, CodeGenOpts);
|
||||
return SetCGInfo(
|
||||
new PPC32TargetCodeGenInfo(Types, IsSoftFloat, RetSmallStructInRegABI));
|
||||
}
|
||||
case llvm::Triple::ppc64:
|
||||
if (Triple.isOSAIX())
|
||||
return SetCGInfo(new AIXTargetCodeGenInfo(Types, /*Is64Bit*/ true));
|
||||
|
|
|
@ -5111,9 +5111,7 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
|
|||
!Target.hasEnvironment())
|
||||
TC = std::make_unique<toolchains::MipsLLVMToolChain>(*this, Target,
|
||||
Args);
|
||||
else if (Target.getArch() == llvm::Triple::ppc ||
|
||||
Target.getArch() == llvm::Triple::ppc64 ||
|
||||
Target.getArch() == llvm::Triple::ppc64le)
|
||||
else if (Target.isPPC())
|
||||
TC = std::make_unique<toolchains::PPCLinuxToolChain>(*this, Target,
|
||||
Args);
|
||||
else if (Target.getArch() == llvm::Triple::ve)
|
||||
|
|
|
@ -241,6 +241,8 @@ StringRef ToolChain::getDefaultUniversalArchName() const {
|
|||
return "arm64_32";
|
||||
case llvm::Triple::ppc:
|
||||
return "ppc";
|
||||
case llvm::Triple::ppcle:
|
||||
return "ppcle";
|
||||
case llvm::Triple::ppc64:
|
||||
return "ppc64";
|
||||
case llvm::Triple::ppc64le:
|
||||
|
|
|
@ -332,6 +332,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
|||
break;
|
||||
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
ppc::getPPCTargetFeatures(D, Triple, Args, Features);
|
||||
|
@ -528,6 +529,7 @@ static bool useFramePointerForTargetByDefault(const ArgList &Args,
|
|||
// WebAssembly never wants frame pointers.
|
||||
return false;
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
case llvm::Triple::riscv32:
|
||||
|
@ -1386,6 +1388,7 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) {
|
|||
return false;
|
||||
|
||||
case llvm::Triple::hexagon:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64le:
|
||||
case llvm::Triple::riscv32:
|
||||
case llvm::Triple::riscv64:
|
||||
|
@ -1602,6 +1605,7 @@ void Clang::RenderTargetOptions(const llvm::Triple &EffectiveTriple,
|
|||
break;
|
||||
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
AddPPCTargetArgs(Args, CmdArgs);
|
||||
|
@ -4672,7 +4676,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
if (Arg *A = Args.getLastArg(options::OPT_maix_struct_return,
|
||||
options::OPT_msvr4_struct_return)) {
|
||||
if (TC.getArch() != llvm::Triple::ppc) {
|
||||
if (!TC.getTriple().isPPC32()) {
|
||||
D.Diag(diag::err_drv_unsupported_opt_for_target)
|
||||
<< A->getSpelling() << RawTriple.str();
|
||||
} else if (A->getOption().matches(options::OPT_maix_struct_return)) {
|
||||
|
@ -4785,7 +4789,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (Arg *A = Args.getLastArg(options::OPT_LongDouble_Group)) {
|
||||
if (TC.getTriple().isX86())
|
||||
A->render(Args, CmdArgs);
|
||||
else if ((TC.getArch() == llvm::Triple::ppc || TC.getTriple().isPPC64()) &&
|
||||
else if (TC.getTriple().isPPC() &&
|
||||
(A->getOption().getID() != options::OPT_mlong_double_80))
|
||||
A->render(Args, CmdArgs);
|
||||
else
|
||||
|
|
|
@ -389,6 +389,7 @@ std::string tools::getCPUName(const ArgList &Args, const llvm::Triple &T,
|
|||
return "";
|
||||
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le: {
|
||||
std::string TargetCPUName = ppc::getPPCTargetCPU(Args);
|
||||
|
|
|
@ -42,6 +42,7 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("--32");
|
||||
break;
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
CmdArgs.push_back("-a32");
|
||||
break;
|
||||
case llvm::Triple::mips:
|
||||
|
@ -192,6 +193,11 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-m");
|
||||
CmdArgs.push_back("elf32ppc_fbsd");
|
||||
break;
|
||||
case llvm::Triple::ppcle:
|
||||
CmdArgs.push_back("-m");
|
||||
// Use generic -- only usage is for freestanding.
|
||||
CmdArgs.push_back("elf32lppc");
|
||||
break;
|
||||
case llvm::Triple::mips:
|
||||
CmdArgs.push_back("-m");
|
||||
CmdArgs.push_back("elf32btsmip_fbsd");
|
||||
|
@ -374,7 +380,7 @@ FreeBSD::FreeBSD(const Driver &D, const llvm::Triple &Triple,
|
|||
// When targeting 32-bit platforms, look for '/usr/lib32/crt1.o' and fall
|
||||
// back to '/usr/lib' if it doesn't exist.
|
||||
if ((Triple.getArch() == llvm::Triple::x86 || Triple.isMIPS32() ||
|
||||
Triple.getArch() == llvm::Triple::ppc) &&
|
||||
Triple.isPPC32()) &&
|
||||
D.getVFS().exists(getDriver().SysRoot + "/usr/lib32/crt1.o"))
|
||||
getFilePaths().push_back(getDriver().SysRoot + "/usr/lib32");
|
||||
else
|
||||
|
|
|
@ -99,6 +99,7 @@ void tools::gcc::Common::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
break;
|
||||
case llvm::Triple::x86:
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
CmdArgs.push_back("-m32");
|
||||
break;
|
||||
case llvm::Triple::x86_64:
|
||||
|
@ -254,7 +255,13 @@ static const char *getLDMOption(const llvm::Triple &T, const ArgList &Args) {
|
|||
case llvm::Triple::thumbeb:
|
||||
return isArmBigEndian(T, Args) ? "armelfb_linux_eabi" : "armelf_linux_eabi";
|
||||
case llvm::Triple::ppc:
|
||||
return "elf32ppclinux";
|
||||
if (T.isOSLinux())
|
||||
return "elf32ppclinux";
|
||||
return "elf32ppc";
|
||||
case llvm::Triple::ppcle:
|
||||
if (T.isOSLinux())
|
||||
return "elf32lppclinux";
|
||||
return "elf32lppc";
|
||||
case llvm::Triple::ppc64:
|
||||
return "elf64ppc";
|
||||
case llvm::Triple::ppc64le:
|
||||
|
@ -728,6 +735,14 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C,
|
|||
ppc::getPPCAsmModeForCPU(getCPUName(Args, getToolChain().getTriple())));
|
||||
break;
|
||||
}
|
||||
case llvm::Triple::ppcle: {
|
||||
CmdArgs.push_back("-a32");
|
||||
CmdArgs.push_back("-mppc");
|
||||
CmdArgs.push_back("-mlittle-endian");
|
||||
CmdArgs.push_back(
|
||||
ppc::getPPCAsmModeForCPU(getCPUName(Args, getToolChain().getTriple())));
|
||||
break;
|
||||
}
|
||||
case llvm::Triple::ppc64: {
|
||||
CmdArgs.push_back("-a64");
|
||||
CmdArgs.push_back("-mppc64");
|
||||
|
@ -2133,6 +2148,11 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
// On 32-bit PowerPC systems running SUSE Linux, gcc is configured as a
|
||||
// 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux".
|
||||
"powerpc64-suse-linux", "powerpc-montavista-linuxspe"};
|
||||
static const char *const PPCLELibDirs[] = {"/lib32", "/lib"};
|
||||
static const char *const PPCLETriples[] = {"powerpcle-linux-gnu",
|
||||
"powerpcle-unknown-linux-gnu",
|
||||
"powerpcle-linux-musl"};
|
||||
|
||||
static const char *const PPC64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const PPC64Triples[] = {
|
||||
"powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu",
|
||||
|
@ -2373,6 +2393,12 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
|
||||
BiarchTripleAliases.append(begin(PPC64Triples), end(PPC64Triples));
|
||||
break;
|
||||
case llvm::Triple::ppcle:
|
||||
LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
|
||||
TripleAliases.append(begin(PPCLETriples), end(PPCLETriples));
|
||||
BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
|
||||
BiarchTripleAliases.append(begin(PPC64LETriples), end(PPC64LETriples));
|
||||
break;
|
||||
case llvm::Triple::ppc64:
|
||||
LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs));
|
||||
TripleAliases.append(begin(PPC64Triples), end(PPC64Triples));
|
||||
|
@ -2382,6 +2408,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
case llvm::Triple::ppc64le:
|
||||
LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs));
|
||||
TripleAliases.append(begin(PPC64LETriples), end(PPC64LETriples));
|
||||
BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs));
|
||||
BiarchTripleAliases.append(begin(PPCLETriples), end(PPCLETriples));
|
||||
break;
|
||||
case llvm::Triple::riscv32:
|
||||
LibDirs.append(begin(RISCV32LibDirs), end(RISCV32LibDirs));
|
||||
|
@ -2675,6 +2703,7 @@ bool Generic_GCC::IsUnwindTablesDefault(const ArgList &Args) const {
|
|||
switch (getArch()) {
|
||||
case llvm::Triple::aarch64:
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
case llvm::Triple::x86_64:
|
||||
|
@ -2716,6 +2745,7 @@ bool Generic_GCC::IsIntegratedAssemblerDefault() const {
|
|||
case llvm::Triple::thumb:
|
||||
case llvm::Triple::thumbeb:
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
case llvm::Triple::riscv32:
|
||||
|
|
|
@ -142,6 +142,10 @@ std::string Linux::getMultiarchTriple(const Driver &D,
|
|||
if (D.getVFS().exists(SysRoot + "/lib/powerpc-linux-gnu"))
|
||||
return "powerpc-linux-gnu";
|
||||
break;
|
||||
case llvm::Triple::ppcle:
|
||||
if (D.getVFS().exists(SysRoot + "/lib/powerpcle-linux-gnu"))
|
||||
return "powerpcle-linux-gnu";
|
||||
break;
|
||||
case llvm::Triple::ppc64:
|
||||
if (D.getVFS().exists(SysRoot + "/lib/powerpc64-linux-gnu"))
|
||||
return "powerpc64-linux-gnu";
|
||||
|
@ -195,7 +199,7 @@ static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
|||
// reasoning about oslibdir spellings with the lib dir spellings in the
|
||||
// GCCInstallationDetector, but that is a more significant refactoring.
|
||||
if (Triple.getArch() == llvm::Triple::x86 ||
|
||||
Triple.getArch() == llvm::Triple::ppc ||
|
||||
Triple.isPPC32() ||
|
||||
Triple.getArch() == llvm::Triple::sparc)
|
||||
return "lib32";
|
||||
|
||||
|
@ -496,6 +500,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
|
|||
LibDir = "lib";
|
||||
Loader = "ld.so.1";
|
||||
break;
|
||||
case llvm::Triple::ppcle:
|
||||
LibDir = "lib";
|
||||
Loader = "ld.so.1";
|
||||
break;
|
||||
case llvm::Triple::ppc64:
|
||||
LibDir = "lib64";
|
||||
Loader =
|
||||
|
@ -643,6 +651,8 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
|||
const StringRef PPCMultiarchIncludeDirs[] = {
|
||||
"/usr/include/powerpc-linux-gnu",
|
||||
"/usr/include/powerpc-linux-gnuspe"};
|
||||
const StringRef PPCLEMultiarchIncludeDirs[] = {
|
||||
"/usr/include/powerpcle-linux-gnu"};
|
||||
const StringRef PPC64MultiarchIncludeDirs[] = {
|
||||
"/usr/include/powerpc64-linux-gnu"};
|
||||
const StringRef PPC64LEMultiarchIncludeDirs[] = {
|
||||
|
@ -716,6 +726,9 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
|||
case llvm::Triple::ppc:
|
||||
MultiarchIncludeDirs = PPCMultiarchIncludeDirs;
|
||||
break;
|
||||
case llvm::Triple::ppcle:
|
||||
MultiarchIncludeDirs = PPCLEMultiarchIncludeDirs;
|
||||
break;
|
||||
case llvm::Triple::ppc64:
|
||||
MultiarchIncludeDirs = PPC64MultiarchIncludeDirs;
|
||||
break;
|
||||
|
|
|
@ -3292,10 +3292,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
|||
llvm::Triple TT(A->getValue(i));
|
||||
|
||||
if (TT.getArch() == llvm::Triple::UnknownArch ||
|
||||
!(TT.getArch() == llvm::Triple::aarch64 ||
|
||||
TT.getArch() == llvm::Triple::ppc ||
|
||||
TT.getArch() == llvm::Triple::ppc64 ||
|
||||
TT.getArch() == llvm::Triple::ppc64le ||
|
||||
!(TT.getArch() == llvm::Triple::aarch64 || TT.isPPC() ||
|
||||
TT.getArch() == llvm::Triple::nvptx ||
|
||||
TT.getArch() == llvm::Triple::nvptx64 ||
|
||||
TT.getArch() == llvm::Triple::amdgcn ||
|
||||
|
|
|
@ -1422,6 +1422,7 @@ bool Sema::CheckTSBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
|
|||
case llvm::Triple::x86_64:
|
||||
return CheckX86BuiltinFunctionCall(TI, BuiltinID, TheCall);
|
||||
case llvm::Triple::ppc:
|
||||
case llvm::Triple::ppcle:
|
||||
case llvm::Triple::ppc64:
|
||||
case llvm::Triple::ppc64le:
|
||||
return CheckPPCBuiltinFunctionCall(TI, BuiltinID, TheCall);
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc-unknown-unknown -emit-llvm %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpcle-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: not %clang_cc1 -target-feature +altivec -mabi=vec-default -triple powerpc-unknown-aix -emit-llvm %s 2>&1 | FileCheck %s --check-prefix=AIX-ERROR
|
||||
// RUN: not %clang_cc1 -target-feature +altivec -mabi=vec-default -triple powerpc64-unknown-aix -emit-llvm %s 2>&1 | FileCheck %s --check-prefix=AIX-ERROR
|
||||
|
||||
// RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -target powerpc-unknown-aix %s -o - | FileCheck %s
|
||||
// RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -target powerpc-unknown-aix %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: not %clang -S -emit-llvm -maltivec -target powerpc-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ERROR
|
||||
// RUN: not %clang -S -emit-llvm -maltivec -target powerpc64-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ERROR
|
||||
// RUN: not %clang -S -emit-llvm -mabi=vec-default -target powerpc-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ATVER
|
||||
// RUN: not %clang -S -emit-llvm -mabi=vec-extabi -target powerpc-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ATVER
|
||||
// RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -target powerpc64-unknown-aix %s -o - | FileCheck %s
|
||||
// RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -target powerpc64-unknown-aix %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE
|
||||
// RUN: not %clang -S -emit-llvm -mabi=vec-default -target powerpc64-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ATVER
|
||||
// RUN: not %clang -S -emit-llvm -mabi=vec-extabi -target powerpc64-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ATVER
|
||||
// RUN: not %clang -S -mabi=vec-default -target powerpc-unknown-aix %s 2>&1 | FileCheck %s --check-prefix=AIX-ATVER
|
||||
|
@ -21,13 +24,17 @@
|
|||
vector int test0 = (vector int)(1); // CHECK: @test0 ={{.*}} global <4 x i32> <i32 1, i32 1, i32 1, i32 1>
|
||||
vector float test1 = (vector float)(1.0); // CHECK: @test1 ={{.*}} global <4 x float> <float 1.000000e+{{0+}}, float 1.000000e+{{0+}}, float 1.000000e+{{0+}}, float 1.000000e+{{0+}}>
|
||||
|
||||
// CHECK: @v1 ={{.*}} global <16 x i8> <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 2, i8 0, i8 0, i8 0, i8 3, i8 0, i8 0, i8 0, i8 4>
|
||||
// CHECK-BE: @v1 ={{.*}} global <16 x i8> <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 2, i8 0, i8 0, i8 0, i8 3, i8 0, i8 0, i8 0, i8 4>
|
||||
// CHECK-LE: @v1 ={{.*}} global <16 x i8> <i8 1, i8 0, i8 0, i8 0, i8 2, i8 0, i8 0, i8 0, i8 3, i8 0, i8 0, i8 0, i8 4, i8 0, i8 0, i8 0>
|
||||
vector char v1 = (vector char)((vector int)(1, 2, 3, 4));
|
||||
// CHECK: @v2 ={{.*}} global <16 x i8> <i8 63, i8 -128, i8 0, i8 0, i8 64, i8 0, i8 0, i8 0, i8 64, i8 64, i8 0, i8 0, i8 64, i8 -128, i8 0, i8 0>
|
||||
// CHECK-BE: @v2 ={{.*}} global <16 x i8> <i8 63, i8 -128, i8 0, i8 0, i8 64, i8 0, i8 0, i8 0, i8 64, i8 64, i8 0, i8 0, i8 64, i8 -128, i8 0, i8 0>
|
||||
// CHECK-LE: @v2 ={{.*}} global <16 x i8> <i8 0, i8 0, i8 -128, i8 63, i8 0, i8 0, i8 0, i8 64, i8 0, i8 0, i8 64, i8 64, i8 0, i8 0, i8 -128, i8 64>
|
||||
vector char v2 = (vector char)((vector float)(1.0f, 2.0f, 3.0f, 4.0f));
|
||||
// CHECK: @v3 ={{.*}} global <16 x i8> <i8 0, i8 0, i8 0, i8 97, i8 0, i8 0, i8 0, i8 98, i8 0, i8 0, i8 0, i8 99, i8 0, i8 0, i8 0, i8 100>
|
||||
// CHECK-BE: @v3 ={{.*}} global <16 x i8> <i8 0, i8 0, i8 0, i8 97, i8 0, i8 0, i8 0, i8 98, i8 0, i8 0, i8 0, i8 99, i8 0, i8 0, i8 0, i8 100>
|
||||
// CHECK-LE: @v3 ={{.*}} global <16 x i8> <i8 97, i8 0, i8 0, i8 0, i8 98, i8 0, i8 0, i8 0, i8 99, i8 0, i8 0, i8 0, i8 100, i8 0, i8 0, i8 0>
|
||||
vector char v3 = (vector char)((vector int)('a', 'b', 'c', 'd'));
|
||||
// CHECK: @v4 ={{.*}} global <4 x i32> <i32 16909060, i32 0, i32 0, i32 0>
|
||||
// CHECK-BE: @v4 ={{.*}} global <4 x i32> <i32 16909060, i32 0, i32 0, i32 0>
|
||||
// CHECK-LE: @v4 ={{.*}} global <4 x i32> <i32 67305985, i32 0, i32 0, i32 0>
|
||||
vector int v4 = (vector char){1, 2, 3, 4};
|
||||
|
||||
void test2()
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// REQUIRES: powerpc-registered-target
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc-unknown-unknown -emit-llvm %s \
|
||||
// RUN: -flax-vector-conversions=none -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpcle-unknown-unknown -emit-llvm %s \
|
||||
// RUN: -flax-vector-conversions=none -o - | FileCheck %s -check-prefix=CHECK-LE
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc64-unknown-unknown -emit-llvm %s \
|
||||
// RUN: -flax-vector-conversions=none -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -target-feature +altivec -triple powerpc64le-unknown-unknown -emit-llvm %s \
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// REQUIRES: powerpc-registered-target
|
||||
// RUN: %clang_cc1 -triple powerpc-unknown-freebsd \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
||||
// RUN: %clang_cc1 -triple powerpcle-unknown-freebsd \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
||||
// RUN: %clang_cc1 -triple powerpc-unknown-aix \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
||||
// RUN: %clang_cc1 -triple powerpc64-unknown-aix \
|
||||
|
@ -11,6 +13,12 @@
|
|||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
||||
// RUN: %clang_cc1 -triple powerpc-unknown-linux -msvr4-struct-return \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
||||
// RUN: %clang_cc1 -triple powerpcle-unknown-linux \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
||||
// RUN: %clang_cc1 -triple powerpcle-unknown-linux -maix-struct-return \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX
|
||||
// RUN: %clang_cc1 -triple powerpcle-unknown-linux -msvr4-struct-return \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
||||
// RUN: %clang_cc1 -triple powerpc-unknown-netbsd \
|
||||
// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR4
|
||||
// RUN: %clang_cc1 -triple powerpc-unknown-openbsd \
|
||||
|
|
|
@ -126,6 +126,10 @@
|
|||
// RUN: FileCheck %s -check-prefix=PPC
|
||||
// PPC: target datalayout = "E-m:e-p:32:32-i64:64-n32"
|
||||
|
||||
// RUN: %clang_cc1 -triple powerpcle-unknown -o - -emit-llvm %s | \
|
||||
// RUN: FileCheck %s -check-prefix=PPCLE
|
||||
// PPCLE: target datalayout = "e-m:e-p:32:32-i64:64-n32"
|
||||
|
||||
// RUN: %clang_cc1 -triple powerpc64-freebsd -o - -emit-llvm %s | \
|
||||
// RUN: FileCheck %s -check-prefix=PPC64-FREEBSD
|
||||
// PPC64-FREEBSD: target datalayout = "E-m:e-i64:64-n32:64"
|
||||
|
|
|
@ -178,7 +178,7 @@
|
|||
//
|
||||
// Test Ubuntu/Debian's Ubuntu 14.04 for powerpc64le
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
|
||||
// RUN: -target powerpc64le-unknown-linux-gnu -m32 -stdlib=libstdc++ \
|
||||
// RUN: -target powerpc64le-unknown-linux-gnu -stdlib=libstdc++ \
|
||||
// RUN: --sysroot=%S/Inputs/ubuntu_14.04_multiarch_tree \
|
||||
// RUN: --gcc-toolchain="" \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-UBUNTU-14-04-PPC64LE %s
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
// RUN: %clang -target powerpc64le -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE %s
|
||||
// RUN: %clang -target powerpc64le -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE %s
|
||||
// RUN: %clang -target powerpc64 -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE %s
|
||||
// CHECK-LE: "-cc1"{{.*}} "-triple" "powerpc64le{{.*}}"
|
||||
// RUN: %clang -target powerpc-unknown -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE32 %s
|
||||
// RUN: %clang -target powerpc-unknown -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE32 %s
|
||||
// RUN: %clang -target powerpcle-unknown -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE32 %s
|
||||
// CHECK-BE32: "-cc1"{{.*}} "-triple" "powerpc-{{.*}}"
|
||||
|
||||
// RUN: %clang -target powerpc64 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE %s
|
||||
// RUN: %clang -target powerpc64 -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE %s
|
||||
// RUN: %clang -target powerpc64le -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE %s
|
||||
// CHECK-BE: "-cc1"{{.*}} "-triple" "powerpc64{{.*}}"
|
||||
// RUN: %clang -target powerpcle-unknown -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE32 %s
|
||||
// RUN: %clang -target powerpcle-unknown -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE32 %s
|
||||
// RUN: %clang -target powerpc-unknown -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE32 %s
|
||||
// CHECK-LE32: "-cc1"{{.*}} "-triple" "powerpcle-{{.*}}"
|
||||
|
||||
// RUN: %clang -target powerpc64-unknown -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE64 %s
|
||||
// RUN: %clang -target powerpc64-unknown -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE64 %s
|
||||
// RUN: %clang -target powerpc64le-unknown -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE64 %s
|
||||
// CHECK-BE64: "-cc1"{{.*}} "-triple" "powerpc64-{{.*}}"
|
||||
|
||||
// RUN: %clang -target powerpc64le-unknown -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE64 %s
|
||||
// RUN: %clang -target powerpc64le-unknown -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE64 %s
|
||||
// RUN: %clang -target powerpc64-unknown -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-LE64 %s
|
||||
// CHECK-LE64: "-cc1"{{.*}} "-triple" "powerpc64le-{{.*}}"
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
/// Check default CC1 and linker options for ppc32.
|
||||
// RUN: %clang -### -target powerpc-unknown-linux-gnu %s 2>&1 | FileCheck --check-prefix=PPC32 %s
|
||||
// RUN: %clang -### -target powerpcle-unknown-linux-gnu %s 2>&1 | FileCheck --check-prefixes=PPC32,PPC32LELNX %s
|
||||
// RUN: %clang -### -target powerpc-unknown-linux-gnu %s 2>&1 | FileCheck --check-prefixes=PPC32,PPC32BELNX %s
|
||||
// RUN: %clang -### -target powerpcle-unknown-freebsd13.0 %s 2>&1 | FileCheck --check-prefixes=PPC32,PPC32LEFBSD %s
|
||||
// RUN: %clang -### -target powerpc-unknown-freebsd13.0 %s 2>&1 | FileCheck --check-prefixes=PPC32,PPC32BEFBSD %s
|
||||
// PPC32: "-munwind-tables"
|
||||
// PPC32-SAME: "-mfloat-abi" "hard"
|
||||
|
||||
// PPC32: "-m" "elf32ppclinux"
|
||||
// PPC32LELNX-NEXT: "-m" "elf32lppclinux"
|
||||
// PPC32BELNX-NEXT: "-m" "elf32ppclinux"
|
||||
// PPC32LEFBSD-NEXT: "-m" "elf32lppc"
|
||||
// PPC32BEFBSD-NEXT: "-m" "elf32ppc_fbsd"
|
||||
|
||||
// check -msoft-float option for ppc32
|
||||
// RUN: %clang -target powerpc-unknown-linux-gnu %s -msoft-float -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-SOFTFLOAT %s
|
||||
|
|
Loading…
Reference in New Issue