MSP430TargetMachine.cpp revision 202878
18877Svaleriep//===-- MSP430TargetMachine.cpp - Define TargetMachine for MSP430 ---------===//
210239Svaleriep//
38877Svaleriep//                     The LLVM Compiler Infrastructure
48877Svaleriep//
58877Svaleriep// This file is distributed under the University of Illinois Open Source
68877Svaleriep// License. See LICENSE.TXT for details.
78877Svaleriep//
88877Svaleriep//===----------------------------------------------------------------------===//
98877Svaleriep//
108877Svaleriep// Top-level implementation for the MSP430 target.
118877Svaleriep//
128877Svaleriep//===----------------------------------------------------------------------===//
138877Svaleriep
148877Svaleriep#include "MSP430.h"
158877Svaleriep#include "MSP430MCAsmInfo.h"
168877Svaleriep#include "MSP430TargetMachine.h"
178877Svaleriep#include "llvm/PassManager.h"
188877Svaleriep#include "llvm/CodeGen/Passes.h"
198877Svaleriep#include "llvm/MC/MCAsmInfo.h"
208877Svaleriep#include "llvm/Target/TargetRegistry.h"
218877Svaleriepusing namespace llvm;
228877Svaleriep
238877Svaleriepextern "C" void LLVMInitializeMSP430Target() {
248877Svaleriep  // Register the target.
258877Svaleriep  RegisterTargetMachine<MSP430TargetMachine> X(TheMSP430Target);
2610239Svaleriep  RegisterAsmInfo<MSP430MCAsmInfo> Z(TheMSP430Target);
278877Svaleriep}
288877Svaleriep
298877SvaleriepMSP430TargetMachine::MSP430TargetMachine(const Target &T,
308877Svaleriep                                         const std::string &TT,
318877Svaleriep                                         const std::string &FS) :
328877Svaleriep  LLVMTargetMachine(T, TT),
338877Svaleriep  Subtarget(TT, FS),
348877Svaleriep  // FIXME: Check TargetData string.
358877Svaleriep  DataLayout("e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16"),
368877Svaleriep  InstrInfo(*this), TLInfo(*this),
378877Svaleriep  FrameInfo(TargetFrameInfo::StackGrowsDown, 2, -2) { }
388877Svaleriep
398877Svaleriep
408877Svaleriepbool MSP430TargetMachine::addInstSelector(PassManagerBase &PM,
418877Svaleriep                                          CodeGenOpt::Level OptLevel) {
428877Svaleriep  // Install an instruction selector.
438877Svaleriep  PM.add(createMSP430ISelDag(*this, OptLevel));
448877Svaleriep  return false;
458877Svaleriep}
468877Svaleriep
4710239Svaleriepbool MSP430TargetMachine::addPreEmitPass(PassManagerBase &PM,
488877Svaleriep                                         CodeGenOpt::Level OptLevel) {
498877Svaleriep  // Must run branch selection immediately preceding the asm printer.
508877Svaleriep  PM.add(createMSP430BranchSelectionPass());
518877Svaleriep  return false;
528877Svaleriep}
538877Svaleriep