Index: include/llvm/Support/TargetRegistry.h =================================================================== --- include/llvm/Support/TargetRegistry.h +++ include/llvm/Support/TargetRegistry.h @@ -187,6 +187,10 @@ /// ShortDesc - A short description of the target. const char *ShortDesc; + /// BackendName - The name of the backend implementation. This must match the + /// name of the 'def X : Target ...' in TableGen. + const char *BackendName; + /// HasJIT - Whether this target supports the JIT. bool HasJIT; @@ -279,6 +283,9 @@ /// getShortDescription - Get a short description of the target. const char *getShortDescription() const { return ShortDesc; } + /// getBackendName - Get the backend name. + const char *getBackendName() const { return BackendName; } + /// @} /// @name Feature Predicates /// @{ @@ -645,10 +652,15 @@ /// @param Name - The target name. This should be a static string. /// @param ShortDesc - A short target description. This should be a static /// string. + /// @param BackendName - The name of the backend. This should be a static + /// string that is the same for all targets that share a backend + /// implementation and must match the name used in the 'def X : Target ...' in + /// TableGen. /// @param ArchMatchFn - The arch match checking function for this target. /// @param HasJIT - Whether the target supports JIT code /// generation. static void RegisterTarget(Target &T, const char *Name, const char *ShortDesc, + const char *BackendName, Target::ArchMatchFnTy ArchMatchFn, bool HasJIT = false); @@ -883,8 +895,10 @@ template struct RegisterTarget { - RegisterTarget(Target &T, const char *Name, const char *Desc) { - TargetRegistry::RegisterTarget(T, Name, Desc, &getArchMatch, HasJIT); + RegisterTarget(Target &T, const char *Name, const char *Desc, + const char *BackendName) { + TargetRegistry::RegisterTarget(T, Name, Desc, BackendName, &getArchMatch, + HasJIT); } static bool getArchMatch(Triple::ArchType Arch) { Index: lib/Support/TargetRegistry.cpp =================================================================== --- lib/Support/TargetRegistry.cpp +++ lib/Support/TargetRegistry.cpp @@ -86,9 +86,9 @@ return &*I; } -void TargetRegistry::RegisterTarget(Target &T, - const char *Name, +void TargetRegistry::RegisterTarget(Target &T, const char *Name, const char *ShortDesc, + const char *BackendName, Target::ArchMatchFnTy ArchMatchFn, bool HasJIT) { assert(Name && ShortDesc && ArchMatchFn && @@ -105,6 +105,7 @@ T.Name = Name; T.ShortDesc = ShortDesc; + T.BackendName = BackendName; T.ArchMatchFn = ArchMatchFn; T.HasJIT = HasJIT; } Index: lib/Target/AArch64/TargetInfo/AArch64TargetInfo.cpp =================================================================== --- lib/Target/AArch64/TargetInfo/AArch64TargetInfo.cpp +++ lib/Target/AArch64/TargetInfo/AArch64TargetInfo.cpp @@ -29,11 +29,11 @@ // Now register the "arm64" name for use with "-march". We don't want it to // take possession of the Triple::aarch64 tag though. TargetRegistry::RegisterTarget(getTheARM64Target(), "arm64", - "ARM64 (little endian)", + "ARM64 (little endian)", "AArch64", [](Triple::ArchType) { return false; }, true); RegisterTarget Z( - getTheAArch64leTarget(), "aarch64", "AArch64 (little endian)"); + getTheAArch64leTarget(), "aarch64", "AArch64 (little endian)", "AArch64"); RegisterTarget W( - getTheAArch64beTarget(), "aarch64_be", "AArch64 (big endian)"); + getTheAArch64beTarget(), "aarch64_be", "AArch64 (big endian)", "AArch64"); } Index: lib/Target/AMDGPU/TargetInfo/AMDGPUTargetInfo.cpp =================================================================== --- lib/Target/AMDGPU/TargetInfo/AMDGPUTargetInfo.cpp +++ lib/Target/AMDGPU/TargetInfo/AMDGPUTargetInfo.cpp @@ -31,7 +31,7 @@ /// \brief Extern function to initialize the targets for the AMDGPU backend extern "C" void LLVMInitializeAMDGPUTargetInfo() { RegisterTarget R600(getTheAMDGPUTarget(), "r600", - "AMD GPUs HD2XXX-HD6XXX"); + "AMD GPUs HD2XXX-HD6XXX", "AMDGPU"); RegisterTarget GCN(getTheGCNTarget(), "amdgcn", - "AMD GCN GPUs"); + "AMD GCN GPUs", "AMDGPU"); } Index: lib/Target/ARM/TargetInfo/ARMTargetInfo.cpp =================================================================== --- lib/Target/ARM/TargetInfo/ARMTargetInfo.cpp +++ lib/Target/ARM/TargetInfo/ARMTargetInfo.cpp @@ -30,12 +30,12 @@ extern "C" void LLVMInitializeARMTargetInfo() { RegisterTarget X(getTheARMLETarget(), "arm", - "ARM"); + "ARM", "ARM"); RegisterTarget Y(getTheARMBETarget(), "armeb", - "ARM (big endian)"); + "ARM (big endian)", "ARM"); RegisterTarget A(getTheThumbLETarget(), - "thumb", "Thumb"); + "thumb", "Thumb", "ARM"); RegisterTarget B( - getTheThumbBETarget(), "thumbeb", "Thumb (big endian)"); + getTheThumbBETarget(), "thumbeb", "Thumb (big endian)", "ARM"); } Index: lib/Target/BPF/TargetInfo/BPFTargetInfo.cpp =================================================================== --- lib/Target/BPF/TargetInfo/BPFTargetInfo.cpp +++ lib/Target/BPF/TargetInfo/BPFTargetInfo.cpp @@ -28,9 +28,10 @@ extern "C" void LLVMInitializeBPFTargetInfo() { TargetRegistry::RegisterTarget(getTheBPFTarget(), "bpf", "BPF (host endian)", - [](Triple::ArchType) { return false; }, true); - RegisterTarget X(getTheBPFleTarget(), "bpfel", - "BPF (little endian)"); + "BPF", [](Triple::ArchType) { return false; }, + true); + RegisterTarget X( + getTheBPFleTarget(), "bpfel", "BPF (little endian)", "BPF"); RegisterTarget Y(getTheBPFbeTarget(), "bpfeb", - "BPF (big endian)"); + "BPF (big endian)", "BPF"); } Index: lib/Target/Hexagon/TargetInfo/HexagonTargetInfo.cpp =================================================================== --- lib/Target/Hexagon/TargetInfo/HexagonTargetInfo.cpp +++ lib/Target/Hexagon/TargetInfo/HexagonTargetInfo.cpp @@ -18,6 +18,6 @@ } extern "C" void LLVMInitializeHexagonTargetInfo() { - RegisterTarget X(getTheHexagonTarget(), - "hexagon", "Hexagon"); + RegisterTarget X( + getTheHexagonTarget(), "hexagon", "Hexagon", "Hexagon"); } Index: lib/Target/Lanai/TargetInfo/LanaiTargetInfo.cpp =================================================================== --- lib/Target/Lanai/TargetInfo/LanaiTargetInfo.cpp +++ lib/Target/Lanai/TargetInfo/LanaiTargetInfo.cpp @@ -21,5 +21,6 @@ } // namespace llvm extern "C" void LLVMInitializeLanaiTargetInfo() { - RegisterTarget X(getTheLanaiTarget(), "lanai", "Lanai"); + RegisterTarget X(getTheLanaiTarget(), "lanai", "Lanai", + "Lanai"); } Index: lib/Target/MSP430/TargetInfo/MSP430TargetInfo.cpp =================================================================== --- lib/Target/MSP430/TargetInfo/MSP430TargetInfo.cpp +++ lib/Target/MSP430/TargetInfo/MSP430TargetInfo.cpp @@ -19,5 +19,5 @@ extern "C" void LLVMInitializeMSP430TargetInfo() { RegisterTarget X(getTheMSP430Target(), "msp430", - "MSP430 [experimental]"); + "MSP430 [experimental]", "MSP430"); } Index: lib/Target/Mips/TargetInfo/MipsTargetInfo.cpp =================================================================== --- lib/Target/Mips/TargetInfo/MipsTargetInfo.cpp +++ lib/Target/Mips/TargetInfo/MipsTargetInfo.cpp @@ -32,17 +32,17 @@ extern "C" void LLVMInitializeMipsTargetInfo() { RegisterTarget - X(getTheMipsTarget(), "mips", "Mips"); + X(getTheMipsTarget(), "mips", "Mips", "Mips"); RegisterTarget - Y(getTheMipselTarget(), "mipsel", "Mipsel"); + Y(getTheMipselTarget(), "mipsel", "Mipsel", "Mips"); RegisterTarget - A(getTheMips64Target(), "mips64", "Mips64 [experimental]"); + A(getTheMips64Target(), "mips64", "Mips64 [experimental]", "Mips"); RegisterTarget - B(getTheMips64elTarget(), "mips64el", "Mips64el [experimental]"); + B(getTheMips64elTarget(), "mips64el", "Mips64el [experimental]", "Mips"); } Index: lib/Target/NVPTX/TargetInfo/NVPTXTargetInfo.cpp =================================================================== --- lib/Target/NVPTX/TargetInfo/NVPTXTargetInfo.cpp +++ lib/Target/NVPTX/TargetInfo/NVPTXTargetInfo.cpp @@ -23,7 +23,7 @@ extern "C" void LLVMInitializeNVPTXTargetInfo() { RegisterTarget X(getTheNVPTXTarget32(), "nvptx", - "NVIDIA PTX 32-bit"); + "NVIDIA PTX 32-bit", "NVPTX"); RegisterTarget Y(getTheNVPTXTarget64(), "nvptx64", - "NVIDIA PTX 64-bit"); + "NVIDIA PTX 64-bit", "NVPTX"); } Index: lib/Target/PowerPC/TargetInfo/PowerPCTargetInfo.cpp =================================================================== --- lib/Target/PowerPC/TargetInfo/PowerPCTargetInfo.cpp +++ lib/Target/PowerPC/TargetInfo/PowerPCTargetInfo.cpp @@ -27,11 +27,11 @@ extern "C" void LLVMInitializePowerPCTargetInfo() { RegisterTarget X(getThePPC32Target(), "ppc32", - "PowerPC 32"); + "PowerPC 32", "PPC"); RegisterTarget Y(getThePPC64Target(), "ppc64", - "PowerPC 64"); + "PowerPC 64", "PPC"); RegisterTarget Z( - getThePPC64LETarget(), "ppc64le", "PowerPC 64 LE"); + getThePPC64LETarget(), "ppc64le", "PowerPC 64 LE", "PPC"); } Index: lib/Target/Sparc/TargetInfo/SparcTargetInfo.cpp =================================================================== --- lib/Target/Sparc/TargetInfo/SparcTargetInfo.cpp +++ lib/Target/Sparc/TargetInfo/SparcTargetInfo.cpp @@ -27,9 +27,9 @@ extern "C" void LLVMInitializeSparcTargetInfo() { RegisterTarget X(getTheSparcTarget(), "sparc", - "Sparc"); - RegisterTarget Y(getTheSparcV9Target(), - "sparcv9", "Sparc V9"); - RegisterTarget Z(getTheSparcelTarget(), - "sparcel", "Sparc LE"); + "Sparc", "Sparc"); + RegisterTarget Y( + getTheSparcV9Target(), "sparcv9", "Sparc V9", "Sparc"); + RegisterTarget Z( + getTheSparcelTarget(), "sparcel", "Sparc LE", "Sparc"); } Index: lib/Target/SystemZ/TargetInfo/SystemZTargetInfo.cpp =================================================================== --- lib/Target/SystemZ/TargetInfo/SystemZTargetInfo.cpp +++ lib/Target/SystemZ/TargetInfo/SystemZTargetInfo.cpp @@ -18,6 +18,6 @@ } extern "C" void LLVMInitializeSystemZTargetInfo() { - RegisterTarget X(getTheSystemZTarget(), - "systemz", "SystemZ"); + RegisterTarget X( + getTheSystemZTarget(), "systemz", "SystemZ", "SystemZ"); } Index: lib/Target/X86/TargetInfo/X86TargetInfo.cpp =================================================================== --- lib/Target/X86/TargetInfo/X86TargetInfo.cpp +++ lib/Target/X86/TargetInfo/X86TargetInfo.cpp @@ -22,8 +22,8 @@ extern "C" void LLVMInitializeX86TargetInfo() { RegisterTarget X( - getTheX86_32Target(), "x86", "32-bit X86: Pentium-Pro and above"); + getTheX86_32Target(), "x86", "32-bit X86: Pentium-Pro and above", "X86"); RegisterTarget Y( - getTheX86_64Target(), "x86-64", "64-bit X86: EM64T and AMD64"); + getTheX86_64Target(), "x86-64", "64-bit X86: EM64T and AMD64", "X86"); } Index: lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp =================================================================== --- lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp +++ lib/Target/XCore/TargetInfo/XCoreTargetInfo.cpp @@ -18,5 +18,6 @@ } extern "C" void LLVMInitializeXCoreTargetInfo() { - RegisterTarget X(getTheXCoreTarget(), "xcore", "XCore"); + RegisterTarget X(getTheXCoreTarget(), "xcore", "XCore", + "XCore"); }