1 //===-- PTXMFInfoExtract.cpp - Extract PTX machine function info ----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines an information extractor for PTX machine functions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #define DEBUG_TYPE "ptx-mf-info-extract" 15 16 #include "PTX.h" 17 #include "PTXTargetMachine.h" 18 #include "PTXMachineFunctionInfo.h" 19 #include "llvm/CodeGen/MachineFunctionPass.h" 20 #include "llvm/CodeGen/MachineRegisterInfo.h" 21 #include "llvm/Support/Debug.h" 22 #include "llvm/Support/ErrorHandling.h" 23 #include "llvm/Support/raw_ostream.h" 24 25 // NOTE: PTXMFInfoExtract must after register allocation! 26 27 namespace llvm { 28 /// PTXMFInfoExtract - PTX specific code to extract of PTX machine 29 /// function information for PTXAsmPrinter 30 /// 31 class PTXMFInfoExtract : public MachineFunctionPass { 32 private: 33 static char ID; 34 35 public: PTXMFInfoExtract(PTXTargetMachine & TM,CodeGenOpt::Level OptLevel)36 PTXMFInfoExtract(PTXTargetMachine &TM, CodeGenOpt::Level OptLevel) 37 : MachineFunctionPass(ID) {} 38 39 virtual bool runOnMachineFunction(MachineFunction &MF); 40 getPassName() const41 virtual const char *getPassName() const { 42 return "PTX Machine Function Info Extractor"; 43 } 44 }; // class PTXMFInfoExtract 45 } // namespace llvm 46 47 using namespace llvm; 48 49 char PTXMFInfoExtract::ID = 0; 50 runOnMachineFunction(MachineFunction & MF)51bool PTXMFInfoExtract::runOnMachineFunction(MachineFunction &MF) { 52 PTXMachineFunctionInfo *MFI = MF.getInfo<PTXMachineFunctionInfo>(); 53 MachineRegisterInfo &MRI = MF.getRegInfo(); 54 55 // Generate list of all virtual registers used in this function 56 for (unsigned i = 0; i < MRI.getNumVirtRegs(); ++i) { 57 unsigned Reg = TargetRegisterInfo::index2VirtReg(i); 58 const TargetRegisterClass *TRC = MRI.getRegClass(Reg); 59 MFI->addVirtualRegister(TRC, Reg); 60 } 61 62 return false; 63 } 64 createPTXMFInfoExtract(PTXTargetMachine & TM,CodeGenOpt::Level OptLevel)65FunctionPass *llvm::createPTXMFInfoExtract(PTXTargetMachine &TM, 66 CodeGenOpt::Level OptLevel) { 67 return new PTXMFInfoExtract(TM, OptLevel); 68 } 69