| 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 |