| //===-- PTXMFInfoExtract.cpp - Extract PTX machine function info ----------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file defines an information extractor for PTX machine functions. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #define DEBUG_TYPE "ptx-mf-info-extract" | |
| #include "PTX.h" | |
| #include "PTXTargetMachine.h" | |
| #include "PTXMachineFunctionInfo.h" | |
| #include "llvm/CodeGen/MachineFunctionPass.h" | |
| #include "llvm/CodeGen/MachineRegisterInfo.h" | |
| #include "llvm/Support/Debug.h" | |
| #include "llvm/Support/ErrorHandling.h" | |
| #include "llvm/Support/raw_ostream.h" | |
| // NOTE: PTXMFInfoExtract must after register allocation! | |
| namespace llvm { | |
| /// PTXMFInfoExtract - PTX specific code to extract of PTX machine | |
| /// function information for PTXAsmPrinter | |
| /// | |
| class PTXMFInfoExtract : public MachineFunctionPass { | |
| private: | |
| static char ID; | |
| public: | |
| PTXMFInfoExtract(PTXTargetMachine &TM, CodeGenOpt::Level OptLevel) | |
| : MachineFunctionPass(ID) {} | |
| virtual bool runOnMachineFunction(MachineFunction &MF); | |
| virtual const char *getPassName() const { | |
| return "PTX Machine Function Info Extractor"; | |
| } | |
| }; // class PTXMFInfoExtract | |
| } // namespace llvm | |
| using namespace llvm; | |
| char PTXMFInfoExtract::ID = 0; | |
| bool PTXMFInfoExtract::runOnMachineFunction(MachineFunction &MF) { | |
| PTXMachineFunctionInfo *MFI = MF.getInfo<PTXMachineFunctionInfo>(); | |
| MachineRegisterInfo &MRI = MF.getRegInfo(); | |
| // Generate list of all virtual registers used in this function | |
| for (unsigned i = 0; i < MRI.getNumVirtRegs(); ++i) { | |
| unsigned Reg = TargetRegisterInfo::index2VirtReg(i); | |
| const TargetRegisterClass *TRC = MRI.getRegClass(Reg); | |
| MFI->addVirtualRegister(TRC, Reg); | |
| } | |
| return false; | |
| } | |
| FunctionPass *llvm::createPTXMFInfoExtract(PTXTargetMachine &TM, | |
| CodeGenOpt::Level OptLevel) { | |
| return new PTXMFInfoExtract(TM, OptLevel); | |
| } |