PTXMachineFunctionInfo.h revision e0aef2de81c670f3e4229b979e81178860a458cb
1//===- PTXMachineFuctionInfo.h - PTX machine function info -------*- C++ -*-==// 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 declares PTX-specific per-machine-function information. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef PTX_MACHINE_FUNCTION_INFO_H 15#define PTX_MACHINE_FUNCTION_INFO_H 16 17#include "PTX.h" 18#include "llvm/ADT/DenseSet.h" 19#include "llvm/CodeGen/MachineFunction.h" 20 21namespace llvm { 22/// PTXMachineFunctionInfo - This class is derived from MachineFunction and 23/// contains private PTX target-specific information for each MachineFunction. 24/// 25class PTXMachineFunctionInfo : public MachineFunctionInfo { 26private: 27 bool is_kernel; 28 std::vector<unsigned> reg_arg, reg_local_var; 29 DenseSet<unsigned> reg_ret; 30 bool _isDoneAddArg; 31 32public: 33 PTXMachineFunctionInfo(MachineFunction &MF) 34 : is_kernel(false), reg_ret(PTX::NoRegister), _isDoneAddArg(false) { 35 reg_arg.reserve(8); 36 reg_local_var.reserve(32); 37 } 38 39 void setKernel(bool _is_kernel=true) { is_kernel = _is_kernel; } 40 41 void addArgReg(unsigned reg) { reg_arg.push_back(reg); } 42 void addLocalVarReg(unsigned reg) { reg_local_var.push_back(reg); } 43 void addRetReg(unsigned reg) { reg_ret.insert(reg); } 44 45 void doneAddArg(void) { 46 _isDoneAddArg = true; 47 } 48 void doneAddLocalVar(void) {} 49 50 bool isKernel() const { return is_kernel; } 51 52 typedef std::vector<unsigned>::const_iterator reg_iterator; 53 typedef std::vector<unsigned>::const_reverse_iterator reg_reverse_iterator; 54 typedef DenseSet<unsigned>::const_iterator ret_iterator; 55 56 bool argRegEmpty() const { return reg_arg.empty(); } 57 int getNumArg() const { return reg_arg.size(); } 58 reg_iterator argRegBegin() const { return reg_arg.begin(); } 59 reg_iterator argRegEnd() const { return reg_arg.end(); } 60 reg_reverse_iterator argRegReverseBegin() const { return reg_arg.rbegin(); } 61 reg_reverse_iterator argRegReverseEnd() const { return reg_arg.rend(); } 62 63 bool localVarRegEmpty() const { return reg_local_var.empty(); } 64 reg_iterator localVarRegBegin() const { return reg_local_var.begin(); } 65 reg_iterator localVarRegEnd() const { return reg_local_var.end(); } 66 67 bool retRegEmpty() const { return reg_ret.empty(); } 68 int getNumRet() const { return reg_ret.size(); } 69 ret_iterator retRegBegin() const { return reg_ret.begin(); } 70 ret_iterator retRegEnd() const { return reg_ret.end(); } 71 72 bool isArgReg(unsigned reg) const { 73 return std::find(reg_arg.begin(), reg_arg.end(), reg) != reg_arg.end(); 74 } 75 76 bool isRetReg(unsigned reg) const { 77 return std::find(reg_ret.begin(), reg_ret.end(), reg) != reg_ret.end(); 78 } 79 80 bool isLocalVarReg(unsigned reg) const { 81 return std::find(reg_local_var.begin(), reg_local_var.end(), reg) 82 != reg_local_var.end(); 83 } 84}; // class PTXMachineFunctionInfo 85} // namespace llvm 86 87#endif // PTX_MACHINE_FUNCTION_INFO_H 88