LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HexagonMCInst.h
Go to the documentation of this file.
1 //===- HexagonMCInst.h - Hexagon sub-class of MCInst ----------------------===//
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 class extends MCInst to allow some VLIW annotations.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef HEXAGONMCINST_H
15 #define HEXAGONMCINST_H
16 
17 #include "HexagonTargetMachine.h"
18 #include "llvm/MC/MCInst.h"
19 
20 namespace llvm {
21  class MCOperand;
22 
23  class HexagonMCInst: public MCInst {
24  // MCID is set during instruction lowering.
25  // It is needed in order to access TSFlags for
26  // use in checking MC instruction properties.
27  const MCInstrDesc *MCID;
28 
29  // Packet start and end markers
30  unsigned packetStart: 1, packetEnd: 1;
31 
32  public:
33  explicit HexagonMCInst():
34  MCInst(), MCID(0), packetStart(0), packetEnd(0) {};
35  HexagonMCInst(const MCInstrDesc& mcid):
36  MCInst(), MCID(&mcid), packetStart(0), packetEnd(0) {};
37 
38  bool isPacketStart() const { return (packetStart); };
39  bool isPacketEnd() const { return (packetEnd); };
40  void setPacketStart(bool Y) { packetStart = Y; };
41  void setPacketEnd(bool Y) { packetEnd = Y; };
42  void resetPacket() { setPacketStart(false); setPacketEnd(false); };
43 
44  // Return the slots used by the insn.
45  unsigned getUnits(const HexagonTargetMachine* TM) const;
46 
47  // Return the Hexagon ISA class for the insn.
48  unsigned getType() const;
49 
50  void setDesc(const MCInstrDesc& mcid) { MCID = &mcid; };
51  const MCInstrDesc& getDesc(void) const { return *MCID; };
52 
53  // Return whether the insn is an actual insn.
54  bool isCanon() const;
55 
56  // Return whether the insn is a prefix.
57  bool isPrefix() const;
58 
59  // Return whether the insn is solo, i.e., cannot be in a packet.
60  bool isSolo() const;
61 
62  // Return whether the instruction needs to be constant extended.
63  bool isConstExtended() const;
64 
65  // Return constant extended operand number.
66  unsigned short getCExtOpNum(void) const;
67 
68  // Return whether the insn is a new-value consumer.
69  bool isNewValue() const;
70 
71  // Return whether the instruction is a legal new-value producer.
72  bool hasNewValue() const;
73 
74  // Return the operand that consumes or produces a new value.
75  const MCOperand& getNewValue() const;
76 
77  // Return number of bits in the constant extended operand.
78  unsigned getBitCount(void) const;
79 
80  private:
81  // Return whether the instruction must be always extended.
82  bool isExtended() const;
83 
84  // Return true if the insn may be extended based on the operand value.
85  bool isExtendable() const;
86 
87  // Return true if the operand can be constant extended.
88  bool isOperandExtended(const unsigned short OperandNum) const;
89 
90  // Return the min value that a constant extendable operand can have
91  // without being extended.
92  int getMinValue() const;
93 
94  // Return the max value that a constant extendable operand can have
95  // without being extended.
96  int getMaxValue() const;
97  };
98 }
99 
100 #endif
const MCOperand & getNewValue() const
bool hasNewValue() const
unsigned short getCExtOpNum(void) const
const MCInstrDesc & getDesc(void) const
Definition: HexagonMCInst.h:51
void setPacketEnd(bool Y)
Definition: HexagonMCInst.h:41
bool isConstExtended() const
unsigned getUnits(const HexagonTargetMachine *TM) const
void setDesc(const MCInstrDesc &mcid)
Definition: HexagonMCInst.h:50
bool isSolo() const
void setPacketStart(bool Y)
Definition: HexagonMCInst.h:40
bool isPacketStart() const
Definition: HexagonMCInst.h:38
unsigned getType() const
bool isCanon() const
unsigned getBitCount(void) const
static GCMetadataPrinterRegistry::Add< OcamlGCMetadataPrinter > Y("ocaml","ocaml 3.10-compatible collector")
bool isPrefix() const
HexagonMCInst(const MCInstrDesc &mcid)
Definition: HexagonMCInst.h:35
bool isNewValue() const
bool isPacketEnd() const
Definition: HexagonMCInst.h:39