summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86RegisterInfo.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-02-17 05:35:13 +0000
committerChris Lattner <sabre@nondot.org>2004-02-17 05:35:13 +0000
commit8d6eebf0d79831e76200dbbc59bfde2b72d6abb0 (patch)
treefae61eda9fa204ae6b255099a17a76824470df51 /llvm/lib/Target/X86/X86RegisterInfo.cpp
parentc9586411cf604a4f30badd0e8c8b13135cd026ce (diff)
downloadbcm5719-llvm-8d6eebf0d79831e76200dbbc59bfde2b72d6abb0.tar.gz
bcm5719-llvm-8d6eebf0d79831e76200dbbc59bfde2b72d6abb0.zip
Scrunchify code, by adding helpers. No functionality changes.
llvm-svn: 11522
Diffstat (limited to 'llvm/lib/Target/X86/X86RegisterInfo.cpp')
-rw-r--r--llvm/lib/Target/X86/X86RegisterInfo.cpp101
1 files changed, 45 insertions, 56 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 01a3f07d408..6774f5f52fc 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/llvm/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:
- 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:
+ 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
- assert(0 && "Operand cannot be folded");
-
+
MBB.insert(MBB.erase(MI), NI);
return 0;
}
OpenPOWER on IntegriCloud