1 //===-- PTXMFInfoExtract.cpp - Extract PTX machine function info ----------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines an information extractor for PTX machine functions.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "ptx-mf-info-extract"
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"
25 // NOTE: PTXMFInfoExtract must after register allocation!
28 /// PTXMFInfoExtract - PTX specific code to extract of PTX machine
29 /// function information for PTXAsmPrinter
31 class PTXMFInfoExtract : public MachineFunctionPass {
36 PTXMFInfoExtract(PTXTargetMachine &TM, CodeGenOpt::Level OptLevel)
37 : MachineFunctionPass(ID) {}
39 virtual bool runOnMachineFunction(MachineFunction &MF);
41 virtual const char *getPassName() const {
42 return "PTX Machine Function Info Extractor";
44 }; // class PTXMFInfoExtract
49 char PTXMFInfoExtract::ID = 0;
51 bool PTXMFInfoExtract::runOnMachineFunction(MachineFunction &MF) {
52 PTXMachineFunctionInfo *MFI = MF.getInfo<PTXMachineFunctionInfo>();
53 MachineRegisterInfo &MRI = MF.getRegInfo();
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);
65 FunctionPass *llvm::createPTXMFInfoExtract(PTXTargetMachine &TM,
66 CodeGenOpt::Level OptLevel) {
67 return new PTXMFInfoExtract(TM, OptLevel);