XCoreTargetMachine.cpp revision 6c05796294a7a0693d96c0c87194b9d5ddf55a94
1//===-- XCoreTargetMachine.cpp - Define TargetMachine for XCore -----------===//
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//
11//===----------------------------------------------------------------------===//
12
13#include "XCoreTargetAsmInfo.h"
14#include "XCoreTargetMachine.h"
15#include "XCore.h"
16#include "llvm/Module.h"
17#include "llvm/PassManager.h"
18#include "llvm/Target/TargetMachineRegistry.h"
19using namespace llvm;
20
21/// XCoreTargetMachineModule - Note that this is used on hosts that
22/// cannot link in a library unless there are references into the
23/// library.  In particular, it seems that it is not possible to get
24/// things to work on Win32 without this.  Though it is unused, do not
25/// remove it.
26extern "C" int XCoreTargetMachineModule;
27int XCoreTargetMachineModule = 0;
28
29extern Target TheXCoreTarget;
30namespace {
31  // Register the target.
32  RegisterTarget<XCoreTargetMachine> X(TheXCoreTarget, "xcore", "XCore");
33}
34
35// Force static initialization.
36extern "C" void LLVMInitializeXCoreTarget() { }
37
38const TargetAsmInfo *XCoreTargetMachine::createTargetAsmInfo() const {
39  return new XCoreTargetAsmInfo(*this);
40}
41
42/// XCoreTargetMachine ctor - Create an ILP32 architecture model
43///
44XCoreTargetMachine::XCoreTargetMachine(const Target &T, const Module &M,
45                                       const std::string &FS)
46  : LLVMTargetMachine(T),
47    Subtarget(*this, M, FS),
48    DataLayout("e-p:32:32:32-a0:0:32-f32:32:32-f64:32:32-i1:8:32-i8:8:32-"
49               "i16:16:32-i32:32:32-i64:32:32"),
50    InstrInfo(),
51    FrameInfo(*this),
52    TLInfo(*this) {
53}
54
55bool XCoreTargetMachine::addInstSelector(PassManagerBase &PM,
56                                         CodeGenOpt::Level OptLevel) {
57  PM.add(createXCoreISelDag(*this));
58  return false;
59}
60
61bool XCoreTargetMachine::addAssemblyEmitter(PassManagerBase &PM,
62                                            CodeGenOpt::Level OptLevel,
63                                            bool Verbose,
64                                            formatted_raw_ostream &Out) {
65  // Output assembly language.
66  PM.add(createXCoreCodePrinterPass(Out, *this, Verbose));
67  return false;
68}
69