summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/PeepholeOptimizer.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2010-11-01 20:41:43 +0000
committerBill Wendling <isanbard@gmail.com>2010-11-01 20:41:43 +0000
commit40a5eb18b031fa1a5e9697e21e251e613d441cc5 (patch)
tree0a7532ce26ca88bdf916ac31523fb44d574efe94 /lib/CodeGen/PeepholeOptimizer.cpp
parenta37d5cf3425eb93a25cc5da2bbf9b6a47c757b45 (diff)
downloadexternal_llvm-40a5eb18b031fa1a5e9697e21e251e613d441cc5.zip
external_llvm-40a5eb18b031fa1a5e9697e21e251e613d441cc5.tar.gz
external_llvm-40a5eb18b031fa1a5e9697e21e251e613d441cc5.tar.bz2
When we look at instructions to convert to setting the 's' flag, we need to look
at more than those which define CPSR. You can have this situation: (1) subs ... (2) sub r6, r5, r4 (3) movge ... (4) cmp r6, 0 (5) movge ... We cannot convert (2) to "subs" because (3) is using the CPSR set by (1). There's an analogous situation here: (1) sub r1, r2, r3 (2) sub r4, r5, r6 (3) cmp r4, ... (5) movge ... (6) cmp r1, ... (7) movge ... We cannot convert (1) to "subs" because of the intervening use of CPSR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117950 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/PeepholeOptimizer.cpp')
-rw-r--r--lib/CodeGen/PeepholeOptimizer.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/CodeGen/PeepholeOptimizer.cpp b/lib/CodeGen/PeepholeOptimizer.cpp
index e27ea15..0f2ba41 100644
--- a/lib/CodeGen/PeepholeOptimizer.cpp
+++ b/lib/CodeGen/PeepholeOptimizer.cpp
@@ -50,6 +50,10 @@ static cl::opt<bool>
Aggressive("aggressive-ext-opt", cl::Hidden,
cl::desc("Aggressive extension optimization"));
+static cl::opt<bool>
+DisablePeephole("disable-peephole", cl::Hidden, cl::init(false),
+ cl::desc("Disable the peephole optimizer"));
+
STATISTIC(NumReuse, "Number of extension results reused");
STATISTIC(NumEliminated, "Number of compares eliminated");
@@ -276,11 +280,9 @@ bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) {
if (MI->getDesc().isCompare() &&
!MI->getDesc().hasUnmodeledSideEffects()) {
-#if 0
- if (OptimizeCmpInstr(MI, MBB, MII))
+ if (!DisablePeephole && OptimizeCmpInstr(MI, MBB, MII))
Changed = true;
else
-#endif
++MII;
} else {
Changed |= OptimizeExtInstr(MI, MBB, LocalMIs);