#
863bab68 |
| 26-Sep-2012 |
Bill Wendling <isanbard@gmail.com> |
Remove the `hasFnAttr' method from Function.
The hasFnAttr method has been replaced by querying the Attributes explicitly. No intended functionality change.
llvm-svn: 164725
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
b21b865f |
| 04-Apr-2012 |
Hongbin Zheng <etherzhhb@gmail.com> |
LoopUnrollPass: Use variable "Threshold" instead of "CurrentThreshold" when reducing unroll count, otherwise the reduced unroll count is not taking the "OptimizeForSize" attribute into account.
LoopUnrollPass: Use variable "Threshold" instead of "CurrentThreshold" when reducing unroll count, otherwise the reduced unroll count is not taking the "OptimizeForSize" attribute into account.
llvm-svn: 154007
show more ...
|
#
d04d1529 |
| 09-Dec-2011 |
Andrew Trick <atrick@apple.com> |
Add -unroll-runtime for unrolling loops with run-time trip counts.
Patch by Brendon Cahoon!
This extends the existing LoopUnroll and LoopUnrollPass. Brendon measured no regressions in the llvm test
Add -unroll-runtime for unrolling loops with run-time trip counts.
Patch by Brendon Cahoon!
This extends the existing LoopUnroll and LoopUnrollPass. Brendon measured no regressions in the llvm test suite with -unroll-runtime enabled. This implementation works by using the existing loop unrolling code to unroll the loop by a power-of-two (default 8). It generates an if-then-else sequence of code prior to the loop to execute the extra iterations before entering the unrolled loop.
llvm-svn: 146245
show more ...
|
#
a8bdb7cb |
| 28-Nov-2011 |
Andrew Trick <atrick@apple.com> |
Remove the temporary flag -disable-unroll-scev and dead code.
SCEV should now be used for trip count analysis, not LoopInfo.
llvm-svn: 145262
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4, llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2 |
|
#
88b4fa21 |
| 19-Oct-2011 |
Devang Patel <dpatel@apple.com> |
Initialze ScalarEvalution dependency. Patch by Pranav Bhandarkar!
llvm-svn: 142556
|
Revision tags: llvmorg-3.0.0-rc1 |
|
#
f7656015 |
| 01-Oct-2011 |
Andrew Trick <atrick@apple.com> |
Inlining and unrolling heuristics should be aware of free truncs.
We want heuristics to be based on accurate data, but more importantly we don't want llvm to behave randomly. A benign trunc inserted
Inlining and unrolling heuristics should be aware of free truncs.
We want heuristics to be based on accurate data, but more importantly we don't want llvm to behave randomly. A benign trunc inserted by an upstream pass should not cause a wild swings in optimization level. See PR11034. It's a general problem with threshold-based heuristics, but we can make it less bad.
llvm-svn: 140919
show more ...
|
#
31b941a6 |
| 02-Sep-2011 |
Andrew Trick <atrick@apple.com> |
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
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.
llvm-svn: 139009
show more ...
|
#
2b6860f0 |
| 11-Aug-2011 |
Andrew Trick <atrick@apple.com> |
Allow loop unrolling to get known trip counts from ScalarEvolution.
SCEV unrolling can unroll loops with arbitrary induction variables. It is a prerequisite for -disable-iv-rewrite performance. It i
Allow loop unrolling to get known trip counts from ScalarEvolution.
SCEV unrolling can unroll loops with arbitrary induction variables. It is a prerequisite for -disable-iv-rewrite performance. It is also easily handles loops of arbitrary structure including multiple exits and is generally more robust.
This is under a temporary option to avoid affecting default behavior for the next couple of weeks. It is needed so that I can checkin unit tests for updateUnloop.
llvm-svn: 137384
show more ...
|
#
4d0040ba |
| 10-Aug-2011 |
Andrew Trick <atrick@apple.com> |
Invoke SimplifyIndVar when we partially unroll a loop. Fixes PR10534.
llvm-svn: 137203
|
#
1cabe54f |
| 23-Jul-2011 |
Andrew Trick <atrick@apple.com> |
Move trip count discovery outside of the generic LoopUnroll helper. This removes its dependence on canonical induction variables.
llvm-svn: 135829
|
#
279e7a6c |
| 23-Jul-2011 |
Andrew Trick <atrick@apple.com> |
whitespace
llvm-svn: 135828
|
#
35a65b2a |
| 14-Apr-2011 |
Chris Lattner <sabre@nondot.org> |
fix a couple -Wsign-compare warnings.
llvm-svn: 129501
|
#
377cc31a |
| 13-Apr-2011 |
Junjie Gu <jgu222@gmail.com> |
Fixed the revision 129449.
llvm-svn: 129450
|
#
7c3b4593 |
| 13-Apr-2011 |
Junjie Gu <jgu222@gmail.com> |
Passing unroll parameters (unroll-count, threshold, and partial unroll) via LoopUnroll class's ctor. Doing so will allow multiple context with different loop unroll parameters to run. This is a min
Passing unroll parameters (unroll-count, threshold, and partial unroll) via LoopUnroll class's ctor. Doing so will allow multiple context with different loop unroll parameters to run. This is a minor change and no effect on existing application.
llvm-svn: 129449
show more ...
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2, llvmorg-2.9.0-rc1 |
|
#
459e0799 |
| 17-Jan-2011 |
Owen Anderson <resistor@mac.com> |
Remove dead code, that I apparently wrote a while back. We seem to be doing well enough without whatever this was trying to do. When/if someone has the time to do some empirical evaluations, it mig
Remove dead code, that I apparently wrote a while back. We seem to be doing well enough without whatever this was trying to do. When/if someone has the time to do some empirical evaluations, it might be worth it to figure out what this code was trying to do and see if it's worth resurrecting/fixing.
llvm-svn: 123684
show more ...
|
#
dfcfcb49 |
| 11-Jan-2011 |
Chris Lattner <sabre@nondot.org> |
random cleanups
llvm-svn: 123221
|
#
679572e5 |
| 02-Jan-2011 |
Chris Lattner <sabre@nondot.org> |
improve loop rotation to use CodeMetrics to analyze the size of a loop header instead of its own code size estimator. This allows it to handle bitcasts etc more precisely.
llvm-svn: 122681
|
#
a4fefc19 |
| 19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Passes do not need to recursively initialize passes that they preserve, if they do not also require them. This allows us to reduce inter-pass linkage dependencies.
llvm-svn: 116854
|
#
6c18d1aa |
| 19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies.
Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments.
I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly.
llvm-svn: 116820
show more ...
|
#
8ac477ff |
| 12-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, pas
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future.
llvm-svn: 116334
show more ...
|
#
df7a4f25 |
| 07-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Now with fewer extraneous semicolons!
llvm-svn: 115996
|
Revision tags: llvmorg-2.8.0, llvmorg-2.8.0-rc3 |
|
#
d67ca0ed |
| 29-Sep-2010 |
Owen Anderson <resistor@mac.com> |
Revert r114919, which caused some serious regressions on ARM.
llvm-svn: 115053
|
#
9c93fd55 |
| 27-Sep-2010 |
Owen Anderson <resistor@mac.com> |
Weight loop unrolling counts by nesting depth. Unrolling deeply nested loops tends to cause high register pressure and thus excess spills, which we don't currently recover from well. This should be
Weight loop unrolling counts by nesting depth. Unrolling deeply nested loops tends to cause high register pressure and thus excess spills, which we don't currently recover from well. This should be re-evaluated in the future if our ability to generate good spills/splits improves.
Partial fix for <rdar://problem/7635585>.
llvm-svn: 114919
show more ...
|
Revision tags: llvmorg-2.8.0-rc2 |
|
#
d85c9ccd |
| 10-Sep-2010 |
Owen Anderson <resistor@mac.com> |
Lower the unrolling theshold to 150. Empirical tests indicate that this is a sweet spot in the performance per code size increase curve.
llvm-svn: 113595
|
#
04cf3fd7 |
| 09-Sep-2010 |
Owen Anderson <resistor@mac.com> |
What the loop unroller cares about, rather than just not unrolling loops with calls, is not unrolling loops that contain calls that would be better off getting inlined. This mostly comes up when an
What the loop unroller cares about, rather than just not unrolling loops with calls, is not unrolling loops that contain calls that would be better off getting inlined. This mostly comes up when an interleaved devirtualization pass has devirtualized a call which the inliner will inline on a future pass. Thus, rather than blocking all loops containing calls, add a metric for "inline candidate calls" and block loops containing those instead.
llvm-svn: 113535
show more ...
|