diff options
author | Davide Italiano <davide@freebsd.org> | 2016-06-29 20:01:39 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-06-29 20:01:39 +0000 |
commit | 23b149871d220b1f84fb593ad42e2d0130924643 (patch) | |
tree | 4bbb85666ef73aa00a83308065a07fcc49351fcf /lib/Support/Triple.cpp | |
parent | a4d56588c91df271cb1c8e97d29f0d41ad71f616 (diff) |
[Triple] Reimplement isLittleEndian(). Now it works for arm too.
Differential Revision: http://reviews.llvm.org/D21846
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274154 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Triple.cpp')
-rw-r--r-- | lib/Support/Triple.cpp | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 71533df75d9..ba0d4dbc711 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -1288,6 +1288,9 @@ Triple Triple::get64BitArchVariant() const { Triple Triple::getBigEndianArchVariant() const { Triple T(*this); + // Already big endian. + if (!isLittleEndian()) + return T; switch (getArch()) { case Triple::UnknownArch: case Triple::amdgcn: @@ -1320,34 +1323,23 @@ Triple Triple::getBigEndianArchVariant() const { T.setArch(UnknownArch); break; - case Triple::aarch64_be: - case Triple::armeb: - case Triple::bpfeb: - case Triple::lanai: - case Triple::mips64: - case Triple::mips: - case Triple::ppc64: - case Triple::ppc: - case Triple::sparc: - case Triple::sparcv9: - case Triple::systemz: - case Triple::tce: - case Triple::thumbeb: - // Already big endian. - break; - case Triple::aarch64: T.setArch(Triple::aarch64_be); break; case Triple::bpfel: T.setArch(Triple::bpfeb); break; case Triple::mips64el:T.setArch(Triple::mips64); break; case Triple::mipsel: T.setArch(Triple::mips); break; case Triple::ppc64le: T.setArch(Triple::ppc64); break; case Triple::sparcel: T.setArch(Triple::sparc); break; + default: + llvm_unreachable("getBigEndianArchVariant: unknown triple."); } return T; } Triple Triple::getLittleEndianArchVariant() const { Triple T(*this); + if (isLittleEndian()) + return T; + switch (getArch()) { case Triple::UnknownArch: case Triple::lanai: @@ -1363,6 +1355,20 @@ Triple Triple::getLittleEndianArchVariant() const { T.setArch(UnknownArch); break; + case Triple::aarch64_be: T.setArch(Triple::aarch64); break; + case Triple::bpfeb: T.setArch(Triple::bpfel); break; + case Triple::mips64: T.setArch(Triple::mips64el); break; + case Triple::mips: T.setArch(Triple::mipsel); break; + case Triple::ppc64: T.setArch(Triple::ppc64le); break; + case Triple::sparc: T.setArch(Triple::sparcel); break; + default: + llvm_unreachable("getLittleEndianArchVariant: unknown triple."); + } + return T; +} + +bool Triple::isLittleEndian() const { + switch (getArch()) { case Triple::aarch64: case Triple::amdgcn: case Triple::amdil64: @@ -1393,21 +1399,10 @@ Triple Triple::getLittleEndianArchVariant() const { case Triple::x86: case Triple::x86_64: case Triple::xcore: - // Already little endian. - break; - - case Triple::aarch64_be: T.setArch(Triple::aarch64); break; - case Triple::bpfeb: T.setArch(Triple::bpfel); break; - case Triple::mips64: T.setArch(Triple::mips64el); break; - case Triple::mips: T.setArch(Triple::mipsel); break; - case Triple::ppc64: T.setArch(Triple::ppc64le); break; - case Triple::sparc: T.setArch(Triple::sparcel); break; + return true; + default: + return false; } - return T; -} - -bool Triple::isLittleEndian() const { - return *this == getLittleEndianArchVariant(); } StringRef Triple::getARMCPUForArch(StringRef MArch) const { |