diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-03-19 20:30:06 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-03-19 20:30:06 +0000 |
commit | 48555e87376e895bb596dd3f4879c6eb3f46ce4a (patch) | |
tree | 94d6439fe96abe95108b17e195b79975e13be036 /lib/CodeGen/MachineInstr.cpp | |
parent | 058523d7109339b5445827ac866ebb7e3db1143b (diff) | |
download | external_llvm-48555e87376e895bb596dd3f4879c6eb3f46ce4a.zip external_llvm-48555e87376e895bb596dd3f4879c6eb3f46ce4a.tar.gz external_llvm-48555e87376e895bb596dd3f4879c6eb3f46ce4a.tar.bz2 |
Added MachineInstr::isRegTiedToDefOperand to check for two-addressness.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67335 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineInstr.cpp')
-rw-r--r-- | lib/CodeGen/MachineInstr.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index 7bb6164..cc85b80 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -689,7 +689,7 @@ int MachineInstr::findFirstPredOperandIdx() const { return -1; } -/// isRegReDefinedByTwoAddr - Given the index of a register def operand, +/// isRegReDefinedByTwoAddr - Given the index of a register operand, /// check if the register def is a re-definition due to two addr elimination. bool MachineInstr::isRegReDefinedByTwoAddr(unsigned DefIdx) const{ assert(getOperand(DefIdx).isDef() && "DefIdx is not a def!"); @@ -703,6 +703,24 @@ bool MachineInstr::isRegReDefinedByTwoAddr(unsigned DefIdx) const{ return false; } +/// isRegTiedToDefOperand - Return true if the operand of the specified index +/// is a register use and it is tied to an def operand. It also returns the def +/// operand index by reference. +bool MachineInstr::isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx){ + const TargetInstrDesc &TID = getDesc(); + if (UseOpIdx >= TID.getNumOperands()) + return false; + const MachineOperand &MO = getOperand(UseOpIdx); + if (!MO.isReg() || !MO.isUse()) + return false; + int DefIdx = TID.getOperandConstraint(UseOpIdx, TOI::TIED_TO); + if (DefIdx == -1) + return false; + if (DefOpIdx) + *DefOpIdx = (unsigned)DefIdx; + return true; +} + /// copyKillDeadInfo - Copies kill / dead operand properties from MI. /// void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) { |