From f216421181393fd3993b47960de44ad448710fb9 Mon Sep 17 00:00:00 2001 From: Alkis Evlogimenos <alkis@evlogimenos.com> Date: Sun, 22 Feb 2004 06:54:26 +0000 Subject: [PATCH] When folding memory operands in machine instructions be careful to leave register operands with the same use/def flags as the original instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11709 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/MachineInstr.h | 7 +++++++ lib/Target/X86/X86RegisterInfo.cpp | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index a90f1333a58..65d5ccae70a 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -197,6 +197,13 @@ public: /// MachineOperandType getType() const { return opType; } + /// getUseType - Returns the MachineOperandUseType of this operand. + /// + MOTy::UseType getUseType() const { + return isUse() ^ isDef() ? MOTy::UseAndDef : + (isUse() ? MOTy::Use : MOTy::Def); + } + /// isPCRelative - This returns the value of the PCRELATIVE flag, which /// indicates whether this operand should be emitted as a PC relative value /// instead of a global address. This is used for operands of the forms: diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index 6479ad56a7e..d97b5295315 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -112,13 +112,15 @@ static MachineInstr *MakeMIInst(unsigned Opcode, unsigned FrameIndex, static MachineInstr *MakeRMInst(unsigned Opcode, unsigned FrameIndex, MachineInstr *MI) { - return addFrameReference(BuildMI(Opcode, 5, MI->getOperand(0).getReg()), + const MachineOperand& op = MI->getOperand(0); + return addFrameReference(BuildMI(Opcode, 5, op.getReg(), op.getUseType()), FrameIndex); } static MachineInstr *MakeRMIInst(unsigned Opcode, unsigned FrameIndex, MachineInstr *MI) { - return addFrameReference(BuildMI(Opcode, 5, MI->getOperand(0).getReg()), + const MachineOperand& op = MI->getOperand(0); + return addFrameReference(BuildMI(Opcode, 5, op.getReg(), op.getUseType()), FrameIndex).addZImm(MI->getOperand(2).getImmedValue()); }