Remove old style hacks to register AsmPrinter into TargetMachine.
[oota-llvm.git] / lib / Target / CellSPU / SPUTargetMachine.cpp
1 //===-- SPUTargetMachine.cpp - Define TargetMachine for Cell SPU ----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Top-level implementation for the Cell SPU target.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "SPU.h"
15 #include "SPURegisterNames.h"
16 #include "SPUTargetAsmInfo.h"
17 #include "SPUTargetMachine.h"
18 #include "llvm/Module.h"
19 #include "llvm/PassManager.h"
20 #include "llvm/Target/TargetMachineRegistry.h"
21 #include "llvm/CodeGen/RegAllocRegistry.h"
22 #include "llvm/CodeGen/SchedulerRegistry.h"
23
24 using namespace llvm;
25
26 extern Target TheCellSPUTarget;
27 namespace {
28   // Register the targets
29   RegisterTarget<SPUTargetMachine>
30   CELLSPU(TheCellSPUTarget, "cellspu", "STI CBEA Cell SPU [experimental]");
31 }
32
33 // Force static initialization.
34 extern "C" void LLVMInitializeCellSPUTarget() { }
35
36 const std::pair<unsigned, int> *
37 SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const {
38   NumEntries = 1;
39   return &LR[0];
40 }
41
42 const TargetAsmInfo *
43 SPUTargetMachine::createTargetAsmInfo() const
44 {
45   return new SPULinuxTargetAsmInfo(*this);
46 }
47
48 SPUTargetMachine::SPUTargetMachine(const Target &T, const Module &M, 
49                                    const std::string &FS)
50   : LLVMTargetMachine(T),
51     Subtarget(*this, M, FS),
52     DataLayout(Subtarget.getTargetDataString()),
53     InstrInfo(*this),
54     FrameInfo(*this),
55     TLInfo(*this),
56     InstrItins(Subtarget.getInstrItineraryData())
57 {
58   // For the time being, use static relocations, since there's really no
59   // support for PIC yet.
60   setRelocationModel(Reloc::Static);
61 }
62
63 //===----------------------------------------------------------------------===//
64 // Pass Pipeline Configuration
65 //===----------------------------------------------------------------------===//
66
67 bool
68 SPUTargetMachine::addInstSelector(PassManagerBase &PM,
69                                   CodeGenOpt::Level OptLevel)
70 {
71   // Install an instruction selector.
72   PM.add(createSPUISelDag(*this));
73   return false;
74 }
75
76 bool SPUTargetMachine::addAssemblyEmitter(PassManagerBase &PM,
77                                           CodeGenOpt::Level OptLevel,
78                                           bool Verbose,
79                                           formatted_raw_ostream &Out) {
80   FunctionPass *Printer = getTarget().createAsmPrinter(Out, *this, Verbose);
81   if (!Printer)
82     llvm_report_error("unable to create assembly printer");
83   PM.add(Printer);
84   return false;
85 }