aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-02-17 08:03:47 +0000
committerChris Lattner <sabre@nondot.org>2004-02-17 08:03:47 +0000
commitee0919bb10735d25953998da6bd20383defdbbc6 (patch)
tree478fc129b3365632d6f47b72c7906b6378a1b2fd /lib
parent17dc674c13d0c8b696672ca55cd0fb265e01a164 (diff)
Add a (hidden) option to print instructions that fail to fuse. It's looking
like compares and test's would be the next huge win... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11539 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86RegisterInfo.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp
index c5ed4d05b6..5d132dec20 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -34,6 +34,11 @@ namespace {
cl::opt<bool>
NoFusing("disable-spill-fusing",
cl::desc("Disable fusing of spill code into instructions"));
+ cl::opt<bool>
+ PrintFailedFusing("print-failed-fuse-candidates",
+ cl::desc("Print instructions that the allocator wants to"
+ " fuse, but the X86 backend currently can't"),
+ cl::Hidden);
}
X86RegisterInfo::X86RegisterInfo()
@@ -135,7 +140,7 @@ bool X86RegisterInfo::foldMemoryOperand(MachineBasicBlock::iterator &MI,
case X86::ANDri8: NI = MakeMIInst(X86::ANDmi8 , FrameIndex, MI); break;
case X86::ANDri16: NI = MakeMIInst(X86::ANDmi16, FrameIndex, MI); break;
case X86::ANDri32: NI = MakeMIInst(X86::ANDmi32, FrameIndex, MI); break;
- default: return false; // Cannot fold
+ default: break; // Cannot fold
}
} else if (i == 1) {
switch(MI->getOpcode()) {
@@ -150,16 +155,19 @@ bool X86RegisterInfo::foldMemoryOperand(MachineBasicBlock::iterator &MI,
case X86::ANDrr32: NI = MakeRMInst(X86::ANDrm32, FrameIndex, MI); break;
case X86::IMULrr16:NI = MakeRMInst(X86::IMULrm16, FrameIndex, MI); break;
case X86::IMULrr32:NI = MakeRMInst(X86::IMULrm32, FrameIndex, MI); break;
- case X86::IMULrri16: NI = MakeRMIInst(X86::IMULrmi16, FrameIndex, MI); break;
- case X86::IMULrri32: NI = MakeRMIInst(X86::IMULrmi32, FrameIndex, MI); break;
- default: return false; // cannot fold.
+ case X86::IMULrri16: NI = MakeRMIInst(X86::IMULrmi16, FrameIndex, MI);break;
+ case X86::IMULrri32: NI = MakeRMIInst(X86::IMULrmi32, FrameIndex, MI);break;
+ default: break;
}
+ }
+ if (NI) {
+ MI = MBB.insert(MBB.erase(MI), NI);
+ return true;
} else {
- return false; // cannot fold.
+ if (PrintFailedFusing)
+ std::cerr << "We failed to fuse: " << *MI;
+ return false;
}
-
- MI = MBB.insert(MBB.erase(MI), NI);
- return true;
}
//===----------------------------------------------------------------------===//