diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index 2409e60..7e4a32f 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -794,6 +794,28 @@ bool MachineInstr::shouldUpdateAdditionalCallInfo() const { return isCandidateForAdditionalCallInfo(); } +template <typename Operand, typename Instruction> +static iterator_range< + filter_iterator<Operand *, std::function<bool(Operand &Op)>>> +getDebugOperandsForRegHelper(Instruction *MI, Register Reg) { + std::function<bool(Operand & Op)> OpUsesReg( + [Reg](Operand &Op) { return Op.isReg() && Op.getReg() == Reg; }); + return make_filter_range(MI->debug_operands(), OpUsesReg); +} + +iterator_range<filter_iterator<const MachineOperand *, + std::function<bool(const MachineOperand &Op)>>> +MachineInstr::getDebugOperandsForReg(Register Reg) const { + return getDebugOperandsForRegHelper<const MachineOperand, const MachineInstr>( + this, Reg); +} + +iterator_range< + filter_iterator<MachineOperand *, std::function<bool(MachineOperand &Op)>>> +MachineInstr::getDebugOperandsForReg(Register Reg) { + return getDebugOperandsForRegHelper<MachineOperand, MachineInstr>(this, Reg); +} + unsigned MachineInstr::getNumExplicitOperands() const { unsigned NumOperands = MCID->getNumOperands(); if (!MCID->isVariadic()) |