[llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h
Evan Cheng
evan.cheng at apple.com
Tue Oct 31 16:25:34 PST 2006
Changes in directory llvm/include/llvm/Target:
TargetInstrInfo.h updated: 1.99 -> 1.100
---
Log message:
Add operand constraints to TargetInstrInfo.
---
Diffs of the changes: (+21 -0)
TargetInstrInfo.h | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+)
Index: llvm/include/llvm/Target/TargetInstrInfo.h
diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.99 llvm/include/llvm/Target/TargetInstrInfo.h:1.100
--- llvm/include/llvm/Target/TargetInstrInfo.h:1.99 Sat Oct 28 12:29:57 2006
+++ llvm/include/llvm/Target/TargetInstrInfo.h Tue Oct 31 18:25:20 2006
@@ -94,6 +94,9 @@
/// if the operand is a register. If not, this contains 0.
unsigned short RegClass;
unsigned short Flags;
+ /// Lower 16 bits are used to specify which constraints are set. The higher 16
+ /// bits are used to specify the value of constraints (4 bits each).
+ unsigned int Constraints;
/// Currently no other information.
};
@@ -219,6 +222,24 @@
return get(Opcode).Flags & M_VARIABLE_OPS;
}
+ // Operand constraints: only "tied_to" for now.
+ enum OperandConstraint {
+ TIED_TO = 0 // Must be allocated the same register as.
+ };
+
+ /// getOperandConstraint - Returns the value of the specific constraint if
+ /// it is set. Returns -1 if it is not set.
+ int getOperandConstraint(MachineOpCode Opcode, unsigned OpNum,
+ OperandConstraint Constraint) {
+ assert(OpNum < get(Opcode).numOperands &&
+ "Invalid operand # of TargetInstrInfo");
+ if (get(Opcode).OpInfo[OpNum].Constraints & (1 << Constraint)) {
+ unsigned Pos = 16 + Constraint * 4;
+ return (int)(get(Opcode).OpInfo[OpNum].Constraints >> Pos) & 0xf;
+ }
+ return -1;
+ }
+
/// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL
/// instruction if it has one. This is used by codegen passes that update
/// DWARF line number info as they modify the code.
More information about the llvm-commits
mailing list