From eeb7d947305b2c4a84ab1e52294c7e189ef8d34b Mon Sep 17 00:00:00 2001 From: shylie Date: Fri, 24 Apr 2026 11:51:55 -0400 Subject: [PATCH] Add Stakr skeleton --- llvm/CMakeLists.txt | 1 + llvm/include/llvm/TargetParser/Triple.h | 147 +-- .../lib/Target/Stakr/AsmParser/CMakeLists.txt | 16 + .../Target/Stakr/AsmParser/StakrAsmParser.cpp | 0 .../Stakr/AsmParser/StakrAsmTypeCheck.cpp | 0 llvm/lib/Target/Stakr/CMakeLists.txt | 48 + .../Target/Stakr/MCTargetDesc/CMakeLists.txt | 20 + .../Stakr/MCTargetDesc/StakrAsmBackend.cpp | 0 .../MCTargetDesc/StakrELFObjectWriter.cpp | 0 .../Stakr/MCTargetDesc/StakrInstPrinter.cpp | 0 .../Stakr/MCTargetDesc/StakrMCAsmInfo.cpp | 0 .../Stakr/MCTargetDesc/StakrMCCodeEmitter.cpp | 0 .../Stakr/MCTargetDesc/StakrMCTargetDesc.cpp | 0 .../MCTargetDesc/StakrMCTypeUtilities.cpp | 0 .../MCTargetDesc/StakrTargetStreamer.cpp | 0 llvm/lib/Target/Stakr/Stakr.td | 23 + llvm/lib/Target/Stakr/StakrAsmPrinter.cpp | 0 llvm/lib/Target/Stakr/StakrFrameLowering.cpp | 0 llvm/lib/Target/Stakr/StakrISelDAGToDAG.cpp | 0 llvm/lib/Target/Stakr/StakrISelLowering.cpp | 0 llvm/lib/Target/Stakr/StakrInstrFormats.td | 40 + llvm/lib/Target/Stakr/StakrInstrInfo.cpp | 0 llvm/lib/Target/Stakr/StakrInstrInfo.td | 31 + .../Target/Stakr/StakrMachineFunctionInfo.cpp | 0 llvm/lib/Target/Stakr/StakrRegisterInfo.cpp | 0 llvm/lib/Target/Stakr/StakrRegisterInfo.td | 17 + llvm/lib/Target/Stakr/StakrSubtarget.cpp | 0 llvm/lib/Target/Stakr/StakrTargetMachine.cpp | 0 .../Target/Stakr/StakrTargetObjectFile.cpp | 0 .../Target/Stakr/TargetInfo/CMakeLists.txt | 14 + .../Stakr/TargetInfo/StakrTargetInfo.cpp | 0 .../Target/Stakr/TargetInfo/StakrTargetInfo.h | 0 llvm/lib/TargetParser/Triple.cpp | 843 ++++++++++++------ 33 files changed, 815 insertions(+), 385 deletions(-) create mode 100644 llvm/lib/Target/Stakr/AsmParser/CMakeLists.txt create mode 100644 llvm/lib/Target/Stakr/AsmParser/StakrAsmParser.cpp create mode 100644 llvm/lib/Target/Stakr/AsmParser/StakrAsmTypeCheck.cpp create mode 100644 llvm/lib/Target/Stakr/CMakeLists.txt create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/CMakeLists.txt create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrAsmBackend.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrELFObjectWriter.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrInstPrinter.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrMCAsmInfo.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrMCCodeEmitter.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTargetDesc.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTypeUtilities.cpp create mode 100644 llvm/lib/Target/Stakr/MCTargetDesc/StakrTargetStreamer.cpp create mode 100644 llvm/lib/Target/Stakr/Stakr.td create mode 100644 llvm/lib/Target/Stakr/StakrAsmPrinter.cpp create mode 100644 llvm/lib/Target/Stakr/StakrFrameLowering.cpp create mode 100644 llvm/lib/Target/Stakr/StakrISelDAGToDAG.cpp create mode 100644 llvm/lib/Target/Stakr/StakrISelLowering.cpp create mode 100644 llvm/lib/Target/Stakr/StakrInstrFormats.td create mode 100644 llvm/lib/Target/Stakr/StakrInstrInfo.cpp create mode 100644 llvm/lib/Target/Stakr/StakrInstrInfo.td create mode 100644 llvm/lib/Target/Stakr/StakrMachineFunctionInfo.cpp create mode 100644 llvm/lib/Target/Stakr/StakrRegisterInfo.cpp create mode 100644 llvm/lib/Target/Stakr/StakrRegisterInfo.td create mode 100644 llvm/lib/Target/Stakr/StakrSubtarget.cpp create mode 100644 llvm/lib/Target/Stakr/StakrTargetMachine.cpp create mode 100644 llvm/lib/Target/Stakr/StakrTargetObjectFile.cpp create mode 100644 llvm/lib/Target/Stakr/TargetInfo/CMakeLists.txt create mode 100644 llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.cpp create mode 100644 llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.h diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index da012596cca9..23449152f502 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -596,6 +596,7 @@ set(LLVM_ALL_EXPERIMENTAL_TARGETS CSKY DirectX M68k + Stakr Xtensa ) diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 7c5aa52a1bd0..a202cdf232cd 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -83,6 +83,7 @@ public: sparcv9, // Sparcv9: Sparcv9 sparcel, // Sparc: (endianness = little). NB: 'Sparcle' is a CPU variant systemz, // SystemZ: s390x + stakr, // stakr tce, // TCE (http://tce.cs.tut.fi/): tce tcele, // TCE little endian (http://tce.cs.tut.fi/): tcele thumb, // Thumb (little endian): thumb, thumbv.* @@ -383,9 +384,7 @@ public: ObjectFormat == Other.ObjectFormat; } - bool operator!=(const Triple &Other) const { - return !(*this == Other); - } + bool operator!=(const Triple &Other) const { return !(*this == Other); } bool operator<(const Triple &Other) const { return std::tie(Arch, SubArch, Vendor, OS, Environment, ObjectFormat, @@ -436,9 +435,7 @@ public: OSType getOS() const { return OS; } /// Does this triple have the optional environment (fourth) component? - bool hasEnvironment() const { - return getEnvironmentName() != ""; - } + bool hasEnvironment() const { return getEnvironmentName() != ""; } /// Get the parsed environment type of this triple. EnvironmentType getEnvironment() const { return Environment; } @@ -602,23 +599,15 @@ public: /// changes, i.e., if the two operating systems diverge or their version /// numbers get out of sync, that will need to be changed. /// watchOS has completely different version numbers so it is not included. - bool isiOS() const { - return getOS() == Triple::IOS || isTvOS(); - } + bool isiOS() const { return getOS() == Triple::IOS || isTvOS(); } /// Is this an Apple tvOS triple. - bool isTvOS() const { - return getOS() == Triple::TvOS; - } + bool isTvOS() const { return getOS() == Triple::TvOS; } /// Is this an Apple watchOS triple. - bool isWatchOS() const { - return getOS() == Triple::WatchOS; - } + bool isWatchOS() const { return getOS() == Triple::WatchOS; } - bool isWatchABI() const { - return getSubArch() == Triple::ARMSubArch_v7k; - } + bool isWatchABI() const { return getSubArch() == Triple::ARMSubArch_v7k; } /// Is this an Apple XROS triple. bool isXROS() const { return getOS() == Triple::XROS; } @@ -664,31 +653,19 @@ public: isMacCatalystEnvironment())); } - bool isOSNetBSD() const { - return getOS() == Triple::NetBSD; - } + bool isOSNetBSD() const { return getOS() == Triple::NetBSD; } - bool isOSOpenBSD() const { - return getOS() == Triple::OpenBSD; - } + bool isOSOpenBSD() const { return getOS() == Triple::OpenBSD; } - bool isOSFreeBSD() const { - return getOS() == Triple::FreeBSD; - } + bool isOSFreeBSD() const { return getOS() == Triple::FreeBSD; } - bool isOSFuchsia() const { - return getOS() == Triple::Fuchsia; - } + bool isOSFuchsia() const { return getOS() == Triple::Fuchsia; } bool isOSDragonFly() const { return getOS() == Triple::DragonFly; } - bool isOSSolaris() const { - return getOS() == Triple::Solaris; - } + bool isOSSolaris() const { return getOS() == Triple::Solaris; } - bool isOSIAMCU() const { - return getOS() == Triple::ELFIAMCU; - } + bool isOSIAMCU() const { return getOS() == Triple::ELFIAMCU; } bool isOSUnknown() const { return getOS() == Triple::UnknownOS; } @@ -703,19 +680,13 @@ public: } /// Tests whether the OS is Haiku. - bool isOSHaiku() const { - return getOS() == Triple::Haiku; - } + bool isOSHaiku() const { return getOS() == Triple::Haiku; } /// Tests whether the OS is UEFI. - bool isUEFI() const { - return getOS() == Triple::UEFI; - } + bool isUEFI() const { return getOS() == Triple::UEFI; } /// Tests whether the OS is Windows. - bool isOSWindows() const { - return getOS() == Triple::Win32; - } + bool isOSWindows() const { return getOS() == Triple::Win32; } /// Checks if the environment is MSVC. bool isKnownWindowsMSVCEnvironment() const { @@ -762,19 +733,13 @@ public: } /// Tests whether the OS is Linux. - bool isOSLinux() const { - return getOS() == Triple::Linux; - } + bool isOSLinux() const { return getOS() == Triple::Linux; } /// Tests whether the OS is kFreeBSD. - bool isOSKFreeBSD() const { - return getOS() == Triple::KFreeBSD; - } + bool isOSKFreeBSD() const { return getOS() == Triple::KFreeBSD; } /// Tests whether the OS is Hurd. - bool isOSHurd() const { - return getOS() == Triple::Hurd; - } + bool isOSHurd() const { return getOS() == Triple::Hurd; } /// Tests whether the OS is WASI. bool isOSWASI() const { @@ -783,9 +748,7 @@ public: } /// Tests whether the OS is Emscripten. - bool isOSEmscripten() const { - return getOS() == Triple::Emscripten; - } + bool isOSEmscripten() const { return getOS() == Triple::Emscripten; } /// Tests whether the OS uses glibc. bool isOSGlibc() const { @@ -795,44 +758,30 @@ public: } /// Tests whether the OS is AIX. - bool isOSAIX() const { - return getOS() == Triple::AIX; - } + bool isOSAIX() const { return getOS() == Triple::AIX; } - bool isOSSerenity() const { - return getOS() == Triple::Serenity; - } + bool isOSSerenity() const { return getOS() == Triple::Serenity; } /// Tests whether the OS is QURT. bool isOSQurt() const { return getOS() == Triple::QURT; } /// Tests whether the OS uses the ELF binary format. - bool isOSBinFormatELF() const { - return getObjectFormat() == Triple::ELF; - } + bool isOSBinFormatELF() const { return getObjectFormat() == Triple::ELF; } /// Tests whether the OS uses the COFF binary format. - bool isOSBinFormatCOFF() const { - return getObjectFormat() == Triple::COFF; - } + bool isOSBinFormatCOFF() const { return getObjectFormat() == Triple::COFF; } /// Tests whether the OS uses the GOFF binary format. bool isOSBinFormatGOFF() const { return getObjectFormat() == Triple::GOFF; } /// Tests whether the environment is MachO. - bool isOSBinFormatMachO() const { - return getObjectFormat() == Triple::MachO; - } + bool isOSBinFormatMachO() const { return getObjectFormat() == Triple::MachO; } /// Tests whether the OS uses the Wasm binary format. - bool isOSBinFormatWasm() const { - return getObjectFormat() == Triple::Wasm; - } + bool isOSBinFormatWasm() const { return getObjectFormat() == Triple::Wasm; } /// Tests whether the OS uses the XCOFF binary format. - bool isOSBinFormatXCOFF() const { - return getObjectFormat() == Triple::XCOFF; - } + bool isOSBinFormatXCOFF() const { return getObjectFormat() == Triple::XCOFF; } /// Tests whether the OS uses the DXContainer binary format. bool isOSBinFormatDXContainer() const { @@ -847,16 +796,14 @@ public: /// Tests whether the target is the PS4 platform. bool isPS4() const { - return getArch() == Triple::x86_64 && - getVendor() == Triple::SCEI && + return getArch() == Triple::x86_64 && getVendor() == Triple::SCEI && getOS() == Triple::PS4; } /// Tests whether the target is the PS5 platform. bool isPS5() const { - return getArch() == Triple::x86_64 && - getVendor() == Triple::SCEI && - getOS() == Triple::PS5; + return getArch() == Triple::x86_64 && getVendor() == Triple::SCEI && + getOS() == Triple::PS5; } /// Tests whether the target is the PS4 or PS5 platform. @@ -900,13 +847,9 @@ public: bool isOSLiteOS() const { return getOS() == Triple::LiteOS; } /// Tests whether the target is DXIL. - bool isDXIL() const { - return getArch() == Triple::dxil; - } + bool isDXIL() const { return getArch() == Triple::dxil; } - bool isShaderModelOS() const { - return getOS() == Triple::ShaderModel; - } + bool isShaderModelOS() const { return getOS() == Triple::ShaderModel; } bool isVulkanOS() const { return getOS() == Triple::Vulkan; } @@ -941,9 +884,7 @@ public: bool isSPIROrSPIRV() const { return isSPIR() || isSPIRV(); } /// Tests whether the target is SPIR-V Logical - bool isSPIRVLogical() const { - return getArch() == Triple::spirv; - } + bool isSPIRVLogical() const { return getArch() == Triple::spirv; } /// Tests whether the target is NVPTX (32- or 64-bit). bool isNVPTX() const { @@ -1091,9 +1032,7 @@ public: } /// Tests whether the target is MIPS (little and big endian, 32- or 64-bit). - bool isMIPS() const { - return isMIPS32() || isMIPS64(); - } + bool isMIPS() const { return isMIPS32() || isMIPS64(); } /// Tests whether the target is PowerPC (32- or 64-bit LE or BE). bool isPPC() const { @@ -1153,9 +1092,7 @@ public: bool isSPARC() const { return isSPARC32() || isSPARC64(); } /// Tests whether the target is SystemZ. - bool isSystemZ() const { - return getArch() == Triple::systemz; - } + bool isSystemZ() const { return getArch() == Triple::systemz; } /// Tests whether the target is x86 (32- or 64-bit). bool isX86() const { @@ -1169,9 +1106,7 @@ public: bool isX86_64() const { return getArch() == Triple::x86_64; } /// Tests whether the target is VE - bool isVE() const { - return getArch() == Triple::ve; - } + bool isVE() const { return getArch() == Triple::ve; } /// Tests whether the target is wasm (32- and 64-bit). bool isWasm() const { @@ -1179,9 +1114,7 @@ public: } // Tests whether the target is CSKY - bool isCSKY() const { - return getArch() == Triple::csky; - } + bool isCSKY() const { return getArch() == Triple::csky; } /// Tests whether the target is the Apple "arm64e" AArch64 subarch. bool isArm64e() const { @@ -1225,8 +1158,7 @@ public: EnvironmentType Env = getEnvironment(); return Env == llvm::Triple::GNUEABIHF || Env == llvm::Triple::GNUEABIHFT64 || - Env == llvm::Triple::MuslEABIHF || - Env == llvm::Triple::EABIHF; + Env == llvm::Triple::MuslEABIHF || Env == llvm::Triple::EABIHF; } /// Tests whether the target supports comdat @@ -1413,7 +1345,6 @@ public: LLVM_ABI std::string computeDataLayout(StringRef ABIName = "") const; }; -} // End llvm namespace - +} // namespace llvm #endif diff --git a/llvm/lib/Target/Stakr/AsmParser/CMakeLists.txt b/llvm/lib/Target/Stakr/AsmParser/CMakeLists.txt new file mode 100644 index 000000000000..ba6276ae4ad7 --- /dev/null +++ b/llvm/lib/Target/Stakr/AsmParser/CMakeLists.txt @@ -0,0 +1,16 @@ +add_llvm_component_library(LLVMStakrAsmParser + StakrAsmParser.cpp + StakrAsmTypeCheck.cpp + + LINK_COMPONENTS + CodeGenTypes + MC + MCParser + Support + TargetParser + StakrDesc + StakrInfo + + ADD_TO_COMPONENT + Stakr +) diff --git a/llvm/lib/Target/Stakr/AsmParser/StakrAsmParser.cpp b/llvm/lib/Target/Stakr/AsmParser/StakrAsmParser.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/AsmParser/StakrAsmTypeCheck.cpp b/llvm/lib/Target/Stakr/AsmParser/StakrAsmTypeCheck.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/CMakeLists.txt b/llvm/lib/Target/Stakr/CMakeLists.txt new file mode 100644 index 000000000000..1e30dab8ee79 --- /dev/null +++ b/llvm/lib/Target/Stakr/CMakeLists.txt @@ -0,0 +1,48 @@ +add_llvm_component_group(Stakr) + +set(LLVM_TARGET_DEFINITIONS Stakr.td) + +tablegen(LLVM StakrGenSubtargetInfo.td -gen-subtarget) +tablegen(LLVM StakrGenRegisterInfo.inc -gen-register-info) +tablegen(LLVM StakrGenInstrInfo.inc -gen-instr-info) +tablegen(LLVM StakrGenAsmWriter.inc -gen-asm-writer) +tablegen(LLVM StakrGenAsmMatcher.inc -gen-asm-matcher) +tablegen(LLVM StakrGenAsmEmitter.inc -gen-emitter) +tablegen(LLVM StakrGenCallingConv.inc -gen-callingconv) +tablegen(LLVM StakrGenDAGISel.inc -gen-dag-isel) + +add_public_tablegen_target(StakrCommonTableGen) + +add_llvm_target(StakrCodeGen + StakrAsmPrinter.cpp + StakrFrameLowering.cpp + StakrInstrInfo.cpp + StakrISelDAGToDAG.cpp + StakrISelLowering.cpp + StakrMachineFunctionInfo.cpp + StakrRegisterInfo.cpp + StakrSubtarget.cpp + StakrTargetMachine.cpp + StakrTargetObjectFile.cpp + + LINK_COMPONENTS + Analysis + AsmPrinter + BinaryFormat + CodeGen + CodeGenTypes + Core + MC + SelectionDAG + Support + Target + TargetParser + TransformUtils + + ADD_TO_COMPONENT + Stakr +) + +add_subdirectory(AsmParser) +add_subdirectory(MCTargetDesc) +add_subdirectory(TargetInfo) diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/Stakr/MCTargetDesc/CMakeLists.txt new file mode 100644 index 000000000000..59dbba432194 --- /dev/null +++ b/llvm/lib/Target/Stakr/MCTargetDesc/CMakeLists.txt @@ -0,0 +1,20 @@ +add_llvm_component_library(LLVMStakrDesc + StakrAsmBackend.cpp + StakrInstPrinter.cpp + StakrMCAsmInfo.cpp + StakrMCCodeEmitter.cpp + StakrMCTargetDesc.cpp + StakrMCTypeUtilities.cpp + StakrTargetStreamer.cpp + StakrELFObjectWriter.cpp + + LINK_COMPONENTS + CodeGenTypes + MC + Support + TargetParser + StakrInfo + + ADD_TO_COMPONENT + Stakr +) diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrAsmBackend.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrAsmBackend.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrELFObjectWriter.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrELFObjectWriter.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrInstPrinter.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrInstPrinter.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCAsmInfo.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCAsmInfo.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCCodeEmitter.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCCodeEmitter.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTargetDesc.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTargetDesc.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTypeUtilities.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrMCTypeUtilities.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/MCTargetDesc/StakrTargetStreamer.cpp b/llvm/lib/Target/Stakr/MCTargetDesc/StakrTargetStreamer.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/Stakr.td b/llvm/lib/Target/Stakr/Stakr.td new file mode 100644 index 000000000000..1a04e19835f0 --- /dev/null +++ b/llvm/lib/Target/Stakr/Stakr.td @@ -0,0 +1,23 @@ +include "llvm/Target/Target.td" + +include "StakrRegisterInfo.td" +include "StakrInstrInfo.td" + +def StakrInstrInfo : InstrInfo; + +def StakrAsmParser : AsmParser { + let ShouldEmitMatchRegisterName = 0; +} + +def StakrAsmWriter : AsmWriter { + string AsmWriterClassName = "InstPrinter"; + int PassSubtarget = 0; + int Variant = 0; + bit isMCAsmWriter = 1; +} + +def Stakr : Target { + let InstructionSet = StakrInstrInfo; + let AssemblyParsers = [StakrAsmParser]; + let AssemblyWriters = [StakrAsmWriter]; +} diff --git a/llvm/lib/Target/Stakr/StakrAsmPrinter.cpp b/llvm/lib/Target/Stakr/StakrAsmPrinter.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrFrameLowering.cpp b/llvm/lib/Target/Stakr/StakrFrameLowering.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrISelDAGToDAG.cpp b/llvm/lib/Target/Stakr/StakrISelDAGToDAG.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrISelLowering.cpp b/llvm/lib/Target/Stakr/StakrISelLowering.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrInstrFormats.td b/llvm/lib/Target/Stakr/StakrInstrFormats.td new file mode 100644 index 000000000000..8aadf0018c94 --- /dev/null +++ b/llvm/lib/Target/Stakr/StakrInstrFormats.td @@ -0,0 +1,40 @@ +class StakrInst opwidth, bits<5> inst, string asmstr, bit stack> + : StackRel, RegisterRel, Instruction { + bits<8> Inst; + bit StackBased = stack; + string BaseName = NAME; + let Namespace = "Stakr"; + let Pattern = []; + let AsmString = asmstr; + bit IsCanonical = 0; + + let Inst{7} = 0; + let Inst{6-5} = opwidth; + let Inst{4-0} = inst; +} + +class NI pattern, bit stack, + string asmstr = "", bits<2> opwidth, bits<5> inst> + : StakrInst { + dag OutOperandList = oops; + dag InOperandList = iops; + let Pattern = pattern; +} + +multiclass WNI pattern, bit stack, + string asmstr = "", bits<5> inst> { + def "8": NI; + def "16": NI; + def "32": NI; + def "64": NI; +} + +multiclass I pattern_r, string asmstr_r = "", string asmstr_s = "", + bits<5> inst = -1> { + let isCodeGenOnly = 1 in + defm "": WNI; + + let BaseName = NAME in + defm _S : WNI; +} diff --git a/llvm/lib/Target/Stakr/StakrInstrInfo.cpp b/llvm/lib/Target/Stakr/StakrInstrInfo.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrInstrInfo.td b/llvm/lib/Target/Stakr/StakrInstrInfo.td new file mode 100644 index 000000000000..0f4e73a7e2d1 --- /dev/null +++ b/llvm/lib/Target/Stakr/StakrInstrInfo.td @@ -0,0 +1,31 @@ +def SDT_StakrCallSeqStart : SDCallSeqStart<[SDTCisVT<0, iPTR>, + SDTCisVT<1, iPTR>]>; +def SDT_StakrCallSeqEnd : + SDCallSeqEnd<[SDTCisVT<0, iPTR>, SDTCisVT<1, iPTR>]>; + +class StackRel; +def getStackOpcode : InstrMapping { + let FilterClass = "StackRel"; + let RowFields = ["BaseName"]; + let ColFields = ["StackBased"]; + let KeyCol = ["0"]; + let ValueCols = [["1"]]; +} + +class RegisterRel; +def getRegisterOpcode : InstrMapping { + let FilterClass = "RegisterRel"; + let RowFields = ["BaseName"]; + let ColFields = ["StackBased"]; + let KeyCol = ["1"]; + let ValueCols = [["0"]]; +} + +include "StakrInstrFormats.td" + +let isMoveImm = 1, isAsCheapAsAMove = 1, isReMaterializable = 1 in { + defm CONST : I<(outs I32:$res), (ins i32imm:$imm), + (outs), (ins i32imm:$imm), + [(set I32:$res, imm:$imm)], + "const\t$res, $imm", "const\t$imm", 0b00000>; +} diff --git a/llvm/lib/Target/Stakr/StakrMachineFunctionInfo.cpp b/llvm/lib/Target/Stakr/StakrMachineFunctionInfo.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrRegisterInfo.cpp b/llvm/lib/Target/Stakr/StakrRegisterInfo.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrRegisterInfo.td b/llvm/lib/Target/Stakr/StakrRegisterInfo.td new file mode 100644 index 000000000000..21af3e141751 --- /dev/null +++ b/llvm/lib/Target/Stakr/StakrRegisterInfo.td @@ -0,0 +1,17 @@ +class StakrReg : Register { + let Namespace = "Stakr"; +} + +class StakrRegClass regTypes, int alignment, dag regList> + : RegisterClass<"Stakr", regTypes, alignment, regList>; + +def FP : StakrReg<"%FP">; +def SP : StakrReg<"%SP">; + +def I32_0 : StakrReg<"%i32.0">; + +def VALUE_STACK : StakrReg<"STACK">; + +def I32 : StakrRegClass<[i32], 32, (add FP, SP, I32_0)>; + +defm "": RemapAllTargetPseudoPointerOperands; diff --git a/llvm/lib/Target/Stakr/StakrSubtarget.cpp b/llvm/lib/Target/Stakr/StakrSubtarget.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrTargetMachine.cpp b/llvm/lib/Target/Stakr/StakrTargetMachine.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/StakrTargetObjectFile.cpp b/llvm/lib/Target/Stakr/StakrTargetObjectFile.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/TargetInfo/CMakeLists.txt b/llvm/lib/Target/Stakr/TargetInfo/CMakeLists.txt new file mode 100644 index 000000000000..05c76d5134bf --- /dev/null +++ b/llvm/lib/Target/Stakr/TargetInfo/CMakeLists.txt @@ -0,0 +1,14 @@ +include_directories(${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/..) + +add_llvm_component_library(LLVMStakrInfo + StakrTargetInfo.cpp + + LINK_COMPONENTS + MC + Support + + ADD_TO_COMPONENT + Stakr +) + +add_dependencies(LLVMStakrInfo StakrCommonTableGen) diff --git a/llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.cpp b/llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.cpp new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.h b/llvm/lib/Target/Stakr/TargetInfo/StakrTargetInfo.h new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index 7a907808c0f3..f636f9018b75 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -23,71 +23,133 @@ using namespace llvm; StringRef Triple::getArchTypeName(ArchType Kind) { switch (Kind) { - case UnknownArch: return "unknown"; + case UnknownArch: + return "unknown"; - case aarch64: return "aarch64"; - case aarch64_32: return "aarch64_32"; - case aarch64_be: return "aarch64_be"; - case amdgcn: return "amdgcn"; - case amdil64: return "amdil64"; - case amdil: return "amdil"; - case arc: return "arc"; - case arm: return "arm"; - case armeb: return "armeb"; - case avr: return "avr"; - case bpfeb: return "bpfeb"; - case bpfel: return "bpfel"; - case csky: return "csky"; - case dxil: return "dxil"; - case hexagon: return "hexagon"; - case hsail64: return "hsail64"; - case hsail: return "hsail"; - case kalimba: return "kalimba"; - case lanai: return "lanai"; - case loongarch32: return "loongarch32"; - case loongarch64: return "loongarch64"; - case m68k: return "m68k"; - case mips64: return "mips64"; - case mips64el: return "mips64el"; - case mips: return "mips"; - case mipsel: return "mipsel"; - case msp430: return "msp430"; - case nvptx64: return "nvptx64"; - case nvptx: return "nvptx"; - case ppc64: return "powerpc64"; - case ppc64le: return "powerpc64le"; - case ppc: return "powerpc"; - case ppcle: return "powerpcle"; - case r600: return "r600"; - case renderscript32: return "renderscript32"; - case renderscript64: return "renderscript64"; - case riscv32: return "riscv32"; - case riscv64: return "riscv64"; + case aarch64: + return "aarch64"; + case aarch64_32: + return "aarch64_32"; + case aarch64_be: + return "aarch64_be"; + case amdgcn: + return "amdgcn"; + case amdil64: + return "amdil64"; + case amdil: + return "amdil"; + case arc: + return "arc"; + case arm: + return "arm"; + case armeb: + return "armeb"; + case avr: + return "avr"; + case bpfeb: + return "bpfeb"; + case bpfel: + return "bpfel"; + case csky: + return "csky"; + case dxil: + return "dxil"; + case hexagon: + return "hexagon"; + case hsail64: + return "hsail64"; + case hsail: + return "hsail"; + case kalimba: + return "kalimba"; + case lanai: + return "lanai"; + case loongarch32: + return "loongarch32"; + case loongarch64: + return "loongarch64"; + case m68k: + return "m68k"; + case mips64: + return "mips64"; + case mips64el: + return "mips64el"; + case mips: + return "mips"; + case mipsel: + return "mipsel"; + case msp430: + return "msp430"; + case nvptx64: + return "nvptx64"; + case nvptx: + return "nvptx"; + case ppc64: + return "powerpc64"; + case ppc64le: + return "powerpc64le"; + case ppc: + return "powerpc"; + case ppcle: + return "powerpcle"; + case r600: + return "r600"; + case renderscript32: + return "renderscript32"; + case renderscript64: + return "renderscript64"; + case riscv32: + return "riscv32"; + case riscv64: + return "riscv64"; case riscv32be: return "riscv32be"; case riscv64be: return "riscv64be"; - case shave: return "shave"; - case sparc: return "sparc"; - case sparcel: return "sparcel"; - case sparcv9: return "sparcv9"; - case spir64: return "spir64"; - case spir: return "spir"; - case spirv: return "spirv"; - case spirv32: return "spirv32"; - case spirv64: return "spirv64"; - case systemz: return "s390x"; - case tce: return "tce"; - case tcele: return "tcele"; - case thumb: return "thumb"; - case thumbeb: return "thumbeb"; - case ve: return "ve"; - case wasm32: return "wasm32"; - case wasm64: return "wasm64"; - case x86: return "i386"; - case x86_64: return "x86_64"; - case xcore: return "xcore"; - case xtensa: return "xtensa"; + case shave: + return "shave"; + case sparc: + return "sparc"; + case sparcel: + return "sparcel"; + case sparcv9: + return "sparcv9"; + case spir64: + return "spir64"; + case spir: + return "spir"; + case spirv: + return "spirv"; + case spirv32: + return "spirv32"; + case spirv64: + return "spirv64"; + case systemz: + return "s390x"; + case stakr: + return "stakr"; + case tce: + return "tce"; + case tcele: + return "tcele"; + case thumb: + return "thumb"; + case thumbeb: + return "thumbeb"; + case ve: + return "ve"; + case wasm32: + return "wasm32"; + case wasm64: + return "wasm64"; + case x86: + return "i386"; + case x86_64: + return "x86_64"; + case xcore: + return "xcore"; + case xtensa: + return "xtensa"; } llvm_unreachable("Invalid ArchType!"); @@ -179,70 +241,95 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) { case aarch64: case aarch64_be: - case aarch64_32: return "aarch64"; + case aarch64_32: + return "aarch64"; - case arc: return "arc"; + case arc: + return "arc"; case arm: case armeb: case thumb: - case thumbeb: return "arm"; + case thumbeb: + return "arm"; - case avr: return "avr"; + case avr: + return "avr"; case ppc64: case ppc64le: case ppc: - case ppcle: return "ppc"; + case ppcle: + return "ppc"; - case m68k: return "m68k"; + case m68k: + return "m68k"; case mips: case mipsel: case mips64: - case mips64el: return "mips"; + case mips64el: + return "mips"; - case hexagon: return "hexagon"; + case hexagon: + return "hexagon"; - case amdgcn: return "amdgcn"; - case r600: return "r600"; + case amdgcn: + return "amdgcn"; + case r600: + return "r600"; case bpfel: - case bpfeb: return "bpf"; + case bpfeb: + return "bpf"; case sparcv9: case sparcel: - case sparc: return "sparc"; + case sparc: + return "sparc"; - case systemz: return "s390"; + case systemz: + return "s390"; case x86: - case x86_64: return "x86"; + case x86_64: + return "x86"; - case xcore: return "xcore"; + case xcore: + return "xcore"; // NVPTX intrinsics are namespaced under nvvm. - case nvptx: return "nvvm"; - case nvptx64: return "nvvm"; + case nvptx: + return "nvvm"; + case nvptx64: + return "nvvm"; case amdil: - case amdil64: return "amdil"; + case amdil64: + return "amdil"; case hsail: - case hsail64: return "hsail"; + case hsail64: + return "hsail"; case spir: - case spir64: return "spir"; + case spir64: + return "spir"; case spirv: case spirv32: - case spirv64: return "spv"; + case spirv64: + return "spv"; - case kalimba: return "kalimba"; - case lanai: return "lanai"; - case shave: return "shave"; + case kalimba: + return "kalimba"; + case lanai: + return "lanai"; + case shave: + return "shave"; case wasm32: - case wasm64: return "wasm"; + case wasm64: + return "wasm"; case riscv32: case riscv64: @@ -250,37 +337,56 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) { case riscv64be: return "riscv"; - case ve: return "ve"; - case csky: return "csky"; + case ve: + return "ve"; + case csky: + return "csky"; case loongarch32: - case loongarch64: return "loongarch"; + case loongarch64: + return "loongarch"; - case dxil: return "dx"; + case dxil: + return "dx"; - case xtensa: return "xtensa"; + case xtensa: + return "xtensa"; } } StringRef Triple::getVendorTypeName(VendorType Kind) { switch (Kind) { - case UnknownVendor: return "unknown"; + case UnknownVendor: + return "unknown"; - case AMD: return "amd"; - case Apple: return "apple"; - case CSR: return "csr"; - case Freescale: return "fsl"; - case IBM: return "ibm"; - case ImaginationTechnologies: return "img"; + case AMD: + return "amd"; + case Apple: + return "apple"; + case CSR: + return "csr"; + case Freescale: + return "fsl"; + case IBM: + return "ibm"; + case ImaginationTechnologies: + return "img"; case Intel: return "intel"; - case Mesa: return "mesa"; - case MipsTechnologies: return "mti"; - case NVIDIA: return "nvidia"; - case OpenEmbedded: return "oe"; - case PC: return "pc"; - case SCEI: return "scei"; - case SUSE: return "suse"; + case Mesa: + return "mesa"; + case MipsTechnologies: + return "mti"; + case NVIDIA: + return "nvidia"; + case OpenEmbedded: + return "oe"; + case PC: + return "pc"; + case SCEI: + return "scei"; + case SUSE: + return "suse"; case Meta: return "meta"; } @@ -290,55 +396,95 @@ StringRef Triple::getVendorTypeName(VendorType Kind) { StringRef Triple::getOSTypeName(OSType Kind) { switch (Kind) { - case UnknownOS: return "unknown"; + case UnknownOS: + return "unknown"; - case AIX: return "aix"; - case AMDHSA: return "amdhsa"; - case AMDPAL: return "amdpal"; - case BridgeOS: return "bridgeos"; - case CUDA: return "cuda"; - case Darwin: return "darwin"; - case DragonFly: return "dragonfly"; - case DriverKit: return "driverkit"; - case ELFIAMCU: return "elfiamcu"; - case Emscripten: return "emscripten"; - case FreeBSD: return "freebsd"; - case Fuchsia: return "fuchsia"; - case Haiku: return "haiku"; - case HermitCore: return "hermit"; - case Hurd: return "hurd"; - case IOS: return "ios"; - case KFreeBSD: return "kfreebsd"; - case Linux: return "linux"; - case Lv2: return "lv2"; - case MacOSX: return "macosx"; + case AIX: + return "aix"; + case AMDHSA: + return "amdhsa"; + case AMDPAL: + return "amdpal"; + case BridgeOS: + return "bridgeos"; + case CUDA: + return "cuda"; + case Darwin: + return "darwin"; + case DragonFly: + return "dragonfly"; + case DriverKit: + return "driverkit"; + case ELFIAMCU: + return "elfiamcu"; + case Emscripten: + return "emscripten"; + case FreeBSD: + return "freebsd"; + case Fuchsia: + return "fuchsia"; + case Haiku: + return "haiku"; + case HermitCore: + return "hermit"; + case Hurd: + return "hurd"; + case IOS: + return "ios"; + case KFreeBSD: + return "kfreebsd"; + case Linux: + return "linux"; + case Lv2: + return "lv2"; + case MacOSX: + return "macosx"; case Managarm: return "managarm"; - case Mesa3D: return "mesa3d"; - case NVCL: return "nvcl"; - case NetBSD: return "netbsd"; - case OpenBSD: return "openbsd"; - case PS4: return "ps4"; - case PS5: return "ps5"; - case RTEMS: return "rtems"; - case Solaris: return "solaris"; - case Serenity: return "serenity"; - case TvOS: return "tvos"; - case UEFI: return "uefi"; - case WASI: return "wasi"; + case Mesa3D: + return "mesa3d"; + case NVCL: + return "nvcl"; + case NetBSD: + return "netbsd"; + case OpenBSD: + return "openbsd"; + case PS4: + return "ps4"; + case PS5: + return "ps5"; + case RTEMS: + return "rtems"; + case Solaris: + return "solaris"; + case Serenity: + return "serenity"; + case TvOS: + return "tvos"; + case UEFI: + return "uefi"; + case WASI: + return "wasi"; case WASIp1: return "wasip1"; case WASIp2: return "wasip2"; case WASIp3: return "wasip3"; - case WatchOS: return "watchos"; - case Win32: return "windows"; - case ZOS: return "zos"; - case ShaderModel: return "shadermodel"; - case LiteOS: return "liteos"; - case XROS: return "xros"; - case Vulkan: return "vulkan"; + case WatchOS: + return "watchos"; + case Win32: + return "windows"; + case ZOS: + return "zos"; + case ShaderModel: + return "shadermodel"; + case LiteOS: + return "liteos"; + case XROS: + return "xros"; + case Vulkan: + return "vulkan"; case CheriotRTOS: return "cheriotrtos"; case OpenCL: @@ -356,62 +502,106 @@ StringRef Triple::getOSTypeName(OSType Kind) { StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) { switch (Kind) { - case UnknownEnvironment: return "unknown"; - case Android: return "android"; - case CODE16: return "code16"; - case CoreCLR: return "coreclr"; - case Cygnus: return "cygnus"; - case EABI: return "eabi"; - case EABIHF: return "eabihf"; - case GNU: return "gnu"; - case GNUT64: return "gnut64"; - case GNUABI64: return "gnuabi64"; - case GNUABIN32: return "gnuabin32"; - case GNUEABI: return "gnueabi"; - case GNUEABIT64: return "gnueabit64"; - case GNUEABIHF: return "gnueabihf"; - case GNUEABIHFT64: return "gnueabihft64"; - case GNUF32: return "gnuf32"; - case GNUF64: return "gnuf64"; - case GNUSF: return "gnusf"; - case GNUX32: return "gnux32"; - case GNUILP32: return "gnu_ilp32"; - case Itanium: return "itanium"; - case MSVC: return "msvc"; - case MacABI: return "macabi"; - case Musl: return "musl"; + case UnknownEnvironment: + return "unknown"; + case Android: + return "android"; + case CODE16: + return "code16"; + case CoreCLR: + return "coreclr"; + case Cygnus: + return "cygnus"; + case EABI: + return "eabi"; + case EABIHF: + return "eabihf"; + case GNU: + return "gnu"; + case GNUT64: + return "gnut64"; + case GNUABI64: + return "gnuabi64"; + case GNUABIN32: + return "gnuabin32"; + case GNUEABI: + return "gnueabi"; + case GNUEABIT64: + return "gnueabit64"; + case GNUEABIHF: + return "gnueabihf"; + case GNUEABIHFT64: + return "gnueabihft64"; + case GNUF32: + return "gnuf32"; + case GNUF64: + return "gnuf64"; + case GNUSF: + return "gnusf"; + case GNUX32: + return "gnux32"; + case GNUILP32: + return "gnu_ilp32"; + case Itanium: + return "itanium"; + case MSVC: + return "msvc"; + case MacABI: + return "macabi"; + case Musl: + return "musl"; case MuslABIN32: return "muslabin32"; case MuslABI64: return "muslabi64"; - case MuslEABI: return "musleabi"; - case MuslEABIHF: return "musleabihf"; + case MuslEABI: + return "musleabi"; + case MuslEABIHF: + return "musleabihf"; case MuslF32: return "muslf32"; case MuslSF: return "muslsf"; - case MuslX32: return "muslx32"; + case MuslX32: + return "muslx32"; case MuslWALI: return "muslwali"; - case Simulator: return "simulator"; - case Pixel: return "pixel"; - case Vertex: return "vertex"; - case Geometry: return "geometry"; - case Hull: return "hull"; - case Domain: return "domain"; - case Compute: return "compute"; - case Library: return "library"; - case RayGeneration: return "raygeneration"; - case Intersection: return "intersection"; - case AnyHit: return "anyhit"; - case ClosestHit: return "closesthit"; - case Miss: return "miss"; - case Callable: return "callable"; - case Mesh: return "mesh"; - case Amplification: return "amplification"; + case Simulator: + return "simulator"; + case Pixel: + return "pixel"; + case Vertex: + return "vertex"; + case Geometry: + return "geometry"; + case Hull: + return "hull"; + case Domain: + return "domain"; + case Compute: + return "compute"; + case Library: + return "library"; + case RayGeneration: + return "raygeneration"; + case Intersection: + return "intersection"; + case AnyHit: + return "anyhit"; + case ClosestHit: + return "closesthit"; + case Miss: + return "miss"; + case Callable: + return "callable"; + case Mesh: + return "mesh"; + case Amplification: + return "amplification"; case RootSignature: return "rootsignature"; - case OpenHOS: return "ohos"; + case OpenHOS: + return "ohos"; case PAuthTest: return "pauthtest"; case MTIA: @@ -427,15 +617,24 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) { StringRef Triple::getObjectFormatTypeName(ObjectFormatType Kind) { switch (Kind) { - case UnknownObjectFormat: return ""; - case COFF: return "coff"; - case ELF: return "elf"; - case GOFF: return "goff"; - case MachO: return "macho"; - case Wasm: return "wasm"; - case XCOFF: return "xcoff"; - case DXContainer: return "dxcontainer"; - case SPIRV: return "spirv"; + case UnknownObjectFormat: + return ""; + case COFF: + return "coff"; + case ELF: + return "elf"; + case GOFF: + return "goff"; + case MachO: + return "macho"; + case Wasm: + return "wasm"; + case XCOFF: + return "xcoff"; + case DXContainer: + return "dxcontainer"; + case SPIRV: + return "spirv"; } llvm_unreachable("unknown object format type"); } @@ -511,6 +710,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) { .Case("spirv", spirv) .Case("spirv32", spirv32) .Case("spirv64", spirv64) + .Case("stakr", stakr) .Case("kalimba", kalimba) .Case("lanai", lanai) .Case("shave", shave) @@ -660,6 +860,7 @@ Triple::ArchType Triple::parseArch(StringRef ArchName) { .Cases({"spirv64", "spirv64v1.0", "spirv64v1.1", "spirv64v1.2", "spirv64v1.3", "spirv64v1.4", "spirv64v1.5", "spirv64v1.6"}, Triple::spirv64) + .Case("stakr", Triple::stakr) .StartsWith("kalimba", Triple::kalimba) .Case("lanai", Triple::lanai) .Case("renderscript32", Triple::renderscript32) @@ -886,13 +1087,13 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) { // For now, this is the small part. Early return. if (ARMSubArch.empty()) return StringSwitch(SubArchName) - .EndsWith("kalimba3", Triple::KalimbaSubArch_v3) - .EndsWith("kalimba4", Triple::KalimbaSubArch_v4) - .EndsWith("kalimba5", Triple::KalimbaSubArch_v5) - .Default(Triple::NoSubArch); + .EndsWith("kalimba3", Triple::KalimbaSubArch_v3) + .EndsWith("kalimba4", Triple::KalimbaSubArch_v4) + .EndsWith("kalimba5", Triple::KalimbaSubArch_v5) + .Default(Triple::NoSubArch); // ARM sub arch. - switch(ARM::parseArch(ARMSubArch)) { + switch (ARM::parseArch(ARMSubArch)) { case ARM::ArchKind::ARMV4: return Triple::NoSubArch; case ARM::ArchKind::ARMV4T: @@ -1031,6 +1232,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) { case Triple::sparcv9: case Triple::spir64: case Triple::spir: + case Triple::stakr: case Triple::tce: case Triple::tcele: case Triple::thumbeb: @@ -1117,10 +1319,8 @@ Triple::Triple(const Twine &Str) : Triple(Str.str()) {} /// the string representation. Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr) : Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr).str()), - Arch(parseArch(ArchStr.str())), - SubArch(parseSubArch(ArchStr.str())), - Vendor(parseVendor(VendorStr.str())), - OS(parseOS(OSStr.str())), + Arch(parseArch(ArchStr.str())), SubArch(parseSubArch(ArchStr.str())), + Vendor(parseVendor(VendorStr.str())), OS(parseOS(OSStr.str())), Environment(), ObjectFormat(Triple::UnknownObjectFormat) { ObjectFormat = getDefaultFormat(*this); } @@ -1133,11 +1333,10 @@ Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr) Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr, const Twine &EnvironmentStr) : Data((ArchStr + Twine('-') + VendorStr + Twine('-') + OSStr + Twine('-') + - EnvironmentStr).str()), - Arch(parseArch(ArchStr.str())), - SubArch(parseSubArch(ArchStr.str())), - Vendor(parseVendor(VendorStr.str())), - OS(parseOS(OSStr.str())), + EnvironmentStr) + .str()), + Arch(parseArch(ArchStr.str())), SubArch(parseSubArch(ArchStr.str())), + Vendor(parseVendor(VendorStr.str())), OS(parseOS(OSStr.str())), Environment(parseEnvironment(EnvironmentStr.str())), ObjectFormat(parseFormat(EnvironmentStr.str())) { if (ObjectFormat == Triple::UnknownObjectFormat) @@ -1250,7 +1449,8 @@ std::string Triple::normalize(StringRef Str, CanonicalForm Form) { bool Valid = false; StringRef Comp = Components[Idx]; switch (Pos) { - default: llvm_unreachable("unexpected component type!"); + default: + llvm_unreachable("unexpected component type!"); case 0: Arch = parseArch(Comp); Valid = Arch != UnknownArch; @@ -1424,7 +1624,7 @@ std::string Triple::normalize(StringRef Str, CanonicalForm Form) { } StringRef Triple::getArchName() const { - return StringRef(Data).split('-').first; // Isolate first component + return StringRef(Data).split('-').first; // Isolate first component } StringRef Triple::getVendorName() const { @@ -1500,7 +1700,8 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const { Version = getOSVersion(); switch (getOS()) { - default: llvm_unreachable("unexpected OS for Darwin triple"); + default: + llvm_unreachable("unexpected OS for Darwin triple"); case Darwin: // Default to darwin8, i.e., MacOSX 10.4. if (Version.getMajor() == 0) @@ -1548,7 +1749,8 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const { VersionTuple Triple::getiOSVersion() const { switch (getOS()) { - default: llvm_unreachable("unexpected OS for Darwin triple"); + default: + llvm_unreachable("unexpected OS for Darwin triple"); case Darwin: case MacOSX: // Ignore the version from the triple. This is only handled because the @@ -1599,7 +1801,8 @@ VersionTuple Triple::getiOSVersion() const { VersionTuple Triple::getWatchOSVersion() const { switch (getOS()) { - default: llvm_unreachable("unexpected OS for Darwin triple"); + default: + llvm_unreachable("unexpected OS for Darwin triple"); case Darwin: case MacOSX: // Ignore the version from the triple. This is only handled because the @@ -1674,9 +1877,7 @@ VersionTuple Triple::getDXILVersion() const { return DXILVersion; } -void Triple::setTriple(const Twine &Str) { - *this = Triple(Str); -} +void Triple::setTriple(const Twine &Str) { *this = Triple(Str); } void Triple::setArch(ArchType Kind, SubArchType SubArch) { setArchName(getArchName(Kind, SubArch)); @@ -1686,16 +1887,15 @@ void Triple::setVendor(VendorType Kind) { setVendorName(getVendorTypeName(Kind)); } -void Triple::setOS(OSType Kind) { - setOSName(getOSTypeName(Kind)); -} +void Triple::setOS(OSType Kind) { setOSName(getOSTypeName(Kind)); } void Triple::setEnvironment(EnvironmentType Kind) { if (ObjectFormat == getDefaultFormat(*this)) return setEnvironmentName(getEnvironmentTypeName(Kind)); setEnvironmentName((getEnvironmentTypeName(Kind) + Twine("-") + - getObjectFormatTypeName(ObjectFormat)).str()); + getObjectFormatTypeName(ObjectFormat)) + .str()); } void Triple::setObjectFormat(ObjectFormatType Kind) { @@ -1703,7 +1903,8 @@ void Triple::setObjectFormat(ObjectFormatType Kind) { return setEnvironmentName(getObjectFormatTypeName(Kind)); setEnvironmentName((getEnvironmentTypeName(Environment) + Twine("-") + - getObjectFormatTypeName(Kind)).str()); + getObjectFormatTypeName(Kind)) + .str()); } void Triple::setArchName(StringRef Str) { @@ -1716,15 +1917,15 @@ void Triple::setVendorName(StringRef Str) { void Triple::setOSName(StringRef Str) { if (hasEnvironment()) - setTriple(getArchName() + "-" + getVendorName() + "-" + Str + - "-" + getEnvironmentName()); + setTriple(getArchName() + "-" + getVendorName() + "-" + Str + "-" + + getEnvironmentName()); else setTriple(getArchName() + "-" + getVendorName() + "-" + Str); } void Triple::setEnvironmentName(StringRef Str) { - setTriple(getArchName() + "-" + getVendorName() + "-" + getOSName() + - "-" + Str); + setTriple(getArchName() + "-" + getVendorName() + "-" + getOSName() + "-" + + Str); } void Triple::setOSAndEnvironmentName(StringRef Str) { @@ -1767,6 +1968,7 @@ unsigned Triple::getArchPointerBitWidth(llvm::Triple::ArchType Arch) { case llvm::Triple::sparcel: case llvm::Triple::spir: case llvm::Triple::spirv32: + case llvm::Triple::stakr: case llvm::Triple::tce: case llvm::Triple::tcele: case llvm::Triple::thumb: @@ -1846,6 +2048,7 @@ Triple Triple::get32BitArchVariant() const { case Triple::bpfel: case Triple::msp430: case Triple::systemz: + case Triple::stakr: case Triple::ve: T.setArch(UnknownArch); break; @@ -1888,33 +2091,61 @@ Triple Triple::get32BitArchVariant() const { // Already 32-bit. break; - case Triple::aarch64: T.setArch(Triple::arm); break; - case Triple::aarch64_be: T.setArch(Triple::armeb); break; - case Triple::amdil64: T.setArch(Triple::amdil); break; - case Triple::hsail64: T.setArch(Triple::hsail); break; - case Triple::loongarch64: T.setArch(Triple::loongarch32); break; + case Triple::aarch64: + T.setArch(Triple::arm); + break; + case Triple::aarch64_be: + T.setArch(Triple::armeb); + break; + case Triple::amdil64: + T.setArch(Triple::amdil); + break; + case Triple::hsail64: + T.setArch(Triple::hsail); + break; + case Triple::loongarch64: + T.setArch(Triple::loongarch32); + break; case Triple::mips64: T.setArch(Triple::mips, getSubArch()); break; case Triple::mips64el: T.setArch(Triple::mipsel, getSubArch()); break; - case Triple::nvptx64: T.setArch(Triple::nvptx); break; - case Triple::ppc64: T.setArch(Triple::ppc); break; - case Triple::ppc64le: T.setArch(Triple::ppcle); break; - case Triple::renderscript64: T.setArch(Triple::renderscript32); break; - case Triple::riscv64: T.setArch(Triple::riscv32); break; + case Triple::nvptx64: + T.setArch(Triple::nvptx); + break; + case Triple::ppc64: + T.setArch(Triple::ppc); + break; + case Triple::ppc64le: + T.setArch(Triple::ppcle); + break; + case Triple::renderscript64: + T.setArch(Triple::renderscript32); + break; + case Triple::riscv64: + T.setArch(Triple::riscv32); + break; case Triple::riscv64be: T.setArch(Triple::riscv32be); break; - case Triple::sparcv9: T.setArch(Triple::sparc); break; - case Triple::spir64: T.setArch(Triple::spir); break; + case Triple::sparcv9: + T.setArch(Triple::sparc); + break; + case Triple::spir64: + T.setArch(Triple::spir); + break; case Triple::spirv: case Triple::spirv64: T.setArch(Triple::spirv32, getSubArch()); break; - case Triple::wasm64: T.setArch(Triple::wasm32); break; - case Triple::x86_64: T.setArch(Triple::x86); break; + case Triple::wasm64: + T.setArch(Triple::wasm32); + break; + case Triple::x86_64: + T.setArch(Triple::x86); + break; } return T; } @@ -1935,6 +2166,7 @@ Triple Triple::get64BitArchVariant() const { case Triple::r600: case Triple::shave: case Triple::sparcel: + case Triple::stakr: case Triple::tce: case Triple::tcele: case Triple::xcore: @@ -1968,36 +2200,70 @@ Triple Triple::get64BitArchVariant() const { // Already 64-bit. break; - case Triple::aarch64_32: T.setArch(Triple::aarch64); break; - case Triple::amdil: T.setArch(Triple::amdil64); break; - case Triple::arm: T.setArch(Triple::aarch64); break; - case Triple::armeb: T.setArch(Triple::aarch64_be); break; - case Triple::hsail: T.setArch(Triple::hsail64); break; - case Triple::loongarch32: T.setArch(Triple::loongarch64); break; + case Triple::aarch64_32: + T.setArch(Triple::aarch64); + break; + case Triple::amdil: + T.setArch(Triple::amdil64); + break; + case Triple::arm: + T.setArch(Triple::aarch64); + break; + case Triple::armeb: + T.setArch(Triple::aarch64_be); + break; + case Triple::hsail: + T.setArch(Triple::hsail64); + break; + case Triple::loongarch32: + T.setArch(Triple::loongarch64); + break; case Triple::mips: T.setArch(Triple::mips64, getSubArch()); break; case Triple::mipsel: T.setArch(Triple::mips64el, getSubArch()); break; - case Triple::nvptx: T.setArch(Triple::nvptx64); break; - case Triple::ppc: T.setArch(Triple::ppc64); break; - case Triple::ppcle: T.setArch(Triple::ppc64le); break; - case Triple::renderscript32: T.setArch(Triple::renderscript64); break; - case Triple::riscv32: T.setArch(Triple::riscv64); break; + case Triple::nvptx: + T.setArch(Triple::nvptx64); + break; + case Triple::ppc: + T.setArch(Triple::ppc64); + break; + case Triple::ppcle: + T.setArch(Triple::ppc64le); + break; + case Triple::renderscript32: + T.setArch(Triple::renderscript64); + break; + case Triple::riscv32: + T.setArch(Triple::riscv64); + break; case Triple::riscv32be: T.setArch(Triple::riscv64be); break; - case Triple::sparc: T.setArch(Triple::sparcv9); break; - case Triple::spir: T.setArch(Triple::spir64); break; + case Triple::sparc: + T.setArch(Triple::sparcv9); + break; + case Triple::spir: + T.setArch(Triple::spir64); + break; case Triple::spirv: case Triple::spirv32: T.setArch(Triple::spirv64, getSubArch()); break; - case Triple::thumb: T.setArch(Triple::aarch64); break; - case Triple::thumbeb: T.setArch(Triple::aarch64_be); break; - case Triple::wasm32: T.setArch(Triple::wasm64); break; - case Triple::x86: T.setArch(Triple::x86_64); break; + case Triple::thumb: + T.setArch(Triple::aarch64); + break; + case Triple::thumbeb: + T.setArch(Triple::aarch64_be); + break; + case Triple::wasm32: + T.setArch(Triple::wasm64); + break; + case Triple::x86: + T.setArch(Triple::x86_64); + break; } return T; } @@ -2032,6 +2298,7 @@ Triple Triple::getBigEndianArchVariant() const { case Triple::spirv: case Triple::spirv32: case Triple::spirv64: + case Triple::stakr: case Triple::wasm32: case Triple::wasm64: case Triple::x86: @@ -2048,24 +2315,36 @@ Triple Triple::getBigEndianArchVariant() const { T.setArch(UnknownArch); break; - case Triple::aarch64: T.setArch(Triple::aarch64_be); break; - case Triple::bpfel: T.setArch(Triple::bpfeb); 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, getSubArch()); break; case Triple::mipsel: T.setArch(Triple::mips, getSubArch()); break; - case Triple::ppcle: T.setArch(Triple::ppc); break; - case Triple::ppc64le: T.setArch(Triple::ppc64); break; + case Triple::ppcle: + T.setArch(Triple::ppc); + break; + case Triple::ppc64le: + T.setArch(Triple::ppc64); + break; case Triple::riscv32: T.setArch(Triple::riscv32be); break; case Triple::riscv64: T.setArch(Triple::riscv64be); break; - case Triple::sparcel: T.setArch(Triple::sparc); break; - case Triple::tcele: T.setArch(Triple::tce); break; + case Triple::sparcel: + T.setArch(Triple::sparc); + break; + case Triple::tcele: + T.setArch(Triple::tce); + break; default: llvm_unreachable("getBigEndianArchVariant: unknown triple."); } @@ -2091,24 +2370,36 @@ 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::aarch64_be: + T.setArch(Triple::aarch64); + break; + case Triple::bpfeb: + T.setArch(Triple::bpfel); + break; case Triple::mips64: T.setArch(Triple::mips64el, getSubArch()); break; case Triple::mips: T.setArch(Triple::mipsel, getSubArch()); break; - case Triple::ppc: T.setArch(Triple::ppcle); break; - case Triple::ppc64: T.setArch(Triple::ppc64le); break; + case Triple::ppc: + T.setArch(Triple::ppcle); + break; + case Triple::ppc64: + T.setArch(Triple::ppc64le); + break; case Triple::riscv32be: T.setArch(Triple::riscv32); break; case Triple::riscv64be: T.setArch(Triple::riscv64); break; - case Triple::sparc: T.setArch(Triple::sparcel); break; - case Triple::tce: T.setArch(Triple::tcele); break; + case Triple::sparc: + T.setArch(Triple::sparcel); + break; + case Triple::tce: + T.setArch(Triple::tcele); + break; default: llvm_unreachable("getLittleEndianArchVariant: unknown triple."); } @@ -2152,6 +2443,7 @@ bool Triple::isLittleEndian() const { case Triple::spirv: case Triple::spirv32: case Triple::spirv64: + case Triple::stakr: case Triple::tcele: case Triple::thumb: case Triple::ve: @@ -2412,8 +2704,7 @@ static_assert(Triple::Vertex - Triple::Pixel == 1, "incorrect HLSL stage order"); static_assert(Triple::Geometry - Triple::Pixel == 2, "incorrect HLSL stage order"); -static_assert(Triple::Hull - Triple::Pixel == 3, - "incorrect HLSL stage order"); +static_assert(Triple::Hull - Triple::Pixel == 3, "incorrect HLSL stage order"); static_assert(Triple::Domain - Triple::Pixel == 4, "incorrect HLSL stage order"); static_assert(Triple::Compute - Triple::Pixel == 5, @@ -2428,11 +2719,9 @@ static_assert(Triple::AnyHit - Triple::Pixel == 9, "incorrect HLSL stage order"); static_assert(Triple::ClosestHit - Triple::Pixel == 10, "incorrect HLSL stage order"); -static_assert(Triple::Miss - Triple::Pixel == 11, - "incorrect HLSL stage order"); +static_assert(Triple::Miss - Triple::Pixel == 11, "incorrect HLSL stage order"); static_assert(Triple::Callable - Triple::Pixel == 12, "incorrect HLSL stage order"); -static_assert(Triple::Mesh - Triple::Pixel == 13, - "incorrect HLSL stage order"); +static_assert(Triple::Mesh - Triple::Pixel == 13, "incorrect HLSL stage order"); static_assert(Triple::Amplification - Triple::Pixel == 14, "incorrect HLSL stage order");