From f74703a44f2b3c765bfa57287cca4ac620c76188 Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Wed, 29 Apr 2015 19:15:08 +0000 Subject: [PATCH] New architecture name - 'sparcel' for Sparc little-endian. Differential Revision: http://reviews.llvm.org/D9263 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236139 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/Triple.h | 1 + lib/Support/Triple.cpp | 6 ++++++ unittests/ADT/TripleTest.cpp | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h index 5fda7751a5e..18addc48022 100644 --- a/include/llvm/ADT/Triple.h +++ b/include/llvm/ADT/Triple.h @@ -64,6 +64,7 @@ public: amdgcn, // AMDGCN: AMD GCN GPUs sparc, // Sparc: sparc sparcv9, // Sparcv9: Sparcv9 + sparcel, // Sparc: (endianness = little). NB: 'Sparcle' is a CPU variant systemz, // SystemZ: s390x tce, // TCE (http://tce.cs.tut.fi/): tce thumb, // Thumb (little endian): thumb, thumbv.* diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 5b43eccb1e7..f96c5fd9ce1 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -37,6 +37,7 @@ const char *Triple::getArchTypeName(ArchType Kind) { case amdgcn: return "amdgcn"; case sparc: return "sparc"; case sparcv9: return "sparcv9"; + case sparcel: return "sparcel"; case systemz: return "s390x"; case tce: return "tce"; case thumb: return "thumb"; @@ -90,6 +91,7 @@ const char *Triple::getArchTypePrefix(ArchType Kind) { case bpf: return "bpf"; case sparcv9: + case sparcel: case sparc: return "sparc"; case systemz: return "s390"; @@ -312,6 +314,7 @@ static Triple::ArchType parseArch(StringRef ArchName) { .Case("hexagon", Triple::hexagon) .Case("s390x", Triple::systemz) .Case("sparc", Triple::sparc) + .Case("sparcel", Triple::sparcel) .Cases("sparcv9", "sparc64", Triple::sparcv9) .Case("tce", Triple::tce) .Case("xcore", Triple::xcore) @@ -918,6 +921,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::ppc: case llvm::Triple::r600: case llvm::Triple::sparc: + case llvm::Triple::sparcel: case llvm::Triple::tce: case llvm::Triple::thumb: case llvm::Triple::thumbeb: @@ -990,6 +994,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::ppc: case Triple::r600: case Triple::sparc: + case Triple::sparcel: case Triple::tce: case Triple::thumb: case Triple::thumbeb: @@ -1026,6 +1031,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::thumb: case Triple::thumbeb: case Triple::xcore: + case Triple::sparcel: T.setArch(UnknownArch); break; diff --git a/unittests/ADT/TripleTest.cpp b/unittests/ADT/TripleTest.cpp index 1113bb60dc4..30f2f3bf7ba 100644 --- a/unittests/ADT/TripleTest.cpp +++ b/unittests/ADT/TripleTest.cpp @@ -149,6 +149,11 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); EXPECT_EQ(Triple::UnknownOS, T.getOS()); + T = Triple("sparcel-unknown-unknown"); + EXPECT_EQ(Triple::sparcel, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::UnknownOS, T.getOS()); + T = Triple("spir-unknown-unknown"); EXPECT_EQ(Triple::spir, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); @@ -407,6 +412,21 @@ TEST(TripleTest, BitWidthPredicates) { EXPECT_FALSE(T.isArch16Bit()); EXPECT_FALSE(T.isArch32Bit()); EXPECT_TRUE(T.isArch64Bit()); + + T.setArch(Triple::sparc); + EXPECT_FALSE(T.isArch16Bit()); + EXPECT_TRUE(T.isArch32Bit()); + EXPECT_FALSE(T.isArch64Bit()); + + T.setArch(Triple::sparcel); + EXPECT_FALSE(T.isArch16Bit()); + EXPECT_TRUE(T.isArch32Bit()); + EXPECT_FALSE(T.isArch64Bit()); + + T.setArch(Triple::sparcv9); + EXPECT_FALSE(T.isArch16Bit()); + EXPECT_FALSE(T.isArch32Bit()); + EXPECT_TRUE(T.isArch64Bit()); } TEST(TripleTest, BitWidthArchVariants) { -- 2.34.1