summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/CellSPU/SPUTargetMachine.h
diff options
context:
space:
mode:
authorScott Michel <scottm@aero.org>2007-12-05 01:24:05 +0000
committerScott Michel <scottm@aero.org>2007-12-05 01:24:05 +0000
commiteff980208ae4985e2743a06fc641d33efb351d0a (patch)
tree54a3d6b2a58db25d3dbd4b0b1e9ed9ce95830ef5 /llvm/lib/Target/CellSPU/SPUTargetMachine.h
parent9d43e3d84137a86f9d176101cd97a45b35fbfd04 (diff)
downloadbcm5719-llvm-eff980208ae4985e2743a06fc641d33efb351d0a.tar.gz
bcm5719-llvm-eff980208ae4985e2743a06fc641d33efb351d0a.zip
Main CellSPU backend files checked in. Intrinsics and autoconf files
remain. llvm-svn: 44595
Diffstat (limited to 'llvm/lib/Target/CellSPU/SPUTargetMachine.h')
-rw-r--r--llvm/lib/Target/CellSPU/SPUTargetMachine.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/llvm/lib/Target/CellSPU/SPUTargetMachine.h b/llvm/lib/Target/CellSPU/SPUTargetMachine.h
new file mode 100644
index 00000000000..53a00eaf149
--- /dev/null
+++ b/llvm/lib/Target/CellSPU/SPUTargetMachine.h
@@ -0,0 +1,95 @@
+//===-- SPUTargetMachine.h - Define TargetMachine for Cell SPU ----*- C++ -*-=//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by a team from the Computer Systems Research
+// Department at The Aerospace Corporation.
+//
+// See README.txt for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the CellSPU-specific subclass of TargetMachine.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SPU_TARGETMACHINE_H
+#define SPU_TARGETMACHINE_H
+
+#include "SPUSubtarget.h"
+#include "SPUInstrInfo.h"
+#include "SPUISelLowering.h"
+#include "SPUFrameInfo.h"
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetData.h"
+
+namespace llvm {
+class PassManager;
+class GlobalValue;
+class TargetFrameInfo;
+
+/// SPUTargetMachine
+///
+class SPUTargetMachine : public LLVMTargetMachine {
+ SPUSubtarget Subtarget;
+ const TargetData DataLayout;
+ SPUInstrInfo InstrInfo;
+ SPUFrameInfo FrameInfo;
+ SPUTargetLowering TLInfo;
+ InstrItineraryData InstrItins;
+
+protected:
+ virtual const TargetAsmInfo *createTargetAsmInfo() const;
+
+public:
+ SPUTargetMachine(const Module &M, const std::string &FS);
+
+ /// Return the subtarget implementation object
+ virtual const SPUSubtarget *getSubtargetImpl() const {
+ return &Subtarget;
+ }
+ virtual const SPUInstrInfo *getInstrInfo() const {
+ return &InstrInfo;
+ }
+ virtual const TargetFrameInfo *getFrameInfo() const {
+ return &FrameInfo;
+ }
+ /*!
+ \note Cell SPU does not support JIT today. It could support JIT at some
+ point.
+ */
+ virtual TargetJITInfo *getJITInfo() {
+ return NULL;
+ }
+
+ //! Module match function
+ /*!
+ Module matching function called by TargetMachineRegistry().
+ */
+ static unsigned getModuleMatchQuality(const Module &M);
+
+ virtual SPUTargetLowering *getTargetLowering() const {
+ return const_cast<SPUTargetLowering*>(&TLInfo);
+ }
+
+ virtual const MRegisterInfo *getRegisterInfo() const {
+ return &InstrInfo.getRegisterInfo();
+ }
+
+ virtual const TargetData *getTargetData() const {
+ return &DataLayout;
+ }
+
+ virtual const InstrItineraryData getInstrItineraryData() const {
+ return InstrItins;
+ }
+
+ // Pass Pipeline Configuration
+ virtual bool addInstSelector(FunctionPassManager &PM, bool Fast);
+ virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast,
+ std::ostream &Out);
+};
+
+} // end namespace llvm
+
+#endif
OpenPOWER on IntegriCloud