LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HexagonMachineFunctionInfo.h
Go to the documentation of this file.
1 //=- HexagonMachineFunctionInfo.h - Hexagon 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 #ifndef HexagonMACHINEFUNCTIONINFO_H
11 #define HexagonMACHINEFUNCTIONINFO_H
12 
13 #include <map>
15 
16 namespace llvm {
17 
18  namespace Hexagon {
19  const unsigned int StartPacket = 0x1;
20  const unsigned int EndPacket = 0x2;
21  }
22 
23 
24 /// Hexagon target-specific information for each MachineFunction.
26  // SRetReturnReg - Some subtargets require that sret lowering includes
27  // returning the value of the returned struct in a register. This field
28  // holds the virtual register into which the sret argument is passed.
29  unsigned SRetReturnReg;
30  std::vector<MachineInstr*> AllocaAdjustInsts;
31  int VarArgsFrameIndex;
32  bool HasClobberLR;
33  bool HasEHReturn;
34  std::map<const MachineInstr*, unsigned> PacketInfo;
35  virtual void anchor();
36 
37 public:
38  HexagonMachineFunctionInfo() : SRetReturnReg(0), HasClobberLR(0),
39  HasEHReturn(false) {}
40 
42  HasClobberLR(0),
43  HasEHReturn(false) {}
44 
45  unsigned getSRetReturnReg() const { return SRetReturnReg; }
46  void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; }
47 
49  AllocaAdjustInsts.push_back(MI);
50  }
51  const std::vector<MachineInstr*>& getAllocaAdjustInsts() {
52  return AllocaAdjustInsts;
53  }
54 
55  void setVarArgsFrameIndex(int v) { VarArgsFrameIndex = v; }
56  int getVarArgsFrameIndex() { return VarArgsFrameIndex; }
57 
59  PacketInfo[MI] |= Hexagon::StartPacket;
60  }
62  PacketInfo[MI] |= Hexagon::EndPacket;
63  }
64  bool isStartPacket(const MachineInstr* MI) const {
65  return (PacketInfo.count(MI) &&
66  (PacketInfo.find(MI)->second & Hexagon::StartPacket));
67  }
68  bool isEndPacket(const MachineInstr* MI) const {
69  return (PacketInfo.count(MI) &&
70  (PacketInfo.find(MI)->second & Hexagon::EndPacket));
71  }
72  void setHasClobberLR(bool v) { HasClobberLR = v; }
73  bool hasClobberLR() const { return HasClobberLR; }
74 
75  bool hasEHReturn() const { return HasEHReturn; };
76  void setHasEHReturn(bool H = true) { HasEHReturn = H; };
77 };
78 } // End llvm namespace
79 
80 #endif
const unsigned int StartPacket
bool isEndPacket(const MachineInstr *MI) const
Hexagon target-specific information for each MachineFunction.
#define false
Definition: ConvertUTF.c:64
#define H(x, y, z)
Definition: MD5.cpp:53
const std::vector< MachineInstr * > & getAllocaAdjustInsts()
const unsigned int EndPacket
bool isStartPacket(const MachineInstr *MI) const