From: Daniel Dunbar Date: Wed, 15 Jul 2009 09:22:31 +0000 (+0000) Subject: Register Target's TargetMachine and AsmPrinter in the new registry. X-Git-Tag: android-x86-6.0-r1~1003^2~18627 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4246790aa84a530b0378d917023584c2c7adb4a9;p=android-x86%2Fexternal-llvm.git Register Target's TargetMachine and AsmPrinter in the new registry. - This abuses TargetMachineRegistry's constructor for now, this will get cleaned up in time. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75762 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/TargetMachineRegistry.h b/include/llvm/Target/TargetMachineRegistry.h index b7ea448b203..26b20e65cca 100644 --- a/include/llvm/Target/TargetMachineRegistry.h +++ b/include/llvm/Target/TargetMachineRegistry.h @@ -19,6 +19,7 @@ #include "llvm/Module.h" #include "llvm/Support/Registry.h" +#include "llvm/Target/TargetRegistry.h" namespace llvm { class Module; @@ -76,12 +77,13 @@ namespace llvm { template struct RegisterTarget { - RegisterTarget(const char *Name, const char *ShortDesc) + RegisterTarget(Target &T, const char *Name, const char *ShortDesc) : Entry(Name, ShortDesc, &Allocator, &TargetMachineImpl::getModuleMatchQuality, &TargetMachineImpl::getJITMatchQuality), - Node(Entry) - {} + Node(Entry) { + TargetRegistry::RegisterTargetMachine(T, &Allocator); + } private: TargetMachineRegistry::entry Entry; diff --git a/lib/Target/ARM/ARM.h b/lib/Target/ARM/ARM.h index f6ae6806fda..1b5b828395a 100644 --- a/lib/Target/ARM/ARM.h +++ b/lib/Target/ARM/ARM.h @@ -94,7 +94,7 @@ inline static const char *ARMCondCodeToString(ARMCC::CondCodes CC) { FunctionPass *createARMISelDag(ARMBaseTargetMachine &TM); FunctionPass *createARMCodePrinterPass(formatted_raw_ostream &O, - ARMBaseTargetMachine &TM, + TargetMachine &TM, bool Verbose); FunctionPass *createARMCodeEmitterPass(ARMBaseTargetMachine &TM, MachineCodeEmitter &MCE); diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp index 6ebc1fdcd28..bb760fd9a68 100644 --- a/lib/Target/ARM/ARMTargetMachine.cpp +++ b/lib/Target/ARM/ARMTargetMachine.cpp @@ -36,8 +36,11 @@ extern "C" int ARMTargetMachineModule; int ARMTargetMachineModule = 0; // Register the target. -static RegisterTarget X("arm", "ARM"); -static RegisterTarget Y("thumb", "Thumb"); +extern Target TheARMTarget; +static RegisterTarget X(TheARMTarget, "arm", "ARM"); + +extern Target TheThumbTarget; +static RegisterTarget Y(TheThumbTarget, "thumb", "Thumb"); // Force static initialization. extern "C" void LLVMInitializeARMTarget() { } diff --git a/lib/Target/ARM/ARMTargetMachine.h b/lib/Target/ARM/ARMTargetMachine.h index 56b18ae36af..cbf336fa8be 100644 --- a/lib/Target/ARM/ARMTargetMachine.h +++ b/lib/Target/ARM/ARMTargetMachine.h @@ -42,7 +42,7 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - ARMBaseTargetMachine &tm, + TargetMachine &tm, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index de6adbde55a..098f5d32257 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -31,6 +31,7 @@ #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSet.h" @@ -1287,7 +1288,7 @@ bool ARMAsmPrinter::doFinalization(Module &M) { /// regardless of whether the function is in SSA form. /// FunctionPass *llvm::createARMCodePrinterPass(formatted_raw_ostream &o, - ARMBaseTargetMachine &tm, + TargetMachine &tm, bool verbose) { return new ARMAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); } @@ -1301,4 +1302,8 @@ namespace { } // Force static initialization. -extern "C" void LLVMInitializeARMAsmPrinter() { } +extern "C" void LLVMInitializeARMAsmPrinter() { + extern Target TheARMTarget, TheThumbTarget; + TargetRegistry::RegisterAsmPrinter(TheARMTarget, createARMCodePrinterPass); + TargetRegistry::RegisterAsmPrinter(TheThumbTarget, createARMCodePrinterPass); +} diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp index 625d0cea543..8775bb7e8d4 100644 --- a/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -22,7 +22,9 @@ using namespace llvm; // Register the targets -static RegisterTarget X("alpha", "Alpha [experimental]"); +extern Target TheAlphaTarget; +static RegisterTarget X(TheAlphaTarget, "alpha", + "Alpha [experimental]"); // No assembler printer by default AlphaTargetMachine::AsmPrinterCtorFn AlphaTargetMachine::AsmPrinterCtor = 0; diff --git a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp index 21622dbc724..ea810df721b 100644 --- a/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp +++ b/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp @@ -24,6 +24,7 @@ #include "llvm/CodeGen/DwarfWriter.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetMachine.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Mangler.h" @@ -292,9 +293,6 @@ bool AlphaAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, return false; } -// Force static initialization. -extern "C" void LLVMInitializeAlphaAsmPrinter() { } - namespace { static struct Register { Register() { @@ -302,3 +300,10 @@ namespace { } } Registrator; } + +// Force static initialization. +extern "C" void LLVMInitializeAlphaAsmPrinter() { + extern Target TheAlphaTarget; + TargetRegistry::RegisterAsmPrinter(TheAlphaTarget, + createAlphaCodePrinterPass); +} diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index caf91c882ee..1eeee99151c 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -58,7 +58,8 @@ extern "C" int CBackendTargetMachineModule; int CBackendTargetMachineModule = 0; // Register the target. -static RegisterTarget X("c", "C backend"); +extern Target TheCBackendTarget; +static RegisterTarget X(TheCBackendTarget, "c", "C backend"); // Force static initialization. extern "C" void LLVMInitializeCBackendTarget() { } diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp index f0d8a36132b..0c364579137 100644 --- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp +++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp @@ -37,6 +37,7 @@ #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" #include @@ -289,7 +290,7 @@ namespace { class VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter { DwarfWriter *DW; public: - explicit LinuxAsmPrinter(formatted_raw_ostream &O, SPUTargetMachine &TM, + explicit LinuxAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : SPUAsmPrinter(O, TM, T, V), DW(0) {} @@ -599,14 +600,11 @@ bool LinuxAsmPrinter::doFinalization(Module &M) { /// that the Linux SPU assembler can deal with. /// FunctionPass *llvm::createSPUAsmPrinterPass(formatted_raw_ostream &o, - SPUTargetMachine &tm, + TargetMachine &tm, bool verbose) { return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); } -// Force static initialization. -extern "C" void LLVMInitializeCellSPUAsmPrinter() { } - namespace { static struct Register { Register() { @@ -614,3 +612,9 @@ namespace { } } Registrator; } + +// Force static initialization. +extern "C" void LLVMInitializeCellSPUAsmPrinter() { + extern Target TheCellSPUTarget; + TargetRegistry::RegisterAsmPrinter(TheCellSPUTarget, createSPUAsmPrinterPass); +} diff --git a/lib/Target/CellSPU/SPU.h b/lib/Target/CellSPU/SPU.h index 02623486dc7..f76fc82e280 100644 --- a/lib/Target/CellSPU/SPU.h +++ b/lib/Target/CellSPU/SPU.h @@ -25,7 +25,7 @@ namespace llvm { FunctionPass *createSPUISelDag(SPUTargetMachine &TM); FunctionPass *createSPUAsmPrinterPass(formatted_raw_ostream &o, - SPUTargetMachine &tm, + TargetMachine &tm, bool verbose); /*--== Utility functions/predicates/etc used all over the place: --==*/ diff --git a/lib/Target/CellSPU/SPUTargetMachine.cpp b/lib/Target/CellSPU/SPUTargetMachine.cpp index 5c794c9ffa6..29bc705cd42 100644 --- a/lib/Target/CellSPU/SPUTargetMachine.cpp +++ b/lib/Target/CellSPU/SPUTargetMachine.cpp @@ -23,10 +23,11 @@ using namespace llvm; +extern Target TheCellSPUTarget; namespace { // Register the targets RegisterTarget - CELLSPU("cellspu", "STI CBEA Cell SPU [experimental]"); + CELLSPU(TheCellSPUTarget, "cellspu", "STI CBEA Cell SPU [experimental]"); } // No assembler printer by default diff --git a/lib/Target/CellSPU/SPUTargetMachine.h b/lib/Target/CellSPU/SPUTargetMachine.h index ce8e55058ee..83ce9e7c67b 100644 --- a/lib/Target/CellSPU/SPUTargetMachine.h +++ b/lib/Target/CellSPU/SPUTargetMachine.h @@ -42,7 +42,7 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - SPUTargetMachine &tm, + TargetMachine &tm, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp index b2d72dd228c..7b2995f9b02 100644 --- a/lib/Target/CppBackend/CPPBackend.cpp +++ b/lib/Target/CppBackend/CPPBackend.cpp @@ -81,7 +81,8 @@ extern "C" int CppBackendTargetMachineModule; int CppBackendTargetMachineModule = 0; // Register the target. -static RegisterTarget X("cpp", "C++ backend"); +extern Target TheCppBackendTarget; +static RegisterTarget X(TheCppBackendTarget, "cpp", "C++ backend"); // Force static initialization. extern "C" void LLVMInitializeCppBackendTarget() { } diff --git a/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp b/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp index b8aa37ecb70..e5eedad328d 100644 --- a/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp +++ b/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/DwarfWriter.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Target/TargetAsmInfo.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/Mangler.h" @@ -369,7 +370,7 @@ bool IA64AsmPrinter::doFinalization(Module &M) { /// the given target machine description. /// FunctionPass *llvm::createIA64CodePrinterPass(formatted_raw_ostream &o, - IA64TargetMachine &tm, + TargetMachine &tm, bool verbose) { return new IA64AsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); } @@ -384,4 +385,7 @@ namespace { // Force static initialization. -extern "C" void LLVMInitializeIA64AsmPrinter() { } +extern "C" void LLVMInitializeIA64AsmPrinter() { + extern Target TheIA64Target; + TargetRegistry::RegisterAsmPrinter(TheIA64Target, createIA64CodePrinterPass); +} diff --git a/lib/Target/IA64/IA64.h b/lib/Target/IA64/IA64.h index afcbdaf4d11..e45aedaa731 100644 --- a/lib/Target/IA64/IA64.h +++ b/lib/Target/IA64/IA64.h @@ -38,7 +38,7 @@ FunctionPass *createIA64BundlingPass(IA64TargetMachine &TM); /// regardless of whether the function is in SSA form. /// FunctionPass *createIA64CodePrinterPass(formatted_raw_ostream &o, - IA64TargetMachine &tm, + TargetMachine &tm, bool verbose); } // End llvm namespace diff --git a/lib/Target/IA64/IA64TargetMachine.cpp b/lib/Target/IA64/IA64TargetMachine.cpp index 00fdd5e8a65..c75a93c307b 100644 --- a/lib/Target/IA64/IA64TargetMachine.cpp +++ b/lib/Target/IA64/IA64TargetMachine.cpp @@ -20,7 +20,8 @@ using namespace llvm; // Register the target -static RegisterTarget X("ia64", +extern Target TheIA64Target; +static RegisterTarget X(TheIA64Target, "ia64", "IA-64 (Itanium) [experimental]"); // No assembler printer by default diff --git a/lib/Target/IA64/IA64TargetMachine.h b/lib/Target/IA64/IA64TargetMachine.h index 8340052f2c0..6e78848519b 100644 --- a/lib/Target/IA64/IA64TargetMachine.h +++ b/lib/Target/IA64/IA64TargetMachine.h @@ -37,7 +37,7 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - IA64TargetMachine &tm, + TargetMachine &tm, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/MSIL/MSILWriter.cpp b/lib/Target/MSIL/MSILWriter.cpp index 2ae1d4fba28..5cd442c3d05 100644 --- a/lib/Target/MSIL/MSILWriter.cpp +++ b/lib/Target/MSIL/MSILWriter.cpp @@ -55,7 +55,8 @@ namespace { extern "C" int MSILTargetMachineModule; int MSILTargetMachineModule = 0; -static RegisterTarget X("msil", "MSIL backend"); +extern Target TheMSILTarget; +static RegisterTarget X(TheMSILTarget, "msil", "MSIL backend"); // Force static initialization. extern "C" void LLVMInitializeMSILTarget() { } diff --git a/lib/Target/MSP430/MSP430TargetMachine.cpp b/lib/Target/MSP430/MSP430TargetMachine.cpp index 924c7e82d8e..7156c873808 100644 --- a/lib/Target/MSP430/MSP430TargetMachine.cpp +++ b/lib/Target/MSP430/MSP430TargetMachine.cpp @@ -32,8 +32,9 @@ int MSP430TargetMachineModule = 0; // Register the targets +extern Target TheMSP430Target; static RegisterTarget -X("msp430", "MSP430 [experimental]"); +X(TheMSP430Target, "msp430", "MSP430 [experimental]"); // Force static initialization. extern "C" void LLVMInitializeMSP430Target() { } diff --git a/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp b/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp index 719c258647c..501dc6a7aba 100644 --- a/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp @@ -33,6 +33,7 @@ #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Mangler.h" #include "llvm/ADT/Statistic.h" @@ -51,7 +52,7 @@ namespace { class VISIBILITY_HIDDEN MipsAsmPrinter : public AsmPrinter { const MipsSubtarget *Subtarget; public: - explicit MipsAsmPrinter(formatted_raw_ostream &O, MipsTargetMachine &TM, + explicit MipsAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : AsmPrinter(O, TM, T, V) { Subtarget = &TM.getSubtarget(); @@ -92,7 +93,7 @@ namespace { /// using the given target machine description. This should work /// regardless of whether the function is in SSA form. FunctionPass *llvm::createMipsCodePrinterPass(formatted_raw_ostream &o, - MipsTargetMachine &tm, + TargetMachine &tm, bool verbose) { return new MipsAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose); } @@ -584,4 +585,11 @@ namespace { } // Force static initialization. -extern "C" void LLVMInitializeMipsAsmPrinter() { } +extern "C" void LLVMInitializeMipsAsmPrinter() { + extern Target TheMipsTarget; + TargetRegistry::RegisterAsmPrinter(TheMipsTarget, createMipsCodePrinterPass); + + extern Target TheMipselTarget; + TargetRegistry::RegisterAsmPrinter(TheMipselTarget, + createMipsCodePrinterPass); +} diff --git a/lib/Target/Mips/Mips.h b/lib/Target/Mips/Mips.h index c1d6fdda513..1ff34fbcc76 100644 --- a/lib/Target/Mips/Mips.h +++ b/lib/Target/Mips/Mips.h @@ -26,7 +26,7 @@ namespace llvm { FunctionPass *createMipsISelDag(MipsTargetMachine &TM); FunctionPass *createMipsDelaySlotFillerPass(MipsTargetMachine &TM); FunctionPass *createMipsCodePrinterPass(formatted_raw_ostream &OS, - MipsTargetMachine &TM, + TargetMachine &TM, bool Verbose); } // end namespace llvm; diff --git a/lib/Target/Mips/MipsTargetMachine.cpp b/lib/Target/Mips/MipsTargetMachine.cpp index 1e6add4a545..1495c7acb75 100644 --- a/lib/Target/Mips/MipsTargetMachine.cpp +++ b/lib/Target/Mips/MipsTargetMachine.cpp @@ -28,8 +28,12 @@ extern "C" int MipsTargetMachineModule; int MipsTargetMachineModule = 0; // Register the target. -static RegisterTarget X("mips", "Mips"); -static RegisterTarget Y("mipsel", "Mipsel"); +extern Target TheMipsTarget; +static RegisterTarget X(TheMipsTarget, "mips", "Mips"); + +extern Target TheMipselTarget; +static RegisterTarget Y(TheMipselTarget, "mipsel", + "Mipsel"); MipsTargetMachine::AsmPrinterCtorFn MipsTargetMachine::AsmPrinterCtor = 0; diff --git a/lib/Target/Mips/MipsTargetMachine.h b/lib/Target/Mips/MipsTargetMachine.h index 7dd8d2befa0..fa945a5adcc 100644 --- a/lib/Target/Mips/MipsTargetMachine.h +++ b/lib/Target/Mips/MipsTargetMachine.h @@ -38,7 +38,7 @@ namespace llvm { // asmprinter set this functions to ctor pointer at startup time if they are // linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - MipsTargetMachine &tm, + TargetMachine &tm, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/PIC16/PIC16TargetMachine.cpp b/lib/Target/PIC16/PIC16TargetMachine.cpp index 50deab17e50..f3f39561cdd 100644 --- a/lib/Target/PIC16/PIC16TargetMachine.cpp +++ b/lib/Target/PIC16/PIC16TargetMachine.cpp @@ -32,10 +32,13 @@ int PIC16TargetMachineModule = 0; // Register the targets +extern Target ThePIC16Target; static RegisterTarget -X("pic16", "PIC16 14-bit [experimental]."); +X(ThePIC16Target, "pic16", "PIC16 14-bit [experimental]."); + +extern Target TheCooperTarget; static RegisterTarget -Y("cooper", "PIC16 Cooper [experimental]."); +Y(TheCooperTarget, "cooper", "PIC16 Cooper [experimental]."); // Force static initialization. extern "C" void LLVMInitializePIC16Target() { } diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index 7489e49ca58..f568bc1b03c 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -43,6 +43,7 @@ #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSet.h" @@ -317,7 +318,7 @@ namespace { /// PPCLinuxAsmPrinter - PowerPC assembly printer, customized for Linux class VISIBILITY_HIDDEN PPCLinuxAsmPrinter : public PPCAsmPrinter { public: - explicit PPCLinuxAsmPrinter(formatted_raw_ostream &O, PPCTargetMachine &TM, + explicit PPCLinuxAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : PPCAsmPrinter(O, TM, T, V){} @@ -343,7 +344,7 @@ namespace { class VISIBILITY_HIDDEN PPCDarwinAsmPrinter : public PPCAsmPrinter { formatted_raw_ostream &OS; public: - explicit PPCDarwinAsmPrinter(formatted_raw_ostream &O, PPCTargetMachine &TM, + explicit PPCDarwinAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : PPCAsmPrinter(O, TM, T, V), OS(O) {} @@ -1080,7 +1081,7 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) { /// Darwin assembler can deal with. /// FunctionPass *llvm::createPPCAsmPrinterPass(formatted_raw_ostream &o, - PPCTargetMachine &tm, + TargetMachine &tm, bool verbose) { const PPCSubtarget *Subtarget = &tm.getSubtarget(); @@ -1103,4 +1104,10 @@ extern "C" int PowerPCAsmPrinterForceLink; int PowerPCAsmPrinterForceLink = 0; // Force static initialization. -extern "C" void LLVMInitializePowerPCAsmPrinter() { } +extern "C" void LLVMInitializePowerPCAsmPrinter() { + extern Target ThePPC32Target; + TargetRegistry::RegisterAsmPrinter(ThePPC32Target, createPPCAsmPrinterPass); + + extern Target ThePPC64Target; + TargetRegistry::RegisterAsmPrinter(ThePPC64Target, createPPCAsmPrinterPass); +} diff --git a/lib/Target/PowerPC/PPC.h b/lib/Target/PowerPC/PPC.h index 89dc1c131e7..3aa313c73aa 100644 --- a/lib/Target/PowerPC/PPC.h +++ b/lib/Target/PowerPC/PPC.h @@ -30,7 +30,7 @@ namespace llvm { FunctionPass *createPPCBranchSelectionPass(); FunctionPass *createPPCISelDag(PPCTargetMachine &TM); FunctionPass *createPPCAsmPrinterPass(formatted_raw_ostream &OS, - PPCTargetMachine &TM, + TargetMachine &TM, bool Verbose); FunctionPass *createPPCCodeEmitterPass(PPCTargetMachine &TM, MachineCodeEmitter &MCE); diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp index f1adc35786e..cac97e438f1 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -30,10 +30,13 @@ extern "C" int PowerPCTargetMachineModule; int PowerPCTargetMachineModule = 0; // Register the targets +extern Target ThePPC32Target; static RegisterTarget -X("ppc32", "PowerPC 32"); +X(ThePPC32Target, "ppc32", "PowerPC 32"); + +extern Target ThePPC64Target; static RegisterTarget -Y("ppc64", "PowerPC 64"); +Y(ThePPC64Target, "ppc64", "PowerPC 64"); // Force static initialization. extern "C" void LLVMInitializePowerPCTarget() { } diff --git a/lib/Target/PowerPC/PPCTargetMachine.h b/lib/Target/PowerPC/PPCTargetMachine.h index e6f61029f3b..393474c576a 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.h +++ b/lib/Target/PowerPC/PPCTargetMachine.h @@ -45,7 +45,7 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - PPCTargetMachine &tm, + TargetMachine &m, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp index c580285e35f..03735b0f41d 100644 --- a/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp +++ b/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Target/TargetAsmInfo.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/Mangler.h" @@ -359,4 +360,8 @@ namespace { } // Force static initialization. -extern "C" void LLVMInitializeSparcAsmPrinter() { } +extern "C" void LLVMInitializeSparcAsmPrinter() { + extern Target TheSparcTarget; + TargetRegistry::RegisterAsmPrinter(TheSparcTarget, + createSparcCodePrinterPass); +} diff --git a/lib/Target/Sparc/SparcTargetMachine.cpp b/lib/Target/Sparc/SparcTargetMachine.cpp index 66d549797dc..6862b8518a0 100644 --- a/lib/Target/Sparc/SparcTargetMachine.cpp +++ b/lib/Target/Sparc/SparcTargetMachine.cpp @@ -19,7 +19,8 @@ using namespace llvm; // Register the target. -static RegisterTarget X("sparc", "SPARC"); +extern Target TheSparcTarget; +static RegisterTarget X(TheSparcTarget, "sparc", "SPARC"); // No assembler printer by default SparcTargetMachine::AsmPrinterCtorFn SparcTargetMachine::AsmPrinterCtor = 0; diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h index 9721fdcd4b9..b8a25a6bedf 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h @@ -37,7 +37,7 @@ class VISIBILITY_HIDDEN X86ATTAsmPrinter : public AsmPrinter { MCContext *Context; MCStreamer *Streamer; public: - explicit X86ATTAsmPrinter(formatted_raw_ostream &O, X86TargetMachine &TM, + explicit X86ATTAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : AsmPrinter(O, TM, T, V) { Subtarget = &TM.getSubtarget(); diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp index 40b24f338fa..3fad77e8ca6 100644 --- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp @@ -17,6 +17,7 @@ #include "X86ATTAsmPrinter.h" #include "X86IntelAsmPrinter.h" #include "X86Subtarget.h" +#include "llvm/Target/TargetRegistry.h" using namespace llvm; /// createX86CodePrinterPass - Returns a pass that prints the X86 assembly code @@ -24,7 +25,7 @@ using namespace llvm; /// machine description. /// FunctionPass *llvm::createX86CodePrinterPass(formatted_raw_ostream &o, - X86TargetMachine &tm, + TargetMachine &tm, bool verbose) { const X86Subtarget *Subtarget = &tm.getSubtarget(); @@ -45,4 +46,10 @@ extern "C" int X86AsmPrinterForceLink; int X86AsmPrinterForceLink = 0; // Force static initialization. -extern "C" void LLVMInitializeX86AsmPrinter() { } +extern "C" void LLVMInitializeX86AsmPrinter() { + extern Target TheX86_32Target; + TargetRegistry::RegisterAsmPrinter(TheX86_32Target, createX86CodePrinterPass); + + extern Target TheX86_64Target; + TargetRegistry::RegisterAsmPrinter(TheX86_64Target, createX86CodePrinterPass); +} diff --git a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h index 8872869187a..603de3e3736 100644 --- a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h +++ b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h @@ -25,7 +25,7 @@ namespace llvm { struct VISIBILITY_HIDDEN X86IntelAsmPrinter : public AsmPrinter { - explicit X86IntelAsmPrinter(formatted_raw_ostream &O, X86TargetMachine &TM, + explicit X86IntelAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const TargetAsmInfo *T, bool V) : AsmPrinter(O, TM, T, V) {} diff --git a/lib/Target/X86/X86.h b/lib/Target/X86/X86.h index ead4ce1f3f8..457e18ab0f3 100644 --- a/lib/Target/X86/X86.h +++ b/lib/Target/X86/X86.h @@ -47,7 +47,7 @@ FunctionPass *createX87FPRegKillInserterPass(); /// using the given target machine description. /// FunctionPass *createX86CodePrinterPass(formatted_raw_ostream &o, - X86TargetMachine &tm, + TargetMachine &tm, bool Verbose); /// createX86CodeEmitterPass - Return a pass that emits the collected X86 code diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index 344370e71fc..6cd0fc30292 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/lib/Target/X86/X86TargetMachine.cpp @@ -31,13 +31,18 @@ extern "C" int X86TargetMachineModule; int X86TargetMachineModule = 0; // Register the target. +extern Target TheX86_32Target; static RegisterTarget -X("x86", "32-bit X86: Pentium-Pro and above"); +X(TheX86_32Target, "x86", "32-bit X86: Pentium-Pro and above"); + +extern Target TheX86_64Target; static RegisterTarget -Y("x86-64", "64-bit X86: EM64T and AMD64"); +Y(TheX86_64Target, "x86-64", "64-bit X86: EM64T and AMD64"); // Force static initialization. -extern "C" void LLVMInitializeX86Target() { } +extern "C" void LLVMInitializeX86Target() { + +} // No assembler printer by default X86TargetMachine::AsmPrinterCtorFn X86TargetMachine::AsmPrinterCtor = 0; diff --git a/lib/Target/X86/X86TargetMachine.h b/lib/Target/X86/X86TargetMachine.h index ea7a453a1ad..a0602cff5a0 100644 --- a/lib/Target/X86/X86TargetMachine.h +++ b/lib/Target/X86/X86TargetMachine.h @@ -44,7 +44,7 @@ protected: // To avoid having target depend on the asmprinter stuff libraries, asmprinter // set this functions to ctor pointer at startup time if they are linked in. typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o, - X86TargetMachine &tm, + TargetMachine &tm, bool verbose); static AsmPrinterCtorFn AsmPrinterCtor; diff --git a/lib/Target/XCore/XCoreTargetMachine.cpp b/lib/Target/XCore/XCoreTargetMachine.cpp index 42b98753ecf..b64edbe8f69 100644 --- a/lib/Target/XCore/XCoreTargetMachine.cpp +++ b/lib/Target/XCore/XCoreTargetMachine.cpp @@ -26,9 +26,10 @@ using namespace llvm; extern "C" int XCoreTargetMachineModule; int XCoreTargetMachineModule = 0; +extern Target TheXCoreTarget; namespace { // Register the target. - RegisterTarget X("xcore", "XCore"); + RegisterTarget X(TheXCoreTarget, "xcore", "XCore"); } // Force static initialization.