diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-11-11 10:20:02 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-11-11 10:20:02 +0000 |
commit | 3ba433a7e85c4f5b943ae6585a0327f4ccd461a0 (patch) | |
tree | be9b1c5d506dff046146ac6b665ee026d6aca3a6 | |
parent | 490ce1ea6f85395127f62ba521ce9d20d1f569fe (diff) |
Add methods to add implicit def use operands to a MI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31675 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/MachineInstr.h | 4 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineInstrBuilder.h | 5 | ||||
-rw-r--r-- | lib/CodeGen/MachineInstr.cpp | 12 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAG.cpp | 11 |
4 files changed, 22 insertions, 10 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index 06d8f3acbf..d3769a2651 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -413,6 +413,10 @@ public: Op.offset = 0; } + /// addImplicitDefUseOperands - Add all implicit def and use operands to + /// this instruction. + void addImplicitDefUseOperands(); + //===--------------------------------------------------------------------===// // Accessors used to modify instructions in place. // diff --git a/include/llvm/CodeGen/MachineInstrBuilder.h b/include/llvm/CodeGen/MachineInstrBuilder.h index 4da557cbb3..a9e7ffd4d5 100644 --- a/include/llvm/CodeGen/MachineInstrBuilder.h +++ b/include/llvm/CodeGen/MachineInstrBuilder.h @@ -77,6 +77,11 @@ public: MI->addExternalSymbolOperand(FnName); return *this; } + + const MachineInstrBuilder &addImplicitDefsUses() const { + MI->addImplicitDefUseOperands(); + return *this; + } }; /// BuildMI - Builder interface. Specify how to create the initial instruction diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index ba75e73623..65c164a4ee 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -125,6 +125,18 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const { } } +/// addImplicitDefUseOperands - Add all implicit def and use operands to +/// this instruction. +void MachineInstr::addImplicitDefUseOperands() { + const TargetInstrDescriptor &TID = TargetInstrDescriptors[Opcode]; + if (TID.ImplicitDefs) + for (const unsigned *ImpDefs = TID.ImplicitDefs; *ImpDefs; ++ImpDefs) + addRegOperand(*ImpDefs, true, true); + if (TID.ImplicitUses) + for (const unsigned *ImpUses = TID.ImplicitUses; *ImpUses; ++ImpUses) + addRegOperand(*ImpUses, false, true); +} + void MachineInstr::dump() const { std::cerr << " " << *this; diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp index 307b2b9b70..cafe3b6ffe 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp @@ -442,16 +442,7 @@ void ScheduleDAG::EmitNode(SDNode *Node, } // Emit implicit def / use operands. - if (II.ImplicitDefs) { - for (const unsigned *ImplicitDefs = II.ImplicitDefs; - *ImplicitDefs; ++ImplicitDefs) - MI->addRegOperand(*ImplicitDefs, true, true); - } - if (II.ImplicitUses) { - for (const unsigned *ImplicitUses = II.ImplicitUses; - *ImplicitUses; ++ImplicitUses) - MI->addRegOperand(*ImplicitUses, false, true); - } + MI->addImplicitDefUseOperands(); // Now that we have emitted all operands, emit this instruction itself. if ((II.Flags & M_USES_CUSTOM_DAG_SCHED_INSERTION) == 0) { |