OLD | NEW |
1 //===-- NVPTXTargetMachine.cpp - Define TargetMachine for NVPTX -----------===// | 1 //===-- NVPTXTargetMachine.cpp - Define TargetMachine for NVPTX -----------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // Top-level implementation for the NVPTX target. | 10 // Top-level implementation for the NVPTX target. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 #include "llvm/Target/TargetMachine.h" | 42 #include "llvm/Target/TargetMachine.h" |
43 #include "llvm/Target/TargetOptions.h" | 43 #include "llvm/Target/TargetOptions.h" |
44 #include "llvm/Target/TargetRegisterInfo.h" | 44 #include "llvm/Target/TargetRegisterInfo.h" |
45 #include "llvm/Target/TargetSubtargetInfo.h" | 45 #include "llvm/Target/TargetSubtargetInfo.h" |
46 #include "llvm/Transforms/Scalar.h" | 46 #include "llvm/Transforms/Scalar.h" |
47 | 47 |
48 using namespace llvm; | 48 using namespace llvm; |
49 | 49 |
50 namespace llvm { | 50 namespace llvm { |
51 void initializeNVVMReflectPass(PassRegistry&); | 51 void initializeNVVMReflectPass(PassRegistry&); |
52 void initializeGenericToNVVMPass(PassRegistry&); | |
53 } | 52 } |
54 | 53 |
55 extern "C" void LLVMInitializeNVPTXTarget() { | 54 extern "C" void LLVMInitializeNVPTXTarget() { |
56 // Register the target. | 55 // Register the target. |
57 RegisterTargetMachine<NVPTXTargetMachine32> X(TheNVPTXTarget32); | 56 RegisterTargetMachine<NVPTXTargetMachine32> X(TheNVPTXTarget32); |
58 RegisterTargetMachine<NVPTXTargetMachine64> Y(TheNVPTXTarget64); | 57 RegisterTargetMachine<NVPTXTargetMachine64> Y(TheNVPTXTarget64); |
59 | 58 |
60 RegisterMCAsmInfo<NVPTXMCAsmInfo> A(TheNVPTXTarget32); | 59 RegisterMCAsmInfo<NVPTXMCAsmInfo> A(TheNVPTXTarget32); |
61 RegisterMCAsmInfo<NVPTXMCAsmInfo> B(TheNVPTXTarget64); | 60 RegisterMCAsmInfo<NVPTXMCAsmInfo> B(TheNVPTXTarget64); |
62 | 61 |
63 // FIXME: This pass is really intended to be invoked during IR optimization, | 62 // FIXME: This pass is really intended to be invoked during IR optimization, |
64 // but it's very NVPTX-specific. | 63 // but it's very NVPTX-specific. |
65 initializeNVVMReflectPass(*PassRegistry::getPassRegistry()); | 64 initializeNVVMReflectPass(*PassRegistry::getPassRegistry()); |
66 initializeGenericToNVVMPass(*PassRegistry::getPassRegistry()); | |
67 } | 65 } |
68 | 66 |
69 NVPTXTargetMachine::NVPTXTargetMachine( | 67 NVPTXTargetMachine::NVPTXTargetMachine( |
70 const Target &T, StringRef TT, StringRef CPU, StringRef FS, | 68 const Target &T, StringRef TT, StringRef CPU, StringRef FS, |
71 const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, | 69 const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, |
72 CodeGenOpt::Level OL, bool is64bit) | 70 CodeGenOpt::Level OL, bool is64bit) |
73 : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL), | 71 : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL), |
74 Subtarget(TT, CPU, FS, is64bit), DL(Subtarget.getDataLayout()), | 72 Subtarget(TT, CPU, FS, is64bit), DL(Subtarget.getDataLayout()), |
75 InstrInfo(*this), TLInfo(*this), TSInfo(*this), | 73 InstrInfo(*this), TLInfo(*this), TSInfo(*this), |
76 FrameLowering( | 74 FrameLowering( |
(...skipping 18 matching lines...) Expand all Loading... |
95 namespace llvm { | 93 namespace llvm { |
96 class NVPTXPassConfig : public TargetPassConfig { | 94 class NVPTXPassConfig : public TargetPassConfig { |
97 public: | 95 public: |
98 NVPTXPassConfig(NVPTXTargetMachine *TM, PassManagerBase &PM) | 96 NVPTXPassConfig(NVPTXTargetMachine *TM, PassManagerBase &PM) |
99 : TargetPassConfig(TM, PM) {} | 97 : TargetPassConfig(TM, PM) {} |
100 | 98 |
101 NVPTXTargetMachine &getNVPTXTargetMachine() const { | 99 NVPTXTargetMachine &getNVPTXTargetMachine() const { |
102 return getTM<NVPTXTargetMachine>(); | 100 return getTM<NVPTXTargetMachine>(); |
103 } | 101 } |
104 | 102 |
105 virtual void addIRPasses(); | |
106 virtual bool addInstSelector(); | 103 virtual bool addInstSelector(); |
107 virtual bool addPreRegAlloc(); | 104 virtual bool addPreRegAlloc(); |
108 }; | 105 }; |
109 } | 106 } |
110 | 107 |
111 TargetPassConfig *NVPTXTargetMachine::createPassConfig(PassManagerBase &PM) { | 108 TargetPassConfig *NVPTXTargetMachine::createPassConfig(PassManagerBase &PM) { |
112 NVPTXPassConfig *PassConfig = new NVPTXPassConfig(this, PM); | 109 NVPTXPassConfig *PassConfig = new NVPTXPassConfig(this, PM); |
113 return PassConfig; | 110 return PassConfig; |
114 } | 111 } |
115 | 112 |
116 void NVPTXPassConfig::addIRPasses() { | |
117 TargetPassConfig::addIRPasses(); | |
118 addPass(createGenericToNVVMPass()); | |
119 } | |
120 | |
121 bool NVPTXPassConfig::addInstSelector() { | 113 bool NVPTXPassConfig::addInstSelector() { |
122 addPass(createLowerAggrCopies()); | 114 addPass(createLowerAggrCopies()); |
123 addPass(createSplitBBatBarPass()); | 115 addPass(createSplitBBatBarPass()); |
124 addPass(createAllocaHoisting()); | 116 addPass(createAllocaHoisting()); |
125 addPass(createNVPTXISelDag(getNVPTXTargetMachine(), getOptLevel())); | 117 addPass(createNVPTXISelDag(getNVPTXTargetMachine(), getOptLevel())); |
126 return false; | 118 return false; |
127 } | 119 } |
128 | 120 |
129 bool NVPTXPassConfig::addPreRegAlloc() { return false; } | 121 bool NVPTXPassConfig::addPreRegAlloc() { return false; } |
OLD | NEW |