]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | //===-- MSP430TargetMachine.cpp - Define TargetMachine for MSP430 ---------===// |
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 MSP430 target. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | ||
14 | #include "MSP430TargetMachine.h" | |
15 | #include "MSP430.h" | |
223e47cc LB |
16 | #include "llvm/CodeGen/Passes.h" |
17 | #include "llvm/MC/MCAsmInfo.h" | |
970d7e83 | 18 | #include "llvm/PassManager.h" |
223e47cc LB |
19 | #include "llvm/Support/TargetRegistry.h" |
20 | using namespace llvm; | |
21 | ||
22 | extern "C" void LLVMInitializeMSP430Target() { | |
23 | // Register the target. | |
24 | RegisterTargetMachine<MSP430TargetMachine> X(TheMSP430Target); | |
25 | } | |
26 | ||
27 | MSP430TargetMachine::MSP430TargetMachine(const Target &T, | |
28 | StringRef TT, | |
29 | StringRef CPU, | |
30 | StringRef FS, | |
31 | const TargetOptions &Options, | |
32 | Reloc::Model RM, CodeModel::Model CM, | |
33 | CodeGenOpt::Level OL) | |
34 | : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL), | |
35 | Subtarget(TT, CPU, FS), | |
970d7e83 LB |
36 | // FIXME: Check DataLayout string. |
37 | DL("e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16"), | |
223e47cc LB |
38 | InstrInfo(*this), TLInfo(*this), TSInfo(*this), |
39 | FrameLowering(Subtarget) { } | |
40 | ||
41 | namespace { | |
42 | /// MSP430 Code Generator Pass Configuration Options. | |
43 | class MSP430PassConfig : public TargetPassConfig { | |
44 | public: | |
45 | MSP430PassConfig(MSP430TargetMachine *TM, PassManagerBase &PM) | |
46 | : TargetPassConfig(TM, PM) {} | |
47 | ||
48 | MSP430TargetMachine &getMSP430TargetMachine() const { | |
49 | return getTM<MSP430TargetMachine>(); | |
50 | } | |
51 | ||
52 | virtual bool addInstSelector(); | |
53 | virtual bool addPreEmitPass(); | |
54 | }; | |
55 | } // namespace | |
56 | ||
57 | TargetPassConfig *MSP430TargetMachine::createPassConfig(PassManagerBase &PM) { | |
58 | return new MSP430PassConfig(this, PM); | |
59 | } | |
60 | ||
61 | bool MSP430PassConfig::addInstSelector() { | |
62 | // Install an instruction selector. | |
63 | addPass(createMSP430ISelDag(getMSP430TargetMachine(), getOptLevel())); | |
64 | return false; | |
65 | } | |
66 | ||
67 | bool MSP430PassConfig::addPreEmitPass() { | |
68 | // Must run branch selection immediately preceding the asm printer. | |
69 | addPass(createMSP430BranchSelectionPass()); | |
70 | return false; | |
71 | } |