summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-07-06 23:59:45 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-07-06 23:59:45 +0000
commit1a15f2ec578ae476c76135dbffd1fc6eb8d16486 (patch)
treeafd32dcb1d67c5fa4281bfad0d8dd5132aded45e
parent4ea14a671d9cc8e141438d7db7ccbdbae2caf6eb (diff)
downloadbcm5719-llvm-1a15f2ec578ae476c76135dbffd1fc6eb8d16486.tar.gz
bcm5719-llvm-1a15f2ec578ae476c76135dbffd1fc6eb8d16486.zip
[Driver] Use llvm::Triple methods to handle -EL and -EB.
Add a test for ppc64(le), which wasn't handled before. llvm-svn: 241528
-rw-r--r--clang/lib/Driver/Driver.cpp18
-rw-r--r--clang/test/Driver/ppc-endian.c9
2 files changed, 15 insertions, 12 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index b9dc35d6219..c23768e6860 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1932,19 +1932,13 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
if (Arg *A = Args.getLastArg(options::OPT_mlittle_endian,
options::OPT_mbig_endian)) {
if (A->getOption().matches(options::OPT_mlittle_endian)) {
- if (Target.getArch() == llvm::Triple::mips)
- Target.setArch(llvm::Triple::mipsel);
- else if (Target.getArch() == llvm::Triple::mips64)
- Target.setArch(llvm::Triple::mips64el);
- else if (Target.getArch() == llvm::Triple::aarch64_be)
- Target.setArch(llvm::Triple::aarch64);
+ llvm::Triple LE = Target.getLittleEndianArchVariant();
+ if (LE.getArch() != llvm::Triple::UnknownArch)
+ Target = std::move(LE);
} else {
- if (Target.getArch() == llvm::Triple::mipsel)
- Target.setArch(llvm::Triple::mips);
- else if (Target.getArch() == llvm::Triple::mips64el)
- Target.setArch(llvm::Triple::mips64);
- else if (Target.getArch() == llvm::Triple::aarch64)
- Target.setArch(llvm::Triple::aarch64_be);
+ llvm::Triple BE = Target.getBigEndianArchVariant();
+ if (BE.getArch() != llvm::Triple::UnknownArch)
+ Target = std::move(BE);
}
}
diff --git a/clang/test/Driver/ppc-endian.c b/clang/test/Driver/ppc-endian.c
new file mode 100644
index 00000000000..4d8db38943b
--- /dev/null
+++ b/clang/test/Driver/ppc-endian.c
@@ -0,0 +1,9 @@
+// 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 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{{.*}}"
OpenPOWER on IntegriCloud