aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/MachineInstr.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/CodeGen/MachineInstr.h')
-rw-r--r--include/llvm/CodeGen/MachineInstr.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h
index 7c0bed8479..8b0931ac61 100644
--- a/include/llvm/CodeGen/MachineInstr.h
+++ b/include/llvm/CodeGen/MachineInstr.h
@@ -17,6 +17,7 @@
#define LLVM_CODEGEN_MACHINEINSTR_H
#include "llvm/CodeGen/MachineOperand.h"
+#include "llvm/CodeGen/MemOperand.h"
namespace llvm {
@@ -35,6 +36,7 @@ class MachineInstr {
// are determined at construction time).
std::vector<MachineOperand> Operands; // the operands
+ std::vector<MemOperand> MemOperands; // information on memory references
MachineInstr *Prev, *Next; // Links for MBB's intrusive list.
MachineBasicBlock *Parent; // Pointer to the owning basic block.
@@ -94,6 +96,18 @@ public:
///
unsigned getNumExplicitOperands() const;
+ /// Access to memory operands of the instruction
+ unsigned getNumMemOperands() const { return MemOperands.size(); }
+
+ const MemOperand& getMemOperand(unsigned i) const {
+ assert(i < getNumMemOperands() && "getMemOperand() out of range!");
+ return MemOperands[i];
+ }
+ MemOperand& getMemOperand(unsigned i) {
+ assert(i < getNumMemOperands() && "getMemOperand() out of range!");
+ return MemOperands[i];
+ }
+
/// isIdenticalTo - Return true if this instruction is identical to (same
/// opcode and same operands as) the specified instruction.
bool isIdenticalTo(const MachineInstr *Other) const {
@@ -196,6 +210,12 @@ public:
///
void RemoveOperand(unsigned i);
+ /// addMemOperand - Add a MemOperand to the machine instruction, referencing
+ /// arbitrary storage.
+ void addMemOperand(const MemOperand &MO) {
+ MemOperands.push_back(MO);
+ }
+
private:
/// getRegInfo - If this instruction is embedded into a MachineFunction,
/// return the MachineRegisterInfo object for the current function, otherwise