[llvm-commits] [llvm] r75799 - in /llvm/trunk: include/llvm/Target/ lib/ExecutionEngine/JIT/ lib/Support/ lib/Target/ lib/Target/ARM/ lib/Target/ARM/AsmPrinter/ lib/Target/Alpha/ lib/Target/Alpha/AsmPrinter/ lib/Target/CBackend/ lib/Target/CellSP
Daniel Dunbar
daniel at zuster.org
Wed Jul 15 13:30:53 PDT 2009
Sorry for the breakage, this has now been reapplied. The problem
wasn't actually with any of this stuff, there was just a misspelling
in the llvm-gcc commit, but in a file which only gets built during an
Apple FSF build (install actually).
- Daniel
On Wed, Jul 15, 2009 at 10:27 AM, Stuart Hastings<stuart at apple.com> wrote:
> Author: stuart
> Date: Wed Jul 15 12:27:11 2009
> New Revision: 75799
>
> URL: http://llvm.org/viewvc/llvm-project?rev=75799&view=rev
> Log:
> Revert 75762, 75763, 75766..75769, 75772..75775, 75778, 75780, 75782 to repair broken LLVM-GCC build.
> Will revert 75770 in the llvm-gcc trunk.
>
> Modified:
> llvm/trunk/include/llvm/Target/TargetMachine.h
> llvm/trunk/include/llvm/Target/TargetMachineRegistry.h
> llvm/trunk/include/llvm/Target/TargetRegistry.h
> llvm/trunk/include/llvm/Target/TargetSelect.h
> llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp
> llvm/trunk/lib/Support/TargetRegistry.cpp
> llvm/trunk/lib/Target/ARM/ARM.h
> llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
> llvm/trunk/lib/Target/ARM/ARMTargetMachine.h
> llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
> llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.cpp
> llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.h
> llvm/trunk/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp
> llvm/trunk/lib/Target/CBackend/CBackend.cpp
> llvm/trunk/lib/Target/CBackend/CTargetMachine.h
> llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
> llvm/trunk/lib/Target/CellSPU/SPU.h
> llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.cpp
> llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.h
> llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp
> llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h
> llvm/trunk/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp
> llvm/trunk/lib/Target/IA64/IA64.h
> llvm/trunk/lib/Target/IA64/IA64TargetMachine.cpp
> llvm/trunk/lib/Target/IA64/IA64TargetMachine.h
> llvm/trunk/lib/Target/MSIL/MSILWriter.cpp
> llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp
> llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.h
> llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp
> llvm/trunk/lib/Target/Mips/Mips.h
> llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
> llvm/trunk/lib/Target/Mips/MipsTargetMachine.h
> llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.cpp
> llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.h
> llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
> llvm/trunk/lib/Target/PowerPC/PPC.h
> llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
> llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h
> llvm/trunk/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp
> llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
> llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h
> llvm/trunk/lib/Target/TargetMachine.cpp
> llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
> llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
> llvm/trunk/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
> llvm/trunk/lib/Target/X86/X86.h
> llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> llvm/trunk/lib/Target/X86/X86TargetMachine.h
> llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
> llvm/trunk/lib/Target/XCore/XCoreTargetMachine.h
> llvm/trunk/test/Analysis/PointerTracking/ (props changed)
> llvm/trunk/tools/llc/llc.cpp
> llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> llvm/trunk/tools/lto/LTOModule.cpp
>
> Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -19,7 +19,6 @@
>
> namespace llvm {
>
> -class Target;
> class TargetAsmInfo;
> class TargetData;
> class TargetSubtarget;
> @@ -100,14 +99,11 @@
> TargetMachine(const TargetMachine &); // DO NOT IMPLEMENT
> void operator=(const TargetMachine &); // DO NOT IMPLEMENT
> protected: // Can only create subclasses.
> - TargetMachine(const Target &);
> + TargetMachine();
>
> /// getSubtargetImpl - virtual method implemented by subclasses that returns
> /// a reference to that target's TargetSubtarget-derived member variable.
> virtual const TargetSubtarget *getSubtargetImpl() const { return 0; }
> -
> - /// TheTarget - The Target that this machine was created for.
> - const Target &TheTarget;
>
> /// AsmInfo - Contains target specific asm information.
> ///
> @@ -120,7 +116,18 @@
> public:
> virtual ~TargetMachine();
>
> - const Target &getTarget() const { return TheTarget; }
> + /// getModuleMatchQuality - This static method should be implemented by
> + /// targets to indicate how closely they match the specified module. This is
> + /// used by the LLC tool to determine which target to use when an explicit
> + /// -march option is not specified. If a target returns zero, it will never
> + /// be chosen without an explicit -march option.
> + static unsigned getModuleMatchQuality(const Module &) { return 0; }
> +
> + /// getJITMatchQuality - This static method should be implemented by targets
> + /// that provide JIT capabilities to indicate how suitable they are for
> + /// execution on the current host. If a value of 0 is returned, the target
> + /// will not be used unless an explicit -march option is used.
> + static unsigned getJITMatchQuality() { return 0; }
>
> // Interfaces to the major aspects of target machine information:
> // -- Instruction opcode and operand information
> @@ -301,7 +308,7 @@
> ///
> class LLVMTargetMachine : public TargetMachine {
> protected: // Can only create subclasses.
> - LLVMTargetMachine(const Target &T) : TargetMachine(T) { }
> + LLVMTargetMachine() { }
>
> /// addCommonCodeGenPasses - Add standard LLVM codegen passes used for
> /// both emitting to assembly files or machine code output.
>
> Modified: llvm/trunk/include/llvm/Target/TargetMachineRegistry.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachineRegistry.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetMachineRegistry.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetMachineRegistry.h Wed Jul 15 12:27:11 2009
> @@ -19,21 +19,25 @@
>
> #include "llvm/Module.h"
> #include "llvm/Support/Registry.h"
> -#include "llvm/Target/TargetRegistry.h"
>
> namespace llvm {
> class Module;
> - class Target;
> class TargetMachine;
>
> struct TargetMachineRegistryEntry {
> - const Target &TheTarget;
> const char *Name;
> const char *ShortDesc;
> + TargetMachine *(*CtorFn)(const Module &, const std::string &);
> + unsigned (*ModuleMatchQualityFn)(const Module &M);
> + unsigned (*JITMatchQualityFn)();
>
> public:
> - TargetMachineRegistryEntry(const Target &T, const char *N, const char *SD)
> - : TheTarget(T), Name(N), ShortDesc(SD) {}
> + TargetMachineRegistryEntry(const char *N, const char *SD,
> + TargetMachine *(*CF)(const Module &, const std::string &),
> + unsigned (*MMF)(const Module &M),
> + unsigned (*JMF)())
> + : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF),
> + JITMatchQualityFn(JMF) {}
> };
>
> template<>
> @@ -46,15 +50,24 @@
> };
>
> struct TargetMachineRegistry : public Registry<TargetMachine> {
> + /// getClosestStaticTargetForModule - Given an LLVM module, pick the best
> + /// target that is compatible with the module. If no close target can be
> + /// found, this returns null and sets the Error string to a reason.
> + static const entry *getClosestStaticTargetForModule(const Module &M,
> + std::string &Error);
> +
> + /// getClosestTargetForJIT - Pick the best target that is compatible with
> + /// the current host. If no close target can be found, this returns null
> + /// and sets the Error string to a reason.
> + static const entry *getClosestTargetForJIT(std::string &Error);
>
> };
>
> //===--------------------------------------------------------------------===//
> /// RegisterTarget - This class is used to make targets automatically register
> - /// themselves with the tools they are linked with. Targets should define an
> - /// single global Target instance and register it using the TargetRegistry
> - /// interfaces. Targets must also include a static instance of this class.
> - ///
> + /// themselves with the tool they are linked. Targets should define an
> + /// instance of this and implement the static methods described in the
> + /// TargetMachine comments.
> /// The type 'TargetMachineImpl' should provide a constructor with two
> /// parameters:
> /// - const Module& M: the module that is being compiled:
> @@ -63,19 +76,19 @@
>
> template<class TargetMachineImpl>
> struct RegisterTarget {
> - RegisterTarget(Target &T, const char *Name, const char *ShortDesc)
> - : Entry(T, Name, ShortDesc),
> - Node(Entry) {
> - TargetRegistry::RegisterTargetMachine(T, &Allocator);
> - }
> + RegisterTarget(const char *Name, const char *ShortDesc)
> + : Entry(Name, ShortDesc, &Allocator,
> + &TargetMachineImpl::getModuleMatchQuality,
> + &TargetMachineImpl::getJITMatchQuality),
> + Node(Entry)
> + {}
>
> private:
> TargetMachineRegistry::entry Entry;
> TargetMachineRegistry::node Node;
>
> - static TargetMachine *Allocator(const Target &T, const Module &M,
> - const std::string &FS) {
> - return new TargetMachineImpl(T, M, FS);
> + static TargetMachine *Allocator(const Module &M, const std::string &FS) {
> + return new TargetMachineImpl(M, FS);
> }
> };
>
>
> Modified: llvm/trunk/include/llvm/Target/TargetRegistry.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegistry.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetRegistry.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetRegistry.h Wed Jul 15 12:27:11 2009
> @@ -42,8 +42,7 @@
> typedef unsigned (*ModuleMatchQualityFnTy)(const Module &M);
> typedef unsigned (*JITMatchQualityFnTy)();
>
> - typedef TargetMachine *(*TargetMachineCtorTy)(const Target &,
> - const Module &,
> + typedef TargetMachine *(*TargetMachineCtorTy)(const Module &,
> const std::string &);
> typedef FunctionPass *(*AsmPrinterCtorTy)(formatted_raw_ostream &,
> TargetMachine &,
> @@ -88,22 +87,18 @@
> /// getShortDescription - Get a short description of the target.
> const char *getShortDescription() const { return ShortDesc; }
>
> - /// getJITMatchQuality - Get the quality of this targets match for use as a
> - /// JIT.
> - unsigned getJITMatchQuality() const { return JITMatchQualityFn(); }
> -
> /// createTargetMachine - Create a target specific machine implementation.
> TargetMachine *createTargetMachine(const Module &M,
> - const std::string &Features) const {
> + const std::string &Features) {
> if (!TargetMachineCtorFn)
> return 0;
> - return TargetMachineCtorFn(*this, M, Features);
> + return TargetMachineCtorFn(M, Features);
> }
>
> /// createAsmPrinter - Create a target specific assembly printer pass.
> FunctionPass *createAsmPrinter(formatted_raw_ostream &OS,
> TargetMachine &M,
> - bool Verbose) const {
> + bool Verbose) {
> if (!AsmPrinterCtorFn)
> return 0;
> return AsmPrinterCtorFn(OS, M, Verbose);
> @@ -140,8 +135,7 @@
> /// @name Target Registration
> /// @{
>
> - /// RegisterTarget - Register the given target. Attempts to register a
> - /// target which has already been registered will be ignored.
> + /// RegisterTarget - Register the given target.
> ///
> /// Clients are responsible for ensuring that registration doesn't occur
> /// while another thread is attempting to access the registry. Typically
>
> Modified: llvm/trunk/include/llvm/Target/TargetSelect.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetSelect.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetSelect.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetSelect.h Wed Jul 15 12:27:11 2009
> @@ -58,9 +58,7 @@
> inline bool InitializeNativeTarget() {
> // If we have a native target, initialize it to ensure it is linked in.
> #ifdef LLVM_NATIVE_ARCH
> -#define DoInit2(TARG) \
> - LLVMInitialize ## TARG ## Info (); \
> - LLVMInitialize ## TARG ()
> +#define DoInit2(TARG) LLVMInitialize ## TARG ()
> #define DoInit(T) DoInit2(T)
> DoInit(LLVM_NATIVE_ARCH);
> return false;
>
> Modified: llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/JIT/TargetSelect.cpp Wed Jul 15 12:27:11 2009
> @@ -45,16 +45,16 @@
> JITMemoryManager *JMM,
> CodeGenOpt::Level OptLevel,
> bool AllocateGVsWithCode) {
> - const Target *TheTarget;
> - if (MArch == 0) {
> + const TargetMachineRegistry::entry *TheArch = MArch;
> + if (TheArch == 0) {
> std::string Error;
> - TheTarget = TargetRegistry::getClosestTargetForJIT(Error);
> - if (TheTarget == 0) {
> + TheArch = TargetMachineRegistry::getClosestTargetForJIT(Error);
> + if (TheArch == 0) {
> if (ErrorStr)
> *ErrorStr = Error;
> return 0;
> }
> - } else if (TheTarget->getJITMatchQuality() == 0) {
> + } else if (TheArch->JITMatchQualityFn() == 0) {
> cerr << "WARNING: This target JIT is not designed for the host you are"
> << " running. If bad things happen, please choose a different "
> << "-march switch.\n";
> @@ -71,8 +71,7 @@
> }
>
> // Allocate a target...
> - TargetMachine *Target =
> - TheTarget->createTargetMachine(*MP->getModule(), FeaturesStr);
> + TargetMachine *Target = TheArch->CtorFn(*MP->getModule(), FeaturesStr);
> assert(Target && "Could not allocate target machine!");
>
> // If the target supports JIT code generation, return a new JIT now.
>
> Modified: llvm/trunk/lib/Support/TargetRegistry.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/TargetRegistry.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/TargetRegistry.cpp (original)
> +++ llvm/trunk/lib/Support/TargetRegistry.cpp Wed Jul 15 12:27:11 2009
> @@ -111,13 +111,15 @@
> Target::TripleMatchQualityFnTy TQualityFn,
> Target::ModuleMatchQualityFnTy MQualityFn,
> Target::JITMatchQualityFnTy JITQualityFn) {
> + // Note that we don't require the constructor functions already be defined, in
> + // case a module happens to initialize the optional functionality before the
> + // target.
> + assert(!T.Next && !T.Name && !T.ShortDesc && !T.TripleMatchQualityFn &&
> + !T.ModuleMatchQualityFn && !T.JITMatchQualityFn &&
> + "This Target already registered!");
> +
> assert(Name && ShortDesc && TQualityFn && MQualityFn && JITQualityFn &&
> "Missing required target information!");
> -
> - // Check if this target has already been initialized, we allow this as a
> - // convenience to some clients.
> - if (T.Name)
> - return;
>
> // Add to the list of targets.
> T.Next = FirstTarget;
>
> Modified: llvm/trunk/lib/Target/ARM/ARM.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARM.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARM.h Wed Jul 15 12:27:11 2009
> @@ -94,7 +94,7 @@
>
> FunctionPass *createARMISelDag(ARMBaseTargetMachine &TM);
> FunctionPass *createARMCodePrinterPass(formatted_raw_ostream &O,
> - TargetMachine &TM,
> + ARMBaseTargetMachine &TM,
> bool Verbose);
> FunctionPass *createARMCodeEmitterPass(ARMBaseTargetMachine &TM,
> MachineCodeEmitter &MCE);
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -36,11 +36,8 @@
> int ARMTargetMachineModule = 0;
>
> // Register the target.
> -extern Target TheARMTarget;
> -static RegisterTarget<ARMTargetMachine> X(TheARMTarget, "arm", "ARM");
> -
> -extern Target TheThumbTarget;
> -static RegisterTarget<ThumbTargetMachine> Y(TheThumbTarget, "thumb", "Thumb");
> +static RegisterTarget<ARMTargetMachine> X("arm", "ARM");
> +static RegisterTarget<ThumbTargetMachine> Y("thumb", "Thumb");
>
> // Force static initialization.
> extern "C" void LLVMInitializeARMTarget() { }
> @@ -48,32 +45,57 @@
> // No assembler printer by default
> ARMBaseTargetMachine::AsmPrinterCtorFn ARMBaseTargetMachine::AsmPrinterCtor = 0;
>
> +/// ThumbTargetMachine - Create an Thumb architecture model.
> +///
> +unsigned ThumbTargetMachine::getJITMatchQuality() {
> +#if defined(__thumb__)
> + return 10;
> +#endif
> + return 0;
> +}
> +
> +unsigned ThumbTargetMachine::getModuleMatchQuality(const Module &M) {
> + std::string TT = M.getTargetTriple();
> + // Match thumb-foo-bar, as well as things like thumbv5blah-*
> + if (TT.size() >= 6 &&
> + (TT.substr(0, 6) == "thumb-" || TT.substr(0, 6) == "thumbv"))
> + return 20;
> +
> + // If the target triple is something non-thumb, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::LittleEndian &&
> + M.getPointerSize() == Module::Pointer32)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> /// TargetMachine ctor - Create an ARM architecture model.
> ///
> -ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T,
> - const Module &M,
> +ARMBaseTargetMachine::ARMBaseTargetMachine(const Module &M,
> const std::string &FS,
> bool isThumb)
> - : LLVMTargetMachine(T),
> - Subtarget(M, FS, isThumb),
> + : Subtarget(M, FS, isThumb),
> FrameInfo(Subtarget),
> JITInfo(),
> InstrItins(Subtarget.getInstrItineraryData()) {
> DefRelocModel = getRelocationModel();
> }
>
> -ARMTargetMachine::ARMTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : ARMBaseTargetMachine(T, M, FS, false), InstrInfo(Subtarget),
> +ARMTargetMachine::ARMTargetMachine(const Module &M, const std::string &FS)
> + : ARMBaseTargetMachine(M, FS, false), InstrInfo(Subtarget),
> DataLayout(Subtarget.isAPCS_ABI() ?
> std::string("e-p:32:32-f64:32:32-i64:32:32") :
> std::string("e-p:32:32-f64:64:64-i64:64:64")),
> TLInfo(*this) {
> }
>
> -ThumbTargetMachine::ThumbTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : ARMBaseTargetMachine(T, M, FS, true),
> +ThumbTargetMachine::ThumbTargetMachine(const Module &M, const std::string &FS)
> + : ARMBaseTargetMachine(M, FS, true),
> DataLayout(Subtarget.isAPCS_ABI() ?
> std::string("e-p:32:32-f64:32:32-i64:32:32-"
> "i16:16:32-i8:8:32-i1:8:32-a:0:32") :
> @@ -87,6 +109,32 @@
> InstrInfo = new Thumb1InstrInfo(Subtarget);
> }
>
> +unsigned ARMTargetMachine::getJITMatchQuality() {
> +#if defined(__arm__)
> + return 10;
> +#endif
> + return 0;
> +}
> +
> +unsigned ARMTargetMachine::getModuleMatchQuality(const Module &M) {
> + std::string TT = M.getTargetTriple();
> + // Match arm-foo-bar, as well as things like armv5blah-*
> + if (TT.size() >= 4 &&
> + (TT.substr(0, 4) == "arm-" || TT.substr(0, 4) == "armv"))
> + return 20;
> + // If the target triple is something non-arm, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::LittleEndian &&
> + M.getPointerSize() == Module::Pointer32)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
>
> const TargetAsmInfo *ARMBaseTargetMachine::createTargetAsmInfo() const {
> switch (Subtarget.TargetType) {
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -42,13 +42,12 @@
> // 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,
> - TargetMachine &tm,
> + ARMBaseTargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - ARMBaseTargetMachine(const Target &T, const Module &M, const std::string &FS,
> - bool isThumb);
> + ARMBaseTargetMachine(const Module &M, const std::string &FS, bool isThumb);
>
> virtual const ARMFrameInfo *getFrameInfo() const { return &FrameInfo; }
> virtual ARMJITInfo *getJITInfo() { return &JITInfo; }
> @@ -61,6 +60,9 @@
> AsmPrinterCtor = F;
> }
>
> + static unsigned getModuleMatchQuality(const Module &M);
> + static unsigned getJITMatchQuality();
> +
> virtual const TargetAsmInfo *createTargetAsmInfo() const;
>
> // Pass Pipeline Configuration
> @@ -97,7 +99,7 @@
> const TargetData DataLayout; // Calculates type size & alignment
> ARMTargetLowering TLInfo;
> public:
> - ARMTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + ARMTargetMachine(const Module &M, const std::string &FS);
>
> virtual const ARMRegisterInfo *getRegisterInfo() const {
> return &InstrInfo.getRegisterInfo();
> @@ -123,7 +125,7 @@
> const TargetData DataLayout; // Calculates type size & alignment
> ARMTargetLowering TLInfo;
> public:
> - ThumbTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + ThumbTargetMachine(const Module &M, const std::string &FS);
>
> /// returns either Thumb1RegisterInfo of Thumb2RegisterInfo
> virtual const ARMBaseRegisterInfo *getRegisterInfo() const {
>
> Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -31,7 +31,6 @@
> #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"
> @@ -1288,7 +1287,7 @@
> /// regardless of whether the function is in SSA form.
> ///
> FunctionPass *llvm::createARMCodePrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + ARMBaseTargetMachine &tm,
> bool verbose) {
> return new ARMAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose);
> }
> @@ -1302,8 +1301,4 @@
> }
>
> // Force static initialization.
> -extern "C" void LLVMInitializeARMAsmPrinter() {
> - extern Target TheARMTarget, TheThumbTarget;
> - TargetRegistry::RegisterAsmPrinter(TheARMTarget, createARMCodePrinterPass);
> - TargetRegistry::RegisterAsmPrinter(TheThumbTarget, createARMCodePrinterPass);
> -}
> +extern "C" void LLVMInitializeARMAsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -22,9 +22,7 @@
> using namespace llvm;
>
> // Register the targets
> -extern Target TheAlphaTarget;
> -static RegisterTarget<AlphaTargetMachine> X(TheAlphaTarget, "alpha",
> - "Alpha [experimental]");
> +static RegisterTarget<AlphaTargetMachine> X("alpha", "Alpha [experimental]");
>
> // No assembler printer by default
> AlphaTargetMachine::AsmPrinterCtorFn AlphaTargetMachine::AsmPrinterCtor = 0;
> @@ -36,10 +34,35 @@
> return new AlphaTargetAsmInfo(*this);
> }
>
> -AlphaTargetMachine::AlphaTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : LLVMTargetMachine(T),
> - DataLayout("e-f128:128:128"),
> +unsigned AlphaTargetMachine::getModuleMatchQuality(const Module &M) {
> + // We strongly match "alpha*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 5 && TT[0] == 'a' && TT[1] == 'l' && TT[2] == 'p' &&
> + TT[3] == 'h' && TT[4] == 'a')
> + return 20;
> + // If the target triple is something non-alpha, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::LittleEndian &&
> + M.getPointerSize() == Module::Pointer64)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> +unsigned AlphaTargetMachine::getJITMatchQuality() {
> +#ifdef __alpha
> + return 10;
> +#else
> + return 0;
> +#endif
> +}
> +
> +AlphaTargetMachine::AlphaTargetMachine(const Module &M, const std::string &FS)
> + : DataLayout("e-f128:128:128"),
> FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
> JITInfo(*this),
> Subtarget(M, FS),
>
> Modified: llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/Alpha/AlphaTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -45,7 +45,7 @@
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - AlphaTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + AlphaTargetMachine(const Module &M, const std::string &FS);
>
> virtual const AlphaInstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -61,6 +61,9 @@
> return &JITInfo;
> }
>
> + static unsigned getJITMatchQuality();
> + static unsigned getModuleMatchQuality(const Module &M);
> +
> // Pass Pipeline Configuration
> virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
> virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
>
> Modified: llvm/trunk/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -24,7 +24,6 @@
> #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"
> @@ -293,6 +292,9 @@
> return false;
> }
>
> +// Force static initialization.
> +extern "C" void LLVMInitializeAlphaAsmPrinter() { }
> +
> namespace {
> static struct Register {
> Register() {
> @@ -300,10 +302,3 @@
> }
> } Registrator;
> }
> -
> -// Force static initialization.
> -extern "C" void LLVMInitializeAlphaAsmPrinter() {
> - extern Target TheAlphaTarget;
> - TargetRegistry::RegisterAsmPrinter(TheAlphaTarget,
> - createAlphaCodePrinterPass);
> -}
>
> Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
> +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Wed Jul 15 12:27:11 2009
> @@ -30,10 +30,9 @@
> #include "llvm/CodeGen/Passes.h"
> #include "llvm/CodeGen/IntrinsicLowering.h"
> #include "llvm/Transforms/Scalar.h"
> +#include "llvm/Target/TargetMachineRegistry.h"
> #include "llvm/Target/TargetAsmInfo.h"
> #include "llvm/Target/TargetData.h"
> -#include "llvm/Target/TargetMachineRegistry.h"
> -#include "llvm/Target/TargetRegistry.h"
> #include "llvm/Support/CallSite.h"
> #include "llvm/Support/CFG.h"
> #include "llvm/Support/ErrorHandling.h"
> @@ -59,8 +58,7 @@
> int CBackendTargetMachineModule = 0;
>
> // Register the target.
> -extern Target TheCBackendTarget;
> -static RegisterTarget<CTargetMachine> X(TheCBackendTarget, "c", "C backend");
> +static RegisterTarget<CTargetMachine> X("c", "C backend");
>
> // Force static initialization.
> extern "C" void LLVMInitializeCBackendTarget() { }
> @@ -3188,27 +3186,27 @@
>
> const char *const *table = 0;
>
> - // Grab the translation table from TargetAsmInfo if it exists.
> + //Grab the translation table from TargetAsmInfo if it exists
> if (!TAsm) {
> std::string E;
> - const Target *Match =
> - TargetRegistry::getClosestStaticTargetForModule(*TheModule, E);
> + const TargetMachineRegistry::entry* Match =
> + TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, E);
> if (Match) {
> - // Per platform Target Machines don't exist, so create it;
> - // this must be done only once.
> - const TargetMachine* TM = Match->createTargetMachine(*TheModule, "");
> + //Per platform Target Machines don't exist, so create it
> + // this must be done only once
> + const TargetMachine* TM = Match->CtorFn(*TheModule, "");
> TAsm = TM->getTargetAsmInfo();
> }
> }
> if (TAsm)
> table = TAsm->getAsmCBE();
>
> - // Search the translation table if it exists.
> + //Search the translation table if it exists
> for (int i = 0; table && table[i]; i += 2)
> if (c.Codes[0] == table[i])
> return table[i+1];
>
> - // Default is identity.
> + //default is identity
> return c.Codes[0];
> }
>
>
> Modified: llvm/trunk/lib/Target/CBackend/CTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CBackend/CTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/CBackend/CTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -22,14 +22,18 @@
> struct CTargetMachine : public TargetMachine {
> const TargetData DataLayout; // Calculates type size & alignment
>
> - CTargetMachine(const Target &T, const Module &M, const std::string &FS)
> - : TargetMachine(T), DataLayout(&M) {}
> + CTargetMachine(const Module &M, const std::string &FS)
> + : DataLayout(&M) {}
>
> virtual bool WantsWholeFile() const { return true; }
> virtual bool addPassesToEmitWholeFile(PassManager &PM,
> formatted_raw_ostream &Out,
> CodeGenFileType FileType,
> CodeGenOpt::Level OptLevel);
> +
> + // This class always works, but must be requested explicitly on
> + // llc command line.
> + static unsigned getModuleMatchQuality(const Module &M) { return 0; }
>
> virtual const TargetData *getTargetData() const { return &DataLayout; }
> };
>
> Modified: llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -37,7 +37,6 @@
> #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 <set>
> @@ -290,7 +289,7 @@
> class VISIBILITY_HIDDEN LinuxAsmPrinter : public SPUAsmPrinter {
> DwarfWriter *DW;
> public:
> - explicit LinuxAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit LinuxAsmPrinter(formatted_raw_ostream &O, SPUTargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : SPUAsmPrinter(O, TM, T, V), DW(0) {}
>
> @@ -600,11 +599,14 @@
> /// that the Linux SPU assembler can deal with.
> ///
> FunctionPass *llvm::createSPUAsmPrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + SPUTargetMachine &tm,
> bool verbose) {
> return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose);
> }
>
> +// Force static initialization.
> +extern "C" void LLVMInitializeCellSPUAsmPrinter() { }
> +
> namespace {
> static struct Register {
> Register() {
> @@ -612,9 +614,3 @@
> }
> } Registrator;
> }
> -
> -// Force static initialization.
> -extern "C" void LLVMInitializeCellSPUAsmPrinter() {
> - extern Target TheCellSPUTarget;
> - TargetRegistry::RegisterAsmPrinter(TheCellSPUTarget, createSPUAsmPrinterPass);
> -}
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPU.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPU.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPU.h (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPU.h Wed Jul 15 12:27:11 2009
> @@ -25,7 +25,7 @@
>
> FunctionPass *createSPUISelDag(SPUTargetMachine &TM);
> FunctionPass *createSPUAsmPrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + SPUTargetMachine &tm,
> bool verbose);
>
> /*--== Utility functions/predicates/etc used all over the place: --==*/
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -23,11 +23,10 @@
>
> using namespace llvm;
>
> -extern Target TheCellSPUTarget;
> namespace {
> // Register the targets
> RegisterTarget<SPUTargetMachine>
> - CELLSPU(TheCellSPUTarget, "cellspu", "STI CBEA Cell SPU [experimental]");
> + CELLSPU("cellspu", "STI CBEA Cell SPU [experimental]");
> }
>
> // No assembler printer by default
> @@ -48,10 +47,22 @@
> return new SPULinuxTargetAsmInfo(*this);
> }
>
> -SPUTargetMachine::SPUTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : LLVMTargetMachine(T),
> - Subtarget(*this, M, FS),
> +unsigned
> +SPUTargetMachine::getModuleMatchQuality(const Module &M)
> +{
> + // We strongly match "spu-*" or "cellspu-*".
> + std::string TT = M.getTargetTriple();
> + if ((TT.size() == 3 && std::string(TT.begin(), TT.begin()+3) == "spu")
> + || (TT.size() == 7 && std::string(TT.begin(), TT.begin()+7) == "cellspu")
> + || (TT.size() >= 4 && std::string(TT.begin(), TT.begin()+4) == "spu-")
> + || (TT.size() >= 8 && std::string(TT.begin(), TT.begin()+8) == "cellspu-"))
> + return 20;
> +
> + return 0; // No match at all...
> +}
> +
> +SPUTargetMachine::SPUTargetMachine(const Module &M, const std::string &FS)
> + : Subtarget(*this, M, FS),
> DataLayout(Subtarget.getTargetDataString()),
> InstrInfo(*this),
> FrameInfo(*this),
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -42,12 +42,12 @@
> // 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,
> - TargetMachine &tm,
> + SPUTargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - SPUTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + SPUTargetMachine(const Module &M, const std::string &FS);
>
> /// Return the subtarget implementation object
> virtual const SPUSubtarget *getSubtargetImpl() const {
> @@ -66,6 +66,12 @@
> virtual TargetJITInfo *getJITInfo() {
> return NULL;
> }
> +
> + //! Module match function
> + /*!
> + Module matching function called by TargetMachineRegistry().
> + */
> + static unsigned getModuleMatchQuality(const Module &M);
>
> virtual SPUTargetLowering *getTargetLowering() const {
> return const_cast<SPUTargetLowering*>(&TLInfo);
>
> Modified: llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp (original)
> +++ llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp Wed Jul 15 12:27:11 2009
> @@ -81,8 +81,7 @@
> int CppBackendTargetMachineModule = 0;
>
> // Register the target.
> -extern Target TheCppBackendTarget;
> -static RegisterTarget<CPPTargetMachine> X(TheCppBackendTarget, "cpp", "C++ backend");
> +static RegisterTarget<CPPTargetMachine> X("cpp", "C++ backend");
>
> // Force static initialization.
> extern "C" void LLVMInitializeCppBackendTarget() { }
>
> Modified: llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -24,8 +24,8 @@
> struct CPPTargetMachine : public TargetMachine {
> const TargetData DataLayout; // Calculates type size & alignment
>
> - CPPTargetMachine(const Target &T, const Module &M, const std::string &FS)
> - : TargetMachine(T), DataLayout(&M) {}
> + CPPTargetMachine(const Module &M, const std::string &FS)
> + : DataLayout(&M) {}
>
> virtual bool WantsWholeFile() const { return true; }
> virtual bool addPassesToEmitWholeFile(PassManager &PM,
> @@ -33,6 +33,9 @@
> CodeGenFileType FileType,
> CodeGenOpt::Level OptLevel);
>
> + // This class always works, but shouldn't be the default in most cases.
> + static unsigned getModuleMatchQuality(const Module &M) { return 1; }
> +
> virtual const TargetData *getTargetData() const { return &DataLayout; }
> };
>
>
> Modified: llvm/trunk/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/IA64/AsmPrinter/IA64AsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -26,7 +26,6 @@
> #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"
> @@ -370,7 +369,7 @@
> /// the given target machine description.
> ///
> FunctionPass *llvm::createIA64CodePrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + IA64TargetMachine &tm,
> bool verbose) {
> return new IA64AsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose);
> }
> @@ -385,7 +384,4 @@
>
>
> // Force static initialization.
> -extern "C" void LLVMInitializeIA64AsmPrinter() {
> - extern Target TheIA64Target;
> - TargetRegistry::RegisterAsmPrinter(TheIA64Target, createIA64CodePrinterPass);
> -}
> +extern "C" void LLVMInitializeIA64AsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/IA64/IA64.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/IA64/IA64.h (original)
> +++ llvm/trunk/lib/Target/IA64/IA64.h Wed Jul 15 12:27:11 2009
> @@ -38,7 +38,7 @@
> /// regardless of whether the function is in SSA form.
> ///
> FunctionPass *createIA64CodePrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + IA64TargetMachine &tm,
> bool verbose);
>
> } // End llvm namespace
>
> Modified: llvm/trunk/lib/Target/IA64/IA64TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64TargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/IA64/IA64TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/IA64/IA64TargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -20,8 +20,7 @@
> using namespace llvm;
>
> // Register the target
> -extern Target TheIA64Target;
> -static RegisterTarget<IA64TargetMachine> X(TheIA64Target, "ia64",
> +static RegisterTarget<IA64TargetMachine> X("ia64",
> "IA-64 (Itanium) [experimental]");
>
> // No assembler printer by default
> @@ -34,12 +33,36 @@
> return new IA64TargetAsmInfo(*this);
> }
>
> +unsigned IA64TargetMachine::getModuleMatchQuality(const Module &M) {
> + // we match [iI][aA]*64
> + bool seenIA64=false;
> + std::string TT = M.getTargetTriple();
> +
> + if (TT.size() >= 4) {
> + if( (TT[0]=='i' || TT[0]=='I') &&
> + (TT[1]=='a' || TT[1]=='A') ) {
> + for(unsigned int i=2; i<(TT.size()-1); i++)
> + if(TT[i]=='6' && TT[i+1]=='4')
> + seenIA64=true;
> + }
> +
> + if (seenIA64)
> + return 20; // strong match
> + }
> + // If the target triple is something non-ia64, we don't match.
> + if (!TT.empty()) return 0;
> +
> +#if defined(__ia64__) || defined(__IA64__)
> + return 5;
> +#else
> + return 0;
> +#endif
> +}
> +
> /// IA64TargetMachine ctor - Create an LP64 architecture model
> ///
> -IA64TargetMachine::IA64TargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : LLVMTargetMachine(T),
> - DataLayout("e-f80:128:128"),
> +IA64TargetMachine::IA64TargetMachine(const Module &M, const std::string &FS)
> + : DataLayout("e-f80:128:128"),
> FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
> TLInfo(*this) { // FIXME? check this stuff
> }
>
> Modified: llvm/trunk/lib/Target/IA64/IA64TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/IA64/IA64TargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/IA64/IA64TargetMachine.h (original)
> +++ llvm/trunk/lib/Target/IA64/IA64TargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -37,12 +37,12 @@
> // 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,
> - TargetMachine &tm,
> + IA64TargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - IA64TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + IA64TargetMachine(const Module &M, const std::string &FS);
>
> virtual const IA64InstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -55,6 +55,8 @@
> }
> virtual const TargetData *getTargetData() const { return &DataLayout; }
>
> + static unsigned getModuleMatchQuality(const Module &M);
> +
> // Pass Pipeline Configuration
> virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
> virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
>
> Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSIL/MSILWriter.cpp (original)
> +++ llvm/trunk/lib/Target/MSIL/MSILWriter.cpp Wed Jul 15 12:27:11 2009
> @@ -31,8 +31,8 @@
> struct VISIBILITY_HIDDEN MSILTarget : public TargetMachine {
> const TargetData DataLayout; // Calculates type size & alignment
>
> - MSILTarget(const Target &T, const Module &M, const std::string &FS)
> - : TargetMachine(T), DataLayout(&M) {}
> + MSILTarget(const Module &M, const std::string &FS)
> + : DataLayout(&M) {}
>
> virtual bool WantsWholeFile() const { return true; }
> virtual bool addPassesToEmitWholeFile(PassManager &PM,
> @@ -55,8 +55,7 @@
> extern "C" int MSILTargetMachineModule;
> int MSILTargetMachineModule = 0;
>
> -extern Target TheMSILTarget;
> -static RegisterTarget<MSILTarget> X(TheMSILTarget, "msil", "MSIL backend");
> +static RegisterTarget<MSILTarget> X("msil", "MSIL backend");
>
> // Force static initialization.
> extern "C" void LLVMInitializeMSILTarget() { }
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -32,17 +32,14 @@
>
>
> // Register the targets
> -extern Target TheMSP430Target;
> static RegisterTarget<MSP430TargetMachine>
> -X(TheMSP430Target, "msp430", "MSP430 [experimental]");
> +X("msp430", "MSP430 [experimental]");
>
> // Force static initialization.
> extern "C" void LLVMInitializeMSP430Target() { }
>
> -MSP430TargetMachine::MSP430TargetMachine(const Target &T,
> - const Module &M,
> +MSP430TargetMachine::MSP430TargetMachine(const Module &M,
> const std::string &FS) :
> - LLVMTargetMachine(T),
> Subtarget(*this, M, FS),
> // FIXME: Check TargetData string.
> DataLayout("e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8"),
> @@ -69,3 +66,14 @@
> return false;
> }
>
> +unsigned MSP430TargetMachine::getModuleMatchQuality(const Module &M) {
> + std::string TT = M.getTargetTriple();
> +
> + // We strongly match msp430
> + if (TT.size() >= 6 && TT[0] == 'm' && TT[1] == 's' && TT[2] == 'p' &&
> + TT[3] == '4' && TT[4] == '3' && TT[5] == '0')
> + return 20;
> +
> + return 0;
> +}
> +
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.h (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -41,7 +41,7 @@
> virtual const TargetAsmInfo *createTargetAsmInfo() const;
>
> public:
> - MSP430TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + MSP430TargetMachine(const Module &M, const std::string &FS);
>
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> virtual const MSP430InstrInfo *getInstrInfo() const { return &InstrInfo; }
> @@ -60,6 +60,7 @@
> virtual bool addAssemblyEmitter(PassManagerBase &PM,
> CodeGenOpt::Level OptLevel, bool Verbose,
> formatted_raw_ostream &Out);
> + static unsigned getModuleMatchQuality(const Module &M);
> }; // MSP430TargetMachine.
>
> } // end namespace llvm
>
> Modified: llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -33,7 +33,6 @@
> #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"
> @@ -52,7 +51,7 @@
> class VISIBILITY_HIDDEN MipsAsmPrinter : public AsmPrinter {
> const MipsSubtarget *Subtarget;
> public:
> - explicit MipsAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit MipsAsmPrinter(formatted_raw_ostream &O, MipsTargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : AsmPrinter(O, TM, T, V) {
> Subtarget = &TM.getSubtarget<MipsSubtarget>();
> @@ -93,7 +92,7 @@
> /// 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,
> - TargetMachine &tm,
> + MipsTargetMachine &tm,
> bool verbose) {
> return new MipsAsmPrinter(o, tm, tm.getTargetAsmInfo(), verbose);
> }
> @@ -585,11 +584,4 @@
> }
>
> // Force static initialization.
> -extern "C" void LLVMInitializeMipsAsmPrinter() {
> - extern Target TheMipsTarget;
> - TargetRegistry::RegisterAsmPrinter(TheMipsTarget, createMipsCodePrinterPass);
> -
> - extern Target TheMipselTarget;
> - TargetRegistry::RegisterAsmPrinter(TheMipselTarget,
> - createMipsCodePrinterPass);
> -}
> +extern "C" void LLVMInitializeMipsAsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/Mips/Mips.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/Mips.h (original)
> +++ llvm/trunk/lib/Target/Mips/Mips.h Wed Jul 15 12:27:11 2009
> @@ -26,7 +26,7 @@
> FunctionPass *createMipsISelDag(MipsTargetMachine &TM);
> FunctionPass *createMipsDelaySlotFillerPass(MipsTargetMachine &TM);
> FunctionPass *createMipsCodePrinterPass(formatted_raw_ostream &OS,
> - TargetMachine &TM,
> + MipsTargetMachine &TM,
> bool Verbose);
> } // end namespace llvm;
>
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -28,12 +28,8 @@
> int MipsTargetMachineModule = 0;
>
> // Register the target.
> -extern Target TheMipsTarget;
> -static RegisterTarget<MipsTargetMachine> X(TheMipsTarget, "mips", "Mips");
> -
> -extern Target TheMipselTarget;
> -static RegisterTarget<MipselTargetMachine> Y(TheMipselTarget, "mipsel",
> - "Mipsel");
> +static RegisterTarget<MipsTargetMachine> X("mips", "Mips");
> +static RegisterTarget<MipselTargetMachine> Y("mipsel", "Mipsel");
>
> MipsTargetMachine::AsmPrinterCtorFn MipsTargetMachine::AsmPrinterCtor = 0;
>
> @@ -55,9 +51,7 @@
> // an easier handling.
> // Using CodeModel::Large enables different CALL behavior.
> MipsTargetMachine::
> -MipsTargetMachine(const Target &T, const Module &M, const std::string &FS,
> - bool isLittle=false):
> - LLVMTargetMachine(T),
> +MipsTargetMachine(const Module &M, const std::string &FS, bool isLittle=false):
> Subtarget(*this, M, FS, isLittle),
> DataLayout(isLittle ? std::string("e-p:32:32:32-i8:8:32-i16:16:32") :
> std::string("E-p:32:32:32-i8:8:32-i16:16:32")),
> @@ -76,8 +70,43 @@
> }
>
> MipselTargetMachine::
> -MipselTargetMachine(const Target &T, const Module &M, const std::string &FS) :
> - MipsTargetMachine(T, M, FS, true) {}
> +MipselTargetMachine(const Module &M, const std::string &FS) :
> + MipsTargetMachine(M, FS, true) {}
> +
> +// return 0 and must specify -march to gen MIPS code.
> +unsigned MipsTargetMachine::
> +getModuleMatchQuality(const Module &M)
> +{
> + // We strongly match "mips*-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 5 && std::string(TT.begin(), TT.begin()+5) == "mips-")
> + return 20;
> +
> + if (TT.size() >= 13 && std::string(TT.begin(),
> + TT.begin()+13) == "mipsallegrex-")
> + return 20;
> +
> + return 0;
> +}
> +
> +// return 0 and must specify -march to gen MIPSEL code.
> +unsigned MipselTargetMachine::
> +getModuleMatchQuality(const Module &M)
> +{
> + // We strongly match "mips*el-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 7 && std::string(TT.begin(), TT.begin()+7) == "mipsel-")
> + return 20;
> +
> + if (TT.size() >= 15 && std::string(TT.begin(),
> + TT.begin()+15) == "mipsallegrexel-")
> + return 20;
> +
> + if (TT.size() == 3 && std::string(TT.begin(), TT.begin()+3) == "psp")
> + return 20;
> +
> + return 0;
> +}
>
> // Install an instruction selector pass using
> // the ISelDag to gen Mips code.
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -38,13 +38,12 @@
> // asmprinter set this functions to ctor pointer at startup time if they are
> // linked in.
> typedef FunctionPass *(*AsmPrinterCtorFn)(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + MipsTargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - MipsTargetMachine(const Target &T, const Module &M, const std::string &FS,
> - bool isLittle);
> + MipsTargetMachine(const Module &M, const std::string &FS, bool isLittle);
>
> static void registerAsmPrinter(AsmPrinterCtorFn F) {
> AsmPrinterCtor = F;
> @@ -67,6 +66,8 @@
> return const_cast<MipsTargetLowering*>(&TLInfo);
> }
>
> + static unsigned getModuleMatchQuality(const Module &M);
> +
> // Pass Pipeline Configuration
> virtual bool addInstSelector(PassManagerBase &PM,
> CodeGenOpt::Level OptLevel);
> @@ -81,7 +82,7 @@
> ///
> class MipselTargetMachine : public MipsTargetMachine {
> public:
> - MipselTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + MipselTargetMachine(const Module &M, const std::string &FS);
>
> static unsigned getModuleMatchQuality(const Module &M);
> };
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -32,31 +32,26 @@
>
>
> // Register the targets
> -extern Target ThePIC16Target;
> static RegisterTarget<PIC16TargetMachine>
> -X(ThePIC16Target, "pic16", "PIC16 14-bit [experimental].");
> -
> -extern Target TheCooperTarget;
> +X("pic16", "PIC16 14-bit [experimental].");
> static RegisterTarget<CooperTargetMachine>
> -Y(TheCooperTarget, "cooper", "PIC16 Cooper [experimental].");
> +Y("cooper", "PIC16 Cooper [experimental].");
>
> // Force static initialization.
> extern "C" void LLVMInitializePIC16Target() { }
>
> // PIC16TargetMachine - Traditional PIC16 Machine.
> -PIC16TargetMachine::PIC16TargetMachine(const Target &T, const Module &M,
> - const std::string &FS, bool Cooper)
> -: LLVMTargetMachine(T),
> - Subtarget(M, FS, Cooper),
> +PIC16TargetMachine::PIC16TargetMachine(const Module &M, const std::string &FS,
> + bool Cooper)
> +: Subtarget(M, FS, Cooper),
> DataLayout("e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8"),
> InstrInfo(*this), TLInfo(*this),
> FrameInfo(TargetFrameInfo::StackGrowsUp, 8, 0) { }
>
> // CooperTargetMachine - Uses the same PIC16TargetMachine, but makes IsCooper
> // as true.
> -CooperTargetMachine::CooperTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : PIC16TargetMachine(T, M, FS, true) {}
> +CooperTargetMachine::CooperTargetMachine(const Module &M, const std::string &FS)
> + : PIC16TargetMachine(M, FS, true) {}
>
>
> const TargetAsmInfo *PIC16TargetMachine::createTargetAsmInfo() const {
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.h (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16TargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -41,7 +41,7 @@
> virtual const TargetAsmInfo *createTargetAsmInfo() const;
>
> public:
> - PIC16TargetMachine(const Target &T, const Module &M, const std::string &FS,
> + PIC16TargetMachine(const Module &M, const std::string &FS,
> bool Cooper = false);
>
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -68,7 +68,7 @@
> /// CooperTargetMachine
> class CooperTargetMachine : public PIC16TargetMachine {
> public:
> - CooperTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + CooperTargetMachine(const Module &M, const std::string &FS);
> }; // CooperTargetMachine.
>
> } // end namespace llvm
>
> Modified: llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -43,7 +43,6 @@
> #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"
> @@ -318,7 +317,7 @@
> /// PPCLinuxAsmPrinter - PowerPC assembly printer, customized for Linux
> class VISIBILITY_HIDDEN PPCLinuxAsmPrinter : public PPCAsmPrinter {
> public:
> - explicit PPCLinuxAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit PPCLinuxAsmPrinter(formatted_raw_ostream &O, PPCTargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : PPCAsmPrinter(O, TM, T, V){}
>
> @@ -344,7 +343,7 @@
> class VISIBILITY_HIDDEN PPCDarwinAsmPrinter : public PPCAsmPrinter {
> formatted_raw_ostream &OS;
> public:
> - explicit PPCDarwinAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit PPCDarwinAsmPrinter(formatted_raw_ostream &O, PPCTargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : PPCAsmPrinter(O, TM, T, V), OS(O) {}
>
> @@ -1081,7 +1080,7 @@
> /// Darwin assembler can deal with.
> ///
> FunctionPass *llvm::createPPCAsmPrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + PPCTargetMachine &tm,
> bool verbose) {
> const PPCSubtarget *Subtarget = &tm.getSubtarget<PPCSubtarget>();
>
> @@ -1104,10 +1103,4 @@
> int PowerPCAsmPrinterForceLink = 0;
>
> // Force static initialization.
> -extern "C" void LLVMInitializePowerPCAsmPrinter() {
> - extern Target ThePPC32Target;
> - TargetRegistry::RegisterAsmPrinter(ThePPC32Target, createPPCAsmPrinterPass);
> -
> - extern Target ThePPC64Target;
> - TargetRegistry::RegisterAsmPrinter(ThePPC64Target, createPPCAsmPrinterPass);
> -}
> +extern "C" void LLVMInitializePowerPCAsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPC.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPC.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPC.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPC.h Wed Jul 15 12:27:11 2009
> @@ -30,7 +30,7 @@
> FunctionPass *createPPCBranchSelectionPass();
> FunctionPass *createPPCISelDag(PPCTargetMachine &TM);
> FunctionPass *createPPCAsmPrinterPass(formatted_raw_ostream &OS,
> - TargetMachine &TM,
> + PPCTargetMachine &TM,
> bool Verbose);
> FunctionPass *createPPCCodeEmitterPass(PPCTargetMachine &TM,
> MachineCodeEmitter &MCE);
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -30,13 +30,10 @@
> int PowerPCTargetMachineModule = 0;
>
> // Register the targets
> -extern Target ThePPC32Target;
> static RegisterTarget<PPC32TargetMachine>
> -X(ThePPC32Target, "ppc32", "PowerPC 32");
> -
> -extern Target ThePPC64Target;
> +X("ppc32", "PowerPC 32");
> static RegisterTarget<PPC64TargetMachine>
> -Y(ThePPC64Target, "ppc64", "PowerPC 64");
> +Y("ppc64", "PowerPC 64");
>
> // Force static initialization.
> extern "C" void LLVMInitializePowerPCTarget() { }
> @@ -51,10 +48,60 @@
> return new PPCLinuxTargetAsmInfo(*this);
> }
>
> -PPCTargetMachine::PPCTargetMachine(const Target&T, const Module &M,
> - const std::string &FS, bool is64Bit)
> - : LLVMTargetMachine(T),
> - Subtarget(*this, M, FS, is64Bit),
> +unsigned PPC32TargetMachine::getJITMatchQuality() {
> +#if defined(__POWERPC__) || defined (__ppc__) || defined(_POWER) || defined(__PPC__)
> + if (sizeof(void*) == 4)
> + return 10;
> +#endif
> + return 0;
> +}
> +unsigned PPC64TargetMachine::getJITMatchQuality() {
> +#if defined(__POWERPC__) || defined (__ppc__) || defined(_POWER) || defined(__PPC__)
> + if (sizeof(void*) == 8)
> + return 10;
> +#endif
> + return 0;
> +}
> +
> +unsigned PPC32TargetMachine::getModuleMatchQuality(const Module &M) {
> + // We strongly match "powerpc-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 8 && std::string(TT.begin(), TT.begin()+8) == "powerpc-")
> + return 20;
> +
> + // If the target triple is something non-powerpc, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::BigEndian &&
> + M.getPointerSize() == Module::Pointer32)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> +unsigned PPC64TargetMachine::getModuleMatchQuality(const Module &M) {
> + // We strongly match "powerpc64-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 10 && std::string(TT.begin(), TT.begin()+10) == "powerpc64-")
> + return 20;
> +
> + if (M.getEndianness() == Module::BigEndian &&
> + M.getPointerSize() == Module::Pointer64)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> +
> +PPCTargetMachine::PPCTargetMachine(const Module &M, const std::string &FS,
> + bool is64Bit)
> + : Subtarget(*this, M, FS, is64Bit),
> DataLayout(Subtarget.getTargetDataString()), InstrInfo(*this),
> FrameInfo(*this, is64Bit), JITInfo(*this, is64Bit), TLInfo(*this),
> InstrItins(Subtarget.getInstrItineraryData()), MachOWriterInfo(*this) {
> @@ -71,15 +118,13 @@
> /// groups, which typically degrades performance.
> bool PPCTargetMachine::getEnableTailMergeDefault() const { return false; }
>
> -PPC32TargetMachine::PPC32TargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : PPCTargetMachine(T, M, FS, false) {
> +PPC32TargetMachine::PPC32TargetMachine(const Module &M, const std::string &FS)
> + : PPCTargetMachine(M, FS, false) {
> }
>
>
> -PPC64TargetMachine::PPC64TargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : PPCTargetMachine(T, M, FS, true) {
> +PPC64TargetMachine::PPC64TargetMachine(const Module &M, const std::string &FS)
> + : PPCTargetMachine(M, FS, true) {
> }
>
>
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -45,13 +45,12 @@
> // 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,
> - TargetMachine &m,
> + PPCTargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - PPCTargetMachine(const Target &T, const Module &M, const std::string &FS,
> - bool is64Bit);
> + PPCTargetMachine(const Module &M, const std::string &FS, bool is64Bit);
>
> virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const PPCFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -104,14 +103,20 @@
> ///
> class PPC32TargetMachine : public PPCTargetMachine {
> public:
> - PPC32TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + PPC32TargetMachine(const Module &M, const std::string &FS);
> +
> + static unsigned getJITMatchQuality();
> + static unsigned getModuleMatchQuality(const Module &M);
> };
>
> /// PPC64TargetMachine - PowerPC 64-bit target machine.
> ///
> class PPC64TargetMachine : public PPCTargetMachine {
> public:
> - PPC64TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + PPC64TargetMachine(const Module &M, const std::string &FS);
> +
> + static unsigned getJITMatchQuality();
> + static unsigned getModuleMatchQuality(const Module &M);
> };
>
> } // end namespace llvm
>
> Modified: llvm/trunk/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -26,7 +26,6 @@
> #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"
> @@ -360,8 +359,4 @@
> }
>
> // Force static initialization.
> -extern "C" void LLVMInitializeSparcAsmPrinter() {
> - extern Target TheSparcTarget;
> - TargetRegistry::RegisterAsmPrinter(TheSparcTarget,
> - createSparcCodePrinterPass);
> -}
> +extern "C" void LLVMInitializeSparcAsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -19,8 +19,7 @@
> using namespace llvm;
>
> // Register the target.
> -extern Target TheSparcTarget;
> -static RegisterTarget<SparcTargetMachine> X(TheSparcTarget, "sparc", "SPARC");
> +static RegisterTarget<SparcTargetMachine> X("sparc", "SPARC");
>
> // No assembler printer by default
> SparcTargetMachine::AsmPrinterCtorFn SparcTargetMachine::AsmPrinterCtor = 0;
> @@ -36,14 +35,38 @@
>
> /// SparcTargetMachine ctor - Create an ILP32 architecture model
> ///
> -SparcTargetMachine::SparcTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : LLVMTargetMachine(T),
> - DataLayout("E-p:32:32-f128:128:128"),
> +SparcTargetMachine::SparcTargetMachine(const Module &M, const std::string &FS)
> + : DataLayout("E-p:32:32-f128:128:128"),
> Subtarget(M, FS), TLInfo(*this), InstrInfo(Subtarget),
> FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) {
> }
>
> +unsigned SparcTargetMachine::getModuleMatchQuality(const Module &M) {
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 6 && std::string(TT.begin(), TT.begin()+6) == "sparc-")
> + return 20;
> +
> + // If the target triple is something non-sparc, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::BigEndian &&
> + M.getPointerSize() == Module::Pointer32)
> +#ifdef __sparc__
> + return 20; // BE/32 ==> Prefer sparc on sparc
> +#else
> + return 5; // BE/32 ==> Prefer ppc elsewhere
> +#endif
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> +#if defined(__sparc__)
> + return 10;
> +#else
> + return 0;
> +#endif
> +}
> +
> bool SparcTargetMachine::addInstSelector(PassManagerBase &PM,
> CodeGenOpt::Level OptLevel) {
> PM.add(createSparcISelDag(*this));
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -43,7 +43,7 @@
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - SparcTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + SparcTargetMachine(const Module &M, const std::string &FS);
>
> virtual const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -55,6 +55,7 @@
> return const_cast<SparcTargetLowering*>(&TLInfo);
> }
> virtual const TargetData *getTargetData() const { return &DataLayout; }
> + static unsigned getModuleMatchQuality(const Module &M);
>
> // Pass Pipeline Configuration
> virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
>
> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/TargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -176,8 +176,8 @@
> // TargetMachine Class
> //
>
> -TargetMachine::TargetMachine(const Target &T)
> - : TheTarget(T), AsmInfo(0) {
> +TargetMachine::TargetMachine()
> + : AsmInfo(0) {
> // Typically it will be subtargets that will adjust FloatABIType from Default
> // to Soft or Hard.
> if (UseSoftFloat)
>
> Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h (original)
> +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h Wed Jul 15 12:27:11 2009
> @@ -37,7 +37,7 @@
> MCContext *Context;
> MCStreamer *Streamer;
> public:
> - explicit X86ATTAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit X86ATTAsmPrinter(formatted_raw_ostream &O, X86TargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : AsmPrinter(O, TM, T, V) {
> Subtarget = &TM.getSubtarget<X86Subtarget>();
>
> Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp Wed Jul 15 12:27:11 2009
> @@ -17,7 +17,6 @@
> #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
> @@ -25,7 +24,7 @@
> /// machine description.
> ///
> FunctionPass *llvm::createX86CodePrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + X86TargetMachine &tm,
> bool verbose) {
> const X86Subtarget *Subtarget = &tm.getSubtarget<X86Subtarget>();
>
> @@ -46,10 +45,4 @@
> int X86AsmPrinterForceLink = 0;
>
> // Force static initialization.
> -extern "C" void LLVMInitializeX86AsmPrinter() {
> - extern Target TheX86_32Target;
> - TargetRegistry::RegisterAsmPrinter(TheX86_32Target, createX86CodePrinterPass);
> -
> - extern Target TheX86_64Target;
> - TargetRegistry::RegisterAsmPrinter(TheX86_64Target, createX86CodePrinterPass);
> -}
> +extern "C" void LLVMInitializeX86AsmPrinter() { }
>
> Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h (original)
> +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h Wed Jul 15 12:27:11 2009
> @@ -25,7 +25,7 @@
> namespace llvm {
>
> struct VISIBILITY_HIDDEN X86IntelAsmPrinter : public AsmPrinter {
> - explicit X86IntelAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
> + explicit X86IntelAsmPrinter(formatted_raw_ostream &O, X86TargetMachine &TM,
> const TargetAsmInfo *T, bool V)
> : AsmPrinter(O, TM, T, V) {}
>
>
> Modified: llvm/trunk/lib/Target/X86/X86.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86.h (original)
> +++ llvm/trunk/lib/Target/X86/X86.h Wed Jul 15 12:27:11 2009
> @@ -47,7 +47,7 @@
> /// using the given target machine description.
> ///
> FunctionPass *createX86CodePrinterPass(formatted_raw_ostream &o,
> - TargetMachine &tm,
> + X86TargetMachine &tm,
> bool Verbose);
>
> /// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -31,18 +31,13 @@
> int X86TargetMachineModule = 0;
>
> // Register the target.
> -extern Target TheX86_32Target;
> static RegisterTarget<X86_32TargetMachine>
> -X(TheX86_32Target, "x86", "32-bit X86: Pentium-Pro and above");
> -
> -extern Target TheX86_64Target;
> +X("x86", "32-bit X86: Pentium-Pro and above");
> static RegisterTarget<X86_64TargetMachine>
> -Y(TheX86_64Target, "x86-64", "64-bit X86: EM64T and AMD64");
> +Y("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;
> @@ -66,23 +61,78 @@
> }
> }
>
> -X86_32TargetMachine::X86_32TargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : X86TargetMachine(T, M, FS, false) {
> +unsigned X86_32TargetMachine::getJITMatchQuality() {
> +#if defined(i386) || defined(__i386__) || defined(__x86__) || defined(_M_IX86)
> + return 10;
> +#endif
> + return 0;
> +}
> +
> +unsigned X86_64TargetMachine::getJITMatchQuality() {
> +#if defined(__x86_64__) || defined(_M_AMD64)
> + return 10;
> +#endif
> + return 0;
> +}
> +
> +unsigned X86_32TargetMachine::getModuleMatchQuality(const Module &M) {
> + // We strongly match "i[3-9]86-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 5 && TT[0] == 'i' && TT[2] == '8' && TT[3] == '6' &&
> + TT[4] == '-' && TT[1] - '3' < 6)
> + return 20;
> + // If the target triple is something non-X86, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::LittleEndian &&
> + M.getPointerSize() == Module::Pointer32)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> +unsigned X86_64TargetMachine::getModuleMatchQuality(const Module &M) {
> + // We strongly match "x86_64-*".
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 7 && TT[0] == 'x' && TT[1] == '8' && TT[2] == '6' &&
> + TT[3] == '_' && TT[4] == '6' && TT[5] == '4' && TT[6] == '-')
> + return 20;
> +
> + // We strongly match "amd64-*".
> + if (TT.size() >= 6 && TT[0] == 'a' && TT[1] == 'm' && TT[2] == 'd' &&
> + TT[3] == '6' && TT[4] == '4' && TT[5] == '-')
> + return 20;
> +
> + // If the target triple is something non-X86-64, we don't match.
> + if (!TT.empty()) return 0;
> +
> + if (M.getEndianness() == Module::LittleEndian &&
> + M.getPointerSize() == Module::Pointer64)
> + return 10; // Weak match
> + else if (M.getEndianness() != Module::AnyEndianness ||
> + M.getPointerSize() != Module::AnyPointerSize)
> + return 0; // Match for some other target
> +
> + return getJITMatchQuality()/2;
> +}
> +
> +X86_32TargetMachine::X86_32TargetMachine(const Module &M, const std::string &FS)
> + : X86TargetMachine(M, FS, false) {
> }
>
>
> -X86_64TargetMachine::X86_64TargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : X86TargetMachine(T, M, FS, true) {
> +X86_64TargetMachine::X86_64TargetMachine(const Module &M, const std::string &FS)
> + : X86TargetMachine(M, FS, true) {
> }
>
> /// X86TargetMachine ctor - Create an X86 target.
> ///
> -X86TargetMachine::X86TargetMachine(const Target &T, const Module &M,
> - const std::string &FS, bool is64Bit)
> - : LLVMTargetMachine(T),
> - Subtarget(M, FS, is64Bit),
> +X86TargetMachine::X86TargetMachine(const Module &M, const std::string &FS,
> + bool is64Bit)
> + : Subtarget(M, FS, is64Bit),
> DataLayout(Subtarget.getDataLayout()),
> FrameInfo(TargetFrameInfo::StackGrowsDown,
> Subtarget.getStackAlignment(), Subtarget.is64Bit() ? -8 : -4),
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.h (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -44,13 +44,12 @@
> // 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,
> - TargetMachine &tm,
> + X86TargetMachine &tm,
> bool verbose);
> static AsmPrinterCtorFn AsmPrinterCtor;
>
> public:
> - X86TargetMachine(const Target &T, const Module &M, const std::string &FS,
> - bool is64Bit);
> + X86TargetMachine(const Module &M, const std::string &FS, bool is64Bit);
>
> virtual const X86InstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -67,6 +66,9 @@
> return Subtarget.isTargetELF() ? &ELFWriterInfo : 0;
> }
>
> + static unsigned getModuleMatchQuality(const Module &M);
> + static unsigned getJITMatchQuality();
> +
> static void registerAsmPrinter(AsmPrinterCtorFn F) {
> AsmPrinterCtor = F;
> }
> @@ -99,7 +101,7 @@
> ///
> class X86_32TargetMachine : public X86TargetMachine {
> public:
> - X86_32TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + X86_32TargetMachine(const Module &M, const std::string &FS);
>
> static unsigned getJITMatchQuality();
> static unsigned getModuleMatchQuality(const Module &M);
> @@ -109,7 +111,7 @@
> ///
> class X86_64TargetMachine : public X86TargetMachine {
> public:
> - X86_64TargetMachine(const Target &T, const Module &M, const std::string &FS);
> + X86_64TargetMachine(const Module &M, const std::string &FS);
>
> static unsigned getJITMatchQuality();
> static unsigned getModuleMatchQuality(const Module &M);
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp Wed Jul 15 12:27:11 2009
> @@ -26,10 +26,9 @@
> extern "C" int XCoreTargetMachineModule;
> int XCoreTargetMachineModule = 0;
>
> -extern Target TheXCoreTarget;
> namespace {
> // Register the target.
> - RegisterTarget<XCoreTargetMachine> X(TheXCoreTarget, "xcore", "XCore");
> + RegisterTarget<XCoreTargetMachine> X("xcore", "XCore");
> }
>
> // Force static initialization.
> @@ -41,10 +40,8 @@
>
> /// XCoreTargetMachine ctor - Create an ILP32 architecture model
> ///
> -XCoreTargetMachine::XCoreTargetMachine(const Target &T, const Module &M,
> - const std::string &FS)
> - : LLVMTargetMachine(T),
> - Subtarget(*this, M, FS),
> +XCoreTargetMachine::XCoreTargetMachine(const Module &M, const std::string &FS)
> + : Subtarget(*this, M, FS),
> DataLayout("e-p:32:32:32-a0:0:32-f32:32:32-f64:32:32-i1:8:32-i8:8:32-"
> "i16:16:32-i32:32:32-i64:32:32"),
> InstrInfo(),
> @@ -52,6 +49,15 @@
> TLInfo(*this) {
> }
>
> +unsigned XCoreTargetMachine::getModuleMatchQuality(const Module &M) {
> + std::string TT = M.getTargetTriple();
> + if (TT.size() >= 6 && std::string(TT.begin(), TT.begin()+6) == "xcore-")
> + return 20;
> +
> + // Otherwise we don't match.
> + return 0;
> +}
> +
> bool XCoreTargetMachine::addInstSelector(PassManagerBase &PM,
> CodeGenOpt::Level OptLevel) {
> PM.add(createXCoreISelDag(*this));
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.h?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.h Wed Jul 15 12:27:11 2009
> @@ -36,7 +36,7 @@
> virtual const TargetAsmInfo *createTargetAsmInfo() const;
>
> public:
> - XCoreTargetMachine(const Target &T, const Module &M, const std::string &FS);
> + XCoreTargetMachine(const Module &M, const std::string &FS);
>
> virtual const XCoreInstrInfo *getInstrInfo() const { return &InstrInfo; }
> virtual const XCoreFrameInfo *getFrameInfo() const { return &FrameInfo; }
> @@ -49,6 +49,7 @@
> return &InstrInfo.getRegisterInfo();
> }
> virtual const TargetData *getTargetData() const { return &DataLayout; }
> + static unsigned getModuleMatchQuality(const Module &M);
>
> // Pass Pipeline Configuration
> virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
>
> Propchange: llvm/trunk/test/Analysis/PointerTracking/
>
> ------------------------------------------------------------------------------
> --- svn:ignore (original)
> +++ svn:ignore (removed)
> @@ -1 +0,0 @@
> -Output
>
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Wed Jul 15 12:27:11 2009
> @@ -128,8 +128,7 @@
> return outputFilename;
> }
>
> -static formatted_raw_ostream *GetOutputStream(const char *TargetName,
> - const char *ProgName) {
> +static formatted_raw_ostream *GetOutputStream(const char *ProgName) {
> if (OutputFilename != "") {
> if (OutputFilename == "-")
> return &fouts();
> @@ -170,10 +169,10 @@
> bool Binary = false;
> switch (FileType) {
> case TargetMachine::AssemblyFile:
> - if (TargetName[0] == 'c') {
> - if (TargetName[1] == 0)
> + if (MArch->Name[0] == 'c') {
> + if (MArch->Name[1] == 0)
> OutputFilename += ".cbe.c";
> - else if (TargetName[1] == 'p' && TargetName[2] == 'p')
> + else if (MArch->Name[1] == 'p' && MArch->Name[2] == 'p')
> OutputFilename += ".cpp";
> else
> OutputFilename += ".s";
> @@ -249,13 +248,10 @@
>
> // Allocate target machine. First, check whether the user has
> // explicitly specified an architecture to compile for.
> - const Target *TheTarget;
> - if (MArch) {
> - TheTarget = &MArch->TheTarget;
> - } else {
> + if (MArch == 0) {
> std::string Err;
> - TheTarget = TargetRegistry::getClosestStaticTargetForModule(mod, Err);
> - if (TheTarget == 0) {
> + MArch = TargetMachineRegistry::getClosestStaticTargetForModule(mod, Err);
> + if (MArch == 0) {
> errs() << argv[0] << ": error auto-selecting target for module '"
> << Err << "'. Please use the -march option to explicitly "
> << "pick a target.\n";
> @@ -273,13 +269,12 @@
> FeaturesStr = Features.getString();
> }
>
> - std::auto_ptr<TargetMachine>
> - target(TheTarget->createTargetMachine(mod, FeaturesStr));
> + std::auto_ptr<TargetMachine> target(MArch->CtorFn(mod, FeaturesStr));
> assert(target.get() && "Could not allocate target machine!");
> TargetMachine &Target = *target.get();
>
> // Figure out where we are going to send the output...
> - formatted_raw_ostream *Out = GetOutputStream(TheTarget->getName(), argv[0]);
> + formatted_raw_ostream *Out = GetOutputStream(argv[0]);
> if (Out == 0) return 1;
>
> CodeGenOpt::Level OLvl = CodeGenOpt::Default;
>
> Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Wed Jul 15 12:27:11 2009
> @@ -328,9 +328,9 @@
> if ( _target == NULL ) {
> // create target machine from info for merged modules
> Module* mergedModule = _linker.getModule();
> - const Target *march =
> - TargetRegistry::getClosestStaticTargetForModule(*mergedModule,
> - errMsg);
> + const TargetMachineRegistry::entry* march =
> + TargetMachineRegistry::getClosestStaticTargetForModule(
> + *mergedModule, errMsg);
> if ( march == NULL )
> return true;
>
> @@ -351,7 +351,7 @@
> // construct LTModule, hand over ownership of module and target
> std::string FeatureStr =
> getFeatureString(_linker.getModule()->getTargetTriple().c_str());
> - _target = march->createTargetMachine(*mergedModule, FeatureStr.c_str());
> + _target = march->CtorFn(*mergedModule, FeatureStr.c_str());
> }
> return false;
> }
>
> Modified: llvm/trunk/tools/lto/LTOModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=75799&r1=75798&r2=75799&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/lto/LTOModule.cpp (original)
> +++ llvm/trunk/tools/lto/LTOModule.cpp Wed Jul 15 12:27:11 2009
> @@ -147,15 +147,15 @@
> if ( !m )
> return NULL;
> // find machine architecture for this module
> - const Target* march =
> - TargetRegistry::getClosestStaticTargetForModule(*m, errMsg);
> + const TargetMachineRegistry::entry* march =
> + TargetMachineRegistry::getClosestStaticTargetForModule(*m, errMsg);
>
> if ( march == NULL )
> return NULL;
>
> // construct LTModule, hand over ownership of module and target
> std::string FeatureStr = getFeatureString(m->getTargetTriple().c_str());
> - TargetMachine* target = march->createTargetMachine(*m, FeatureStr);
> + TargetMachine* target = march->CtorFn(*m, FeatureStr);
> return new LTOModule(m.take(), target);
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list