From 7c035b73a4f433200cd720aaf673ab564fb393dd Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 17 Feb 2004 05:35:13 +0000 Subject: [PATCH] Scrunchify code, by adding helpers. No functionality changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11522 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86RegisterInfo.cpp | 101 +++++++++++++---------------- 1 file changed, 45 insertions(+), 56 deletions(-) diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index 01a3f07d408..6774f5f52fc 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -92,70 +92,59 @@ bool X86RegisterInfo::canFoldMemoryOperand(MachineInstr* MI, } } +static MachineInstr *MakeMRInst(unsigned Opcode, unsigned FrameIndex, + MachineInstr *MI) { + return addFrameReference(BuildMI(Opcode, 5), FrameIndex) + .addReg(MI->getOperand(1).getReg()); +} + +static MachineInstr *MakeMIInst(unsigned Opcode, unsigned FrameIndex, + MachineInstr *MI) { + return addFrameReference(BuildMI(Opcode, 5), FrameIndex) + .addZImm(MI->getOperand(1).getImmedValue()); +} + +static MachineInstr *MakeRMInst(unsigned Opcode, unsigned FrameIndex, + MachineInstr *MI) { + return addFrameReference(BuildMI(Opcode, 5) + .addReg(MI->getOperand(0).getReg()), FrameIndex); +} + int X86RegisterInfo::foldMemoryOperand(MachineInstr* MI, unsigned i, int FrameIndex) const { + /// FIXME: This should obviously be autogenerated by tablegen when patterns + /// are available! MachineBasicBlock& MBB = *MI->getParent(); MachineInstr* NI = 0; - if (i == 0) - switch(MI->getOpcode()) { - case X86::MOVrr8: - NI = addFrameReference(BuildMI(X86::MOVmr8, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::MOVrr16: - NI = addFrameReference(BuildMI(X86::MOVmr16, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::MOVrr32: - NI = addFrameReference(BuildMI(X86::MOVmr32, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::ADDrr8: - NI = addFrameReference(BuildMI(X86::ADDmr8, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::ADDrr16: - NI = addFrameReference(BuildMI(X86::ADDmr16, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::ADDrr32: - NI = addFrameReference(BuildMI(X86::ADDmr32, 5), FrameIndex).addReg(MI->getOperand(1).getReg()); - break; - case X86::ADDri8: - NI = addFrameReference(BuildMI(X86::ADDmi8, 5), FrameIndex).addZImm(MI->getOperand(1).getImmedValue()); - break; - case X86::ADDri16: - NI = addFrameReference(BuildMI(X86::ADDmi16, 5), FrameIndex).addZImm(MI->getOperand(1).getImmedValue()); - break; - case X86::ADDri32: - NI = addFrameReference(BuildMI(X86::ADDmi32, 5), FrameIndex).addZImm(MI->getOperand(1).getImmedValue()); - break; - default: + if (i == 0) { + switch(MI->getOpcode()) { + case X86::MOVrr8: NI = MakeMRInst(X86::MOVmr8 , FrameIndex, MI); break; + case X86::MOVrr16: NI = MakeMRInst(X86::MOVmr16, FrameIndex, MI); break; + case X86::MOVrr32: NI = MakeMRInst(X86::MOVmr32, FrameIndex, MI); break; + case X86::ADDrr8: NI = MakeMRInst(X86::ADDmr8 , FrameIndex, MI); break; + case X86::ADDrr16: NI = MakeMRInst(X86::ADDmr16, FrameIndex, MI); break; + case X86::ADDrr32: NI = MakeMRInst(X86::ADDmr32, FrameIndex, MI); break; + case X86::ADDri8: NI = MakeMIInst(X86::ADDmi8 , FrameIndex, MI); break; + case X86::ADDri16: NI = MakeMIInst(X86::ADDmi16, FrameIndex, MI); break; + case X86::ADDri32: NI = MakeMIInst(X86::ADDmi32, FrameIndex, MI); break; + default: assert(0 && "Operand cannot be folded"); + } + } else if (i == 1) { + switch(MI->getOpcode()) { + case X86::MOVrr8: NI = MakeRMInst(X86::MOVrm8 , FrameIndex, MI); break; + case X86::MOVrr16: NI = MakeRMInst(X86::MOVrm16, FrameIndex, MI); break; + case X86::MOVrr32: NI = MakeRMInst(X86::MOVrm32, FrameIndex, MI); break; + case X86::ADDrr8: NI = MakeRMInst(X86::ADDrm8 , FrameIndex, MI); break; + case X86::ADDrr16: NI = MakeRMInst(X86::ADDrm16, FrameIndex, MI); break; + case X86::ADDrr32: NI = MakeRMInst(X86::ADDrm32, FrameIndex, MI); break; + default: assert(0 && "Operand cannot be folded"); + } + } else { assert(0 && "Operand cannot be folded"); } - else if (i == 1) - switch(MI->getOpcode()) { - case X86::MOVrr8: - NI = addFrameReference(BuildMI(X86::MOVrm8, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - case X86::MOVrr16: - NI = addFrameReference(BuildMI(X86::MOVrm16, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - case X86::MOVrr32: - NI = addFrameReference(BuildMI(X86::MOVrm32, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - case X86::ADDrr8: - NI = addFrameReference(BuildMI(X86::ADDrm8, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - case X86::ADDrr16: - NI = addFrameReference(BuildMI(X86::ADDrm16, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - case X86::ADDrr32: - NI = addFrameReference(BuildMI(X86::ADDrm32, 5).addReg(MI->getOperand(0).getReg()), FrameIndex); - break; - default: - assert(0 && "Operand cannot be folded"); - } - else - assert(0 && "Operand cannot be folded"); - + MBB.insert(MBB.erase(MI), NI); return 0; }