#
188de5ae |
| 05-Apr-2016 |
David L Kreitzer <david.l.kreitzer@intel.com> |
Adds the ability to use an epilog remainder loop during loop unrolling and makes this the default behavior.
Patch by Evgeny Stupachenko (evstupac@gmail.com).
Differential Revision: http://reviews.l
Adds the ability to use an epilog remainder loop during loop unrolling and makes this the default behavior.
Patch by Evgeny Stupachenko (evstupac@gmail.com).
Differential Revision: http://reviews.llvm.org/D18158
llvm-svn: 265388
show more ...
|
#
8d441eb9 |
| 25-Mar-2016 |
David L Kreitzer <david.l.kreitzer@intel.com> |
Enable non-power-of-2 #pragma unroll counts.
Patch by Evgeny Stupachenko.
Differential Revision: http://reviews.llvm.org/D18202
llvm-svn: 264407
|
Revision tags: llvmorg-3.8.0, llvmorg-3.8.0-rc3 |
|
#
6ebdc14c |
| 16-Feb-2016 |
Junmo Park <junmoz.park@samsung.com> |
[SCEVExpander] Make findExistingExpansion smarter
Summary: Extending findExistingExpansion can use existing value in ExprValueMap. This patch gives 0.3~0.5% performance improvements on benchmarks(t
[SCEVExpander] Make findExistingExpansion smarter
Summary: Extending findExistingExpansion can use existing value in ExprValueMap. This patch gives 0.3~0.5% performance improvements on benchmarks(test-suite, spec2000, spec2006, commercial benchmark) Reviewers: mzolotukhin, sanjoy, zzheng
Differential Revision: http://reviews.llvm.org/D15559
llvm-svn: 260938
show more ...
|
#
6086c6a3 |
| 12-Feb-2016 |
Justin Lebar <jlebar@google.com> |
Fix typo in comment.
llvm-svn: 260731
|
#
4d36bbaf |
| 08-Feb-2016 |
Sanjay Patel <spatel@rotateright.com> |
rangify; NFC
llvm-svn: 260151
|
#
e08381a5 |
| 08-Feb-2016 |
Sanjay Patel <spatel@rotateright.com> |
fix typos; NFC
llvm-svn: 260130
|
Revision tags: llvmorg-3.8.0-rc2 |
|
#
502ff669 |
| 28-Jan-2016 |
Junmo Park <junmoz.park@samsung.com> |
Minor code formatting cleanup. NFC.
llvm-svn: 259010
|
Revision tags: llvmorg-3.8.0-rc1 |
|
#
843fb204 |
| 15-Dec-2015 |
Justin Bogner <mail@justinbogner.com> |
LPM: Stop threading `Pass *` through all of the loop utility APIs. NFC
A large number of loop utility functions take a `Pass *` and reach into it to find out which analyses to preserve. There are a
LPM: Stop threading `Pass *` through all of the loop utility APIs. NFC
A large number of loop utility functions take a `Pass *` and reach into it to find out which analyses to preserve. There are a number of problems with this:
- The APIs have access to pretty well any Pass state they want, so it's hard to tell what they may or may not do.
- Other APIs have copied these and pass around a `Pass *` even though they don't even use it. Some of these just hand a nullptr to the API since the callers don't even have a pass available.
- Passes in the new pass manager don't work like the current ones, so the APIs can't be used as is there.
Instead, we should explicitly thread the analysis results that we actually care about through these APIs. This is both simpler and more reusable.
llvm-svn: 255669
show more ...
|
Revision tags: llvmorg-3.7.1, llvmorg-3.7.1-rc2, llvmorg-3.7.1-rc1 |
|
#
5b4c837c |
| 13-Oct-2015 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
TransformUtils: Remove implicit ilist iterator conversions, NFC
Continuing the work from last week to remove implicit ilist iterator conversions. First related commit was probably r249767, with som
TransformUtils: Remove implicit ilist iterator conversions, NFC
Continuing the work from last week to remove implicit ilist iterator conversions. First related commit was probably r249767, with some more motivation in r249925. This edition gets LLVMTransformUtils compiling without the implicit conversions.
No functional change intended.
llvm-svn: 250142
show more ...
|
#
083ca9bb |
| 06-Oct-2015 |
Hans Wennborg <hans@hanshq.net> |
Fix Clang-tidy modernize-use-nullptr warnings in source directories and generated files; other minor cleanups.
Patch by Eugene Zelenko!
Differential Revision: http://reviews.llvm.org/D13321
llvm-s
Fix Clang-tidy modernize-use-nullptr warnings in source directories and generated files; other minor cleanups.
Patch by Eugene Zelenko!
Differential Revision: http://reviews.llvm.org/D13321
llvm-svn: 249482
show more ...
|
Revision tags: llvmorg-3.7.0, llvmorg-3.7.0-rc4, llvmorg-3.7.0-rc3 |
|
#
2f1fd165 |
| 17-Aug-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Port ScalarEvolution to the new pass manager.
This change makes ScalarEvolution a stand-alone object and just produces one from a pass as needed. Making this work well requires making the objec
[PM] Port ScalarEvolution to the new pass manager.
This change makes ScalarEvolution a stand-alone object and just produces one from a pass as needed. Making this work well requires making the object movable, using references instead of overwritten pointers in a number of places, and other refactorings.
I've also wired it up to the new pass manager and added a RUN line to a test to exercise it under the new pass manager. This includes basic printing support much like with other analyses.
But there is a big and somewhat scary change here. Prior to this patch ScalarEvolution was never *actually* invalidated!!! Re-running the pass just re-wired up the various other analyses and didn't remove any of the existing entries in the SCEV caches or clear out anything at all. This might seem OK as everything in SCEV that can uses ValueHandles to track updates to the values that serve as SCEV keys. However, this still means that as we ran SCEV over each function in the module, we kept accumulating more and more SCEVs into the cache. At the end, we would have a SCEV cache with every value that we ever needed a SCEV for in the entire module!!! Yowzers. The releaseMemory routine would dump all of this, but that isn't realy called during normal runs of the pipeline as far as I can see.
To make matters worse, there *is* actually a key that we don't update with value handles -- there is a map keyed off of Loop*s. Because LoopInfo *does* release its memory from run to run, it is entirely possible to run SCEV over one function, then over another function, and then lookup a Loop* from the second function but find an entry inserted for the first function! Ouch.
To make matters still worse, there are plenty of updates that *don't* trip a value handle. It seems incredibly unlikely that today GVN or another pass that invalidates SCEV can update values in *just* such a way that a subsequent run of SCEV will incorrectly find lookups in a cache, but it is theoretically possible and would be a nightmare to debug.
With this refactoring, I've fixed all this by actually destroying and recreating the ScalarEvolution object from run to run. Technically, this could increase the amount of malloc traffic we see, but then again it is also technically correct. ;] I don't actually think we're suffering from tons of malloc traffic from SCEV because if we were, the fact that we never clear the memory would seem more likely to have come up as an actual problem before now. So, I've made the simple fix here. If in fact there are serious issues with too much allocation and deallocation, I can work on a clever fix that preserves the allocations (while clearing the data) between each run, but I'd prefer to do that kind of optimization with a test case / benchmark that shows why we need such cleverness (and that can test that we actually make it faster). It's possible that this will make some things faster by making the SCEV caches have higher locality (due to being significantly smaller) so until there is a clear benchmark, I think the simple change is best.
Differential Revision: http://reviews.llvm.org/D12063
llvm-svn: 245193
show more ...
|
Revision tags: studio-1.4, llvmorg-3.7.0-rc2 |
|
#
96ada25b |
| 22-Jul-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM/AA] Remove all of the dead AliasAnalysis pointers being threaded through APIs that are no longer necessary now that the update API has been removed.
This will make changes to the AA interfaces s
[PM/AA] Remove all of the dead AliasAnalysis pointers being threaded through APIs that are no longer necessary now that the update API has been removed.
This will make changes to the AA interfaces significantly less disruptive (I hope). Either way, it seems like a really nice cleanup.
llvm-svn: 242882
show more ...
|
Revision tags: llvmorg-3.7.0-rc1 |
|
#
453f7a14 |
| 01-Jul-2015 |
David Majnemer <david.majnemer@gmail.com> |
[LoopUnroll] Use undef for phis with no value live
We would create a phi node with a zero initialized operand instead of undef in the case where no value was originally available. This was problema
[LoopUnroll] Use undef for phis with no value live
We would create a phi node with a zero initialized operand instead of undef in the case where no value was originally available. This was problematic for x86_mmx which has no null value.
llvm-svn: 241143
show more ...
|
Revision tags: llvmorg-3.6.2, llvmorg-3.6.2-rc1 |
|
#
ea20199b |
| 11-Jun-2015 |
Alexey Samsonov <vonosmas@gmail.com> |
[LoopUnroll] Use IRBuilder to create branch instructions.
Use IRBuilder::Create(Cond)?Br instead of constructing instructions manually with BranchInst::Create(). It's consistent with other uses of I
[LoopUnroll] Use IRBuilder to create branch instructions.
Use IRBuilder::Create(Cond)?Br instead of constructing instructions manually with BranchInst::Create(). It's consistent with other uses of IRBuilder in this pass, and has an additional important benefit:
Using IRBuilder will ensure that new branch instruction will get the same debug location as original terminator instruction it will eventually replace.
For now I'm not adding a testcase, as currently original terminator instruction also lack debug location due to missing debug location propagation in BasicBlock::splitBasicBlock. That is, the testcase will accompany the fix for the latter I'm going to mail soon.
llvm-svn: 239550
show more ...
|
Revision tags: llvmorg-3.6.1, llvmorg-3.6.1-rc1 |
|
#
e178f469 |
| 14-Apr-2015 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[LoopUnrollRuntime] Avoid high-cost trip count computation.
Summary: Runtime unrolling of loops needs to emit an expression to compute the loop's runtime trip-count. Avoid runtime unrolling if this
[LoopUnrollRuntime] Avoid high-cost trip count computation.
Summary: Runtime unrolling of loops needs to emit an expression to compute the loop's runtime trip-count. Avoid runtime unrolling if this computation will be expensive.
Depends on D8993.
Reviewers: atrick
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D8994
llvm-svn: 234846
show more ...
|
#
71190fec |
| 12-Apr-2015 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[LoopUnrollRuntime] Clean up a predicate.
Clean up a predicate I added in r229731, fix the relevant comment and add a test case. The earlier version is confusing to read and was also buggy (probabl
[LoopUnrollRuntime] Clean up a predicate.
Clean up a predicate I added in r229731, fix the relevant comment and add a test case. The earlier version is confusing to read and was also buggy (probably not a coincidence) till Alexey fixed it in r233881.
llvm-svn: 234701
show more ...
|
#
f96cde9f |
| 02-Apr-2015 |
Alexey Samsonov <vonosmas@gmail.com> |
Fix a bug indicated by -fsanitize=shift-exponent.
llvm-svn: 233881
|
Revision tags: llvmorg-3.5.2, llvmorg-3.5.2-rc1 |
|
#
a28d91d8 |
| 10-Mar-2015 |
Mehdi Amini <mehdi.amini@apple.com> |
DataLayout is mandatory, update the API to reflect it with references.
Summary: Now that the DataLayout is a mandatory part of the module, let's start cleaning the codebase. This patch is a first at
DataLayout is mandatory, update the API to reflect it with references.
Summary: Now that the DataLayout is a mandatory part of the module, let's start cleaning the codebase. This patch is a first attempt at doing that.
This patch is not exactly NFC as for instance some places were passing a nullptr instead of the DataLayout, possibly just because there was a default value on the DataLayout argument to many functions in the API. Even though it is not purely NFC, there is no change in the validation.
I turned as many pointer to DataLayout to references, this helped figuring out all the places where a nullptr could come up.
I had initially a local version of this patch broken into over 30 independant, commits but some later commit were cleaning the API and touching part of the code modified in the previous commits, so it seemed cleaner without the intermediate state.
Test Plan:
Reviewers: echristo
Subscribers: llvm-commits
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 231740
show more ...
|
#
65b07b8e |
| 09-Mar-2015 |
Kevin Qin <Kevin.Qin@arm.com> |
Revert r231630 - Run LICM pass after loop unrolling pass.
As it broke llvm bootstrap.
llvm-svn: 231635
|
#
a998735d |
| 09-Mar-2015 |
Kevin Qin <Kevin.Qin@arm.com> |
Run LICM pass after loop unrolling pass.
Runtime unrollng will introduce a runtime check in loop prologue. If the unrolled loop is a inner loop, then the proglogue will be inside the outer loop. LIC
Run LICM pass after loop unrolling pass.
Runtime unrollng will introduce a runtime check in loop prologue. If the unrolled loop is a inner loop, then the proglogue will be inside the outer loop. LICM pass can help to promote the runtime check out if the checked value is loop invariant.
llvm-svn: 231630
show more ...
|
Revision tags: llvmorg-3.6.0, llvmorg-3.6.0-rc4 |
|
#
11b279a8 |
| 18-Feb-2015 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
Partial fix for bug 22589
Don't spend the entire iteration space in the scalar loop prologue if computing the trip count overflows. This change also gets rid of the backedge check in the prologue l
Partial fix for bug 22589
Don't spend the entire iteration space in the scalar loop prologue if computing the trip count overflows. This change also gets rid of the backedge check in the prologue loop and the extra check for overflowing trip-count.
Differential Revision: http://reviews.llvm.org/D7715
llvm-svn: 229731
show more ...
|
Revision tags: llvmorg-3.6.0-rc3, llvmorg-3.6.0-rc2 |
|
#
9198b33b |
| 28-Jan-2015 |
Philip Reames <listmail@philipreames.com> |
Teach SplitBlockPredecessors how to handle landingpad blocks.
Patch by: Igor Laevsky <igor@azulsystems.com>
"Currently SplitBlockPredecessors generates incorrect code in case if basic block we are
Teach SplitBlockPredecessors how to handle landingpad blocks.
Patch by: Igor Laevsky <igor@azulsystems.com>
"Currently SplitBlockPredecessors generates incorrect code in case if basic block we are going to split has a landingpad. Also seems like it is fairly common case among it's users to conditionally call either SplitBlockPredecessors or SplitLandingPadPredecessors. Because of this I think it is reasonable to add this condition directly into SplitBlockPredecessors."
Differential Revision: http://reviews.llvm.org/D7157
llvm-svn: 227390
show more ...
|
#
d450056c |
| 19-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Replace the Pass argument to SplitEdge with specific analyses used and updated.
This may appear to remove handling for things like alias analysis when splitting critical edges here, but in fact
[PM] Replace the Pass argument to SplitEdge with specific analyses used and updated.
This may appear to remove handling for things like alias analysis when splitting critical edges here, but in fact no callers of SplitEdge relied on this. Similarly, all of them wanted to preserve LCSSA if there was any update of the loop info. That makes the interface much simpler.
With this, all of BasicBlockUtils.h is free of Pass arguments and prepared for the new pass manager. This is tho majority of utilities that relied on pass arguments.
llvm-svn: 226459
show more ...
|
#
0eae1120 |
| 19-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Lift the analyses into the interface for SplitLandingPadPredecessors and remove the Pass argument from its interface.
Another step to the utilities being usable with both old and new pass manag
[PM] Lift the analyses into the interface for SplitLandingPadPredecessors and remove the Pass argument from its interface.
Another step to the utilities being usable with both old and new pass managers.
llvm-svn: 226426
show more ...
|
#
b5797b65 |
| 18-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Pull the analyses used for another utility routine into its API rather than relying on the pass object.
This one is a bit annoying, but will pay off. First, supporting this one will make the ne
[PM] Pull the analyses used for another utility routine into its API rather than relying on the pass object.
This one is a bit annoying, but will pay off. First, supporting this one will make the next one much easier, and for utilities like LoopSimplify, this is moving them (slowly) closer to not having to pass the pass object around throughout their APIs.
llvm-svn: 226396
show more ...
|