Added getTiedToSrcOperand() to check for two-address'ness.

llvm-svn: 31360
This commit is contained in:
Evan Cheng 2006-11-01 23:00:31 +00:00
parent 1359196c4e
commit 1b2e60e970
2 changed files with 17 additions and 1 deletions

View File

@ -230,7 +230,7 @@ public:
/// 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) {
OperandConstraint Constraint) const {
assert(OpNum < get(Opcode).numOperands &&
"Invalid operand # of TargetInstrInfo");
if (get(Opcode).OpInfo[OpNum].Constraints & (1 << Constraint)) {
@ -240,6 +240,10 @@ public:
return -1;
}
/// getTiedToSrcOperand - Returns the operand that is tied to the specified
/// dest operand. Returns -1 if there isn't one.
int getTiedToSrcOperand(MachineOpCode Opcode, unsigned OpNum) const;
/// 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.

View File

@ -38,6 +38,18 @@ TargetInstrInfo::~TargetInstrInfo() {
TargetInstrDescriptors = NULL; // reset global variable
}
int
TargetInstrInfo::getTiedToSrcOperand(MachineOpCode Opc, unsigned OpNum) const {
for (unsigned i = 0, e = getNumOperands(Opc); i != e; ++i) {
if (i == OpNum)
continue;
int ti = getOperandConstraint(Opc, i, TIED_TO);
if (ti == (int)OpNum)
return i;
}
return -1;
}
// commuteInstruction - The default implementation of this method just exchanges
// operand 1 and 2.