From e8b57ef2603ed522083dc18e559ca4e20abf22ae Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Fri, 20 Sep 2002 00:47:49 +0000 Subject: [PATCH] Add method MachineInstr::replace to rewrite a machine instruction in place. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3843 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/MachineInstr.h | 12 ++++++++++++ lib/CodeGen/MachineInstr.cpp | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index a2190d829d3..106af9e5bfd 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -295,6 +295,18 @@ public: unsigned numOperands, OpCodeMask _opCodeMask = 0x0); inline ~MachineInstr () {} + + // + // Support to rewrite a machine instruction in place: for now, simply + // replace() and then set new operands with Set.*Operand methods below. + // + void replace (MachineOpCode _opCode, + unsigned numOperands, + OpCodeMask _opCodeMask = 0x0); + + // + // The op code. Note that MachineOpCode is a target-specific type. + // const MachineOpCode getOpCode () const { return opCode; } // diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index e12922e4c87..02c25fdd7fb 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -27,6 +27,22 @@ MachineInstr::MachineInstr(MachineOpCode _opCode, { } +// +// Support for replacing opcode and operands of a MachineInstr in place. +// This only resets the size of the operand vector and initializes it. +// The new operands must be set explicitly later. +// +void +MachineInstr::replace(MachineOpCode _opCode, + unsigned numOperands, + OpCodeMask _opCodeMask) +{ + opCode = _opCode; + opCodeMask = _opCodeMask; + operands.clear(); + operands.resize(numOperands); +} + void MachineInstr::SetMachineOperandVal(unsigned int i, MachineOperand::MachineOperandType opType, -- 2.34.1