X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FPowerPC%2FPPCTargetMachine.h;h=9bda22a354dd3f3b36f72788fec75b414c499221;hp=650f5cb0cc3af267d301a623e72bf57f1718b44f;hb=aa5b9c0f6f3a99f955fe0ded13d61d7eb4e1a0b5;hpb=1c284ac5ec72c86b9ed787b3f4e1a6978c919370 diff --git a/lib/Target/PowerPC/PPCTargetMachine.h b/lib/Target/PowerPC/PPCTargetMachine.h index 650f5cb0cc3..9bda22a354d 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.h +++ b/lib/Target/PowerPC/PPCTargetMachine.h @@ -1,42 +1,68 @@ -//===-- PPC32TargetMachine.h - PowerPC/Darwin TargetMachine ---*- C++ -*-=// -// +//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC ---*- C++ -*-===// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// -// -// This file declares the PowerPC/Darwin specific subclass of TargetMachine. +// +// This file declares the PowerPC specific subclass of TargetMachine. // //===----------------------------------------------------------------------===// -#ifndef POWERPC_DARWIN_TARGETMACHINE_H -#define POWERPC_DARWIN_TARGETMACHINE_H +#ifndef PPC_TARGETMACHINE_H +#define PPC_TARGETMACHINE_H +#include "PPCInstrInfo.h" +#include "PPCSubtarget.h" +#include "llvm/IR/DataLayout.h" #include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetFrameInfo.h" -#include "llvm/PassManager.h" -#include "PowerPCTargetMachine.h" namespace llvm { -class IntrinsicLowering; +/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. +/// +class PPCTargetMachine : public LLVMTargetMachine { + PPCSubtarget Subtarget; + +public: + PPCTargetMachine(const Target &T, StringRef TT, + StringRef CPU, StringRef FS, const TargetOptions &Options, + Reloc::Model RM, CodeModel::Model CM, + CodeGenOpt::Level OL, bool is64Bit); + + const PPCSubtarget *getSubtargetImpl() const override { return &Subtarget; } + + // Pass Pipeline Configuration + TargetPassConfig *createPassConfig(PassManagerBase &PM) override; + bool addCodeEmitter(PassManagerBase &PM, + JITCodeEmitter &JCE) override; + + /// \brief Register PPC analysis passes with a pass manager. + void addAnalysisPasses(PassManagerBase &PM) override; +}; + +/// PPC32TargetMachine - PowerPC 32-bit target machine. +/// +class PPC32TargetMachine : public PPCTargetMachine { + virtual void anchor(); +public: + PPC32TargetMachine(const Target &T, StringRef TT, + StringRef CPU, StringRef FS, const TargetOptions &Options, + Reloc::Model RM, CodeModel::Model CM, + CodeGenOpt::Level OL); +}; -class PPC32TargetMachine : public PowerPCTargetMachine { +/// PPC64TargetMachine - PowerPC 64-bit target machine. +/// +class PPC64TargetMachine : public PPCTargetMachine { + virtual void anchor(); public: - PPC32TargetMachine(const Module &M, IntrinsicLowering *IL); - - /// addPassesToEmitMachineCode - Add passes to the specified pass manager to - /// get machine code emitted. This uses a MachineCodeEmitter object to handle - /// actually outputting the machine code and resolving things like the address - /// of functions. This method should returns true if machine code emission is - /// not supported. - /// - virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM, - MachineCodeEmitter &MCE); - - static unsigned getModuleMatchQuality(const Module &M); + PPC64TargetMachine(const Target &T, StringRef TT, + StringRef CPU, StringRef FS, const TargetOptions &Options, + Reloc::Model RM, CodeModel::Model CM, + CodeGenOpt::Level OL); }; } // end namespace llvm