Author: Zi Xuan Wu Date: 2020-09-02T12:25:54+08:00 New Revision: cac57361292aeb97484dec16c9e1c8174cf5a940
URL: https://github.com/llvm/llvm-project/commit/cac57361292aeb97484dec16c9e1c8174cf5a940 DIFF: https://github.com/llvm/llvm-project/commit/cac57361292aeb97484dec16c9e1c8174cf5a940.diff LOG: [RFC][Target] Add a new triple called Triple::csky Before upstream a new target called CSKY, make a new triple of that called Triple::csky. For now, it's a 32-bit little endian target and the detail can be referred at D86269. This is the split part of D86269, which add a new target called CSKY. Differential Revision: https://reviews.llvm.org/D86505 Added: Modified: llvm/include/llvm/ADT/Triple.h llvm/lib/Support/Triple.cpp llvm/unittests/ADT/TripleTest.cpp Removed: ################################################################################ diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h index 7c3a4b2b699a..b67da41f30cf 100644 --- a/llvm/include/llvm/ADT/Triple.h +++ b/llvm/include/llvm/ADT/Triple.h @@ -56,6 +56,7 @@ class Triple { avr, // AVR: Atmel AVR microcontroller bpfel, // eBPF or extended BPF or 64-bit BPF (little endian) bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian) + csky, // CSKY: csky hexagon, // Hexagon: hexagon mips, // MIPS: mips, mipsallegrex, mipsr6 mipsel, // MIPSEL: mipsel, mipsallegrexe, mipsr6el @@ -755,6 +756,11 @@ class Triple { return getArch() == Triple::wasm32 || getArch() == Triple::wasm64; } + // Tests whether the target is CSKY + bool isCSKY() const { + return getArch() == Triple::csky; + } + /// Tests whether the target supports comdat bool supportsCOMDAT() const { return !(isOSBinFormatMachO() || isOSBinFormatXCOFF()); diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp index 7c2c44a53805..b1b4c3e63481 100644 --- a/llvm/lib/Support/Triple.cpp +++ b/llvm/lib/Support/Triple.cpp @@ -36,6 +36,7 @@ StringRef Triple::getArchTypeName(ArchType Kind) { case avr: return "avr"; case bpfeb: return "bpfeb"; case bpfel: return "bpfel"; + case csky: return "csky"; case hexagon: return "hexagon"; case hsail64: return "hsail64"; case hsail: return "hsail"; @@ -151,6 +152,7 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) { case riscv64: return "riscv"; case ve: return "ve"; + case csky: return "csky"; } } @@ -319,6 +321,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("renderscript32", renderscript32) .Case("renderscript64", renderscript64) .Case("ve", ve) + .Case("csky", csky) .Default(UnknownArch); } @@ -448,6 +451,7 @@ static Triple::ArchType parseArch(StringRef ArchName) { .Case("ve", Triple::ve) .Case("wasm32", Triple::wasm32) .Case("wasm64", Triple::wasm64) + .Case("csky", Triple::csky) .Default(Triple::UnknownArch); // Some architectures require special parsing logic just to compute the @@ -678,6 +682,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { case Triple::avr: case Triple::bpfeb: case Triple::bpfel: + case Triple::csky: case Triple::hexagon: case Triple::hsail64: case Triple::hsail: @@ -1251,6 +1256,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::arc: case llvm::Triple::arm: case llvm::Triple::armeb: + case llvm::Triple::csky: case llvm::Triple::hexagon: case llvm::Triple::hsail: case llvm::Triple::kalimba: @@ -1334,6 +1340,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::arc: case Triple::arm: case Triple::armeb: + case Triple::csky: case Triple::hexagon: case Triple::hsail: case Triple::kalimba: @@ -1385,6 +1392,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::UnknownArch: case Triple::arc: case Triple::avr: + case Triple::csky: case Triple::hexagon: case Triple::kalimba: case Triple::lanai: @@ -1478,6 +1486,7 @@ Triple Triple::getBigEndianArchVariant() const { case Triple::x86_64: case Triple::xcore: case Triple::ve: + case Triple::csky: // ARM is intentionally unsupported here, changing the architecture would // drop any arch suffixes. @@ -1541,6 +1550,7 @@ bool Triple::isLittleEndian() const { case Triple::arm: case Triple::avr: case Triple::bpfel: + case Triple::csky: case Triple::hexagon: case Triple::hsail64: case Triple::hsail: diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp index 1a6b0557bf50..9b1c5acff424 100644 --- a/llvm/unittests/ADT/TripleTest.cpp +++ b/llvm/unittests/ADT/TripleTest.cpp @@ -303,6 +303,18 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::Linux, T.getOS()); EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("csky-unknown-unknown"); + EXPECT_EQ(Triple::csky, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::UnknownOS, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + + T = Triple("csky-unknown-linux"); + EXPECT_EQ(Triple::csky, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::Linux, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("riscv32-unknown-unknown"); EXPECT_EQ(Triple::riscv32, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); @@ -882,6 +894,12 @@ TEST(TripleTest, BitWidthPredicates) { EXPECT_FALSE(T.isArch32Bit()); EXPECT_TRUE(T.isArch64Bit()); EXPECT_TRUE(T.isRISCV()); + + T.setArch(Triple::csky); + EXPECT_FALSE(T.isArch16Bit()); + EXPECT_TRUE(T.isArch32Bit()); + EXPECT_FALSE(T.isArch64Bit()); + EXPECT_TRUE(T.isCSKY()); } TEST(TripleTest, BitWidthArchVariants) { @@ -981,6 +999,10 @@ TEST(TripleTest, BitWidthArchVariants) { EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); + T.setArch(Triple::csky); + EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch()); + EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); + T.setArch(Triple::thumbeb); EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); @@ -1134,6 +1156,10 @@ TEST(TripleTest, EndianArchVariants) { T.setArch(Triple::le64); EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); EXPECT_EQ(Triple::le64, T.getLittleEndianArchVariant().getArch()); + + T.setArch(Triple::csky); + EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); + EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch()); } TEST(TripleTest, getOSVersion) { @@ -1360,6 +1386,9 @@ TEST(TripleTest, FileFormat) { EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat()); EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat()); + EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat()); + EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat()); + Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits