blob: 6af693f11c0abb85de36f64adc27b47d6ee68002 [file] [log] [blame]
Sanjiv Gupta0e687712008-05-13 09:02:57 +00001//===-- PIC16TargetMachine.cpp - Define TargetMachine for PIC16 -----------===//
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 PIC16 target.
11//
12//===----------------------------------------------------------------------===//
13
14#include "PIC16.h"
Sanjiv Gupta0e687712008-05-13 09:02:57 +000015#include "PIC16TargetAsmInfo.h"
Sanjiv Gupta2010b3e2008-05-14 11:31:39 +000016#include "PIC16TargetMachine.h"
Sanjiv Gupta0e687712008-05-13 09:02:57 +000017#include "llvm/PassManager.h"
Sanjiv Guptab1b5ffd2008-11-19 11:00:54 +000018#include "llvm/CodeGen/Passes.h"
Owen Andersone176fc92009-08-13 16:54:39 +000019#include "llvm/Target/TargetAsmInfo.h"
Sanjiv Gupta0e687712008-05-13 09:02:57 +000020
21using namespace llvm;
22
Owen Andersone176fc92009-08-13 16:54:39 +000023// PIC16TargetMachine - Traditional PIC16 Machine.
Daniel Dunbare28039c2009-08-02 23:37:13 +000024PIC16TargetMachine::PIC16TargetMachine(const Target &T, const std::string &TT,
Owen Andersone176fc92009-08-13 16:54:39 +000025 const std::string &FS, bool Cooper)
Chris Lattner0a31d2f2009-08-11 20:42:37 +000026: LLVMTargetMachine(T, TT),
Owen Andersone176fc92009-08-13 16:54:39 +000027 Subtarget(TT, FS, Cooper),
Sanjiv Guptab1b5ffd2008-11-19 11:00:54 +000028 DataLayout("e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8"),
Sanjiv Gupta0e687712008-05-13 09:02:57 +000029 InstrInfo(*this), TLInfo(*this),
30 FrameInfo(TargetFrameInfo::StackGrowsUp, 8, 0) { }
31
Owen Andersone176fc92009-08-13 16:54:39 +000032// CooperTargetMachine - Uses the same PIC16TargetMachine, but makes IsCooper
33// as true.
34CooperTargetMachine::CooperTargetMachine(const Target &T, const std::string &TT,
35 const std::string &FS)
36 : PIC16TargetMachine(T, TT, FS, true) {}
37
Sanjiv Guptab1b5ffd2008-11-19 11:00:54 +000038
Bill Wendlingbe8cc2a2009-04-29 00:15:41 +000039bool PIC16TargetMachine::addInstSelector(PassManagerBase &PM,
Bill Wendling98a366d2009-04-29 23:29:43 +000040 CodeGenOpt::Level OptLevel) {
Sanjiv Gupta0e687712008-05-13 09:02:57 +000041 // Install an instruction selector.
42 PM.add(createPIC16ISelDag(*this));
43 return false;
44}
45
Sanjiv Gupta85019e12009-08-07 05:44:27 +000046bool PIC16TargetMachine::addPreEmitPass(PassManagerBase &PM,
Sanjiv Guptad8d27f42009-05-06 08:02:01 +000047 CodeGenOpt::Level OptLevel) {
48 PM.add(createPIC16MemSelOptimizerPass());
49 return true; // -print-machineinstr should print after this.
50}
51
Sanjiv Guptab1b5ffd2008-11-19 11:00:54 +000052