[llvm-commits] [llvm] r139009 - /llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp

Andrew Trick atrick at apple.com
Fri Sep 2 10:26:28 PDT 2011


Author: atrick
Date: Fri Sep  2 12:26:28 2011
New Revision: 139009

URL: http://llvm.org/viewvc/llvm-project?rev=139009&view=rev
Log:
Enable SCEV-based unrolling by default.

This changes loop unrolling to use the same mechanism for trip count
computation as indvars. This is a stronger check that tends to unroll
more loops. A very common side-effect is that many single iteration
loops will be removed sooner. The real goal was simply to remove
dependence on canonical IVs.

x86 is break even.
ARM performance changes to expect (+ is good):
External/SPEC/CFP2000/183.equake/183.equake +13%
SingleSource/Benchmarks/Dhrystone/fldry     +21%
MultiSource/Applications/spiff/spiff         +3%
SingleSource/Benchmarks/Stanford/Puzzle     -14%

The Puzzle regression is actually an improvement in loop optimization
that defeats GVN: rdar://problem/10065079.

Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp?rev=139009&r1=139008&r2=139009&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp Fri Sep  2 12:26:28 2011
@@ -39,9 +39,9 @@
   cl::desc("Allows loops to be partially unrolled until "
            "-unroll-threshold loop size is reached."));
 
-// Temporary flag to be made default shortly.
+// Temporary flag to be removed in 3.0
 static cl::opt<bool>
-UnrollWithSCEV("unroll-scev", cl::init(false), cl::Hidden,
+NoSCEVUnroll("disable-unroll-scev", cl::init(false), cl::Hidden,
   cl::desc("Use ScalarEvolution to analyze loop trip counts for unrolling"));
 
 namespace {
@@ -145,7 +145,7 @@
   // Find trip count and trip multiple if count is not available
   unsigned TripCount = 0;
   unsigned TripMultiple = 1;
-  if (UnrollWithSCEV) {
+  if (!NoSCEVUnroll) {
     // Find "latch trip count". UnrollLoop assumes that control cannot exit
     // via the loop latch on any iteration prior to TripCount. The loop may exit
     // early via an earlier branch.





More information about the llvm-commits mailing list