blob: d97307f097016f163cea56af1d6f308363ca823e [file] [log] [blame]
Brian Gaekeca78f492004-01-21 21:13:19 +00001//===-- PowerPCTargetMachine.cpp - Define TargetMachine for PowerPC -------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//
11//===----------------------------------------------------------------------===//
12
13#include "PowerPCTargetMachine.h"
Brian Gaeke03f84a92004-02-02 19:06:36 +000014#include "PowerPC.h"
Brian Gaekeca78f492004-01-21 21:13:19 +000015#include "llvm/Module.h"
16#include "llvm/PassManager.h"
Chris Lattner0cf0c372004-07-11 04:17:10 +000017#include "llvm/Target/TargetOptions.h"
Chris Lattnerd36c9702004-07-11 02:48:49 +000018#include "llvm/Target/TargetMachineRegistry.h"
Brian Gaekeca78f492004-01-21 21:13:19 +000019#include "llvm/CodeGen/MachineFunction.h"
20#include "llvm/CodeGen/Passes.h"
Chris Lattner9a89f372004-02-28 19:53:18 +000021using namespace llvm;
Brian Gaekeca78f492004-01-21 21:13:19 +000022
Chris Lattnerd36c9702004-07-11 02:48:49 +000023namespace {
24 // Register the target.
Chris Lattner71d24aa2004-07-11 03:27:42 +000025 RegisterTarget<PowerPCTargetMachine> X("powerpc", " PowerPC (experimental)");
Chris Lattnerd36c9702004-07-11 02:48:49 +000026}
27
Brian Gaekeca78f492004-01-21 21:13:19 +000028/// PowerPCTargetMachine ctor - Create an ILP32 architecture model
29///
30PowerPCTargetMachine::PowerPCTargetMachine(const Module &M,
31 IntrinsicLowering *IL)
32 : TargetMachine("PowerPC", IL, true, 4, 4, 4, 4, 4),
Chris Lattner32305f72004-06-10 06:19:25 +000033 FrameInfo(TargetFrameInfo::StackGrowsDown, 8, -4), JITInfo(*this) {
Brian Gaekeca78f492004-01-21 21:13:19 +000034}
35
Brian Gaeke03f84a92004-02-02 19:06:36 +000036/// addPassesToEmitAssembly - Add passes to the specified pass manager
37/// to implement a static compiler for this target.
38///
Brian Gaekeca78f492004-01-21 21:13:19 +000039bool PowerPCTargetMachine::addPassesToEmitAssembly(PassManager &PM,
40 std::ostream &Out) {
Brian Gaeke03f84a92004-02-02 19:06:36 +000041 // <insert instruction selector passes here>
42 PM.add(createRegisterAllocator());
43 PM.add(createPrologEpilogCodeInserter());
44 // <insert assembly code output passes here>
Alkis Evlogimenosc81efdc2004-02-15 00:03:15 +000045 PM.add(createMachineCodeDeleter());
Brian Gaeke03f84a92004-02-02 19:06:36 +000046 return true; // change to `return false' when this actually works.
Brian Gaekeca78f492004-01-21 21:13:19 +000047}
48
49/// addPassesToJITCompile - Add passes to the specified pass manager to
Brian Gaeke7b0cd6d2004-01-23 06:35:43 +000050/// implement a fast dynamic compiler for this target.
Brian Gaekeca78f492004-01-21 21:13:19 +000051///
Brian Gaeke7b0cd6d2004-01-23 06:35:43 +000052void PowerPCJITInfo::addPassesToJITCompile(FunctionPassManager &PM) {
Brian Gaeke03f84a92004-02-02 19:06:36 +000053 // <insert instruction selector passes here>
54 PM.add(createRegisterAllocator());
55 PM.add(createPrologEpilogCodeInserter());
Brian Gaekeca78f492004-01-21 21:13:19 +000056}
57