Revision tags: llvmorg-3.6.2-rc1 |
|
#
b7f02d37 |
| 09-Jun-2015 |
Alexey Samsonov <vonosmas@gmail.com> |
[BasicBlockUtils] Set debug locations for instructions created in SplitBlockPredecessors.
Test Plan: regression test suite
Reviewers: eugenis, dblaikie
Subscribers: llvm-commits
Differential Revi
[BasicBlockUtils] Set debug locations for instructions created in SplitBlockPredecessors.
Test Plan: regression test suite
Reviewers: eugenis, dblaikie
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10343
llvm-svn: 239438
show more ...
|
Revision tags: llvmorg-3.6.1 |
|
#
833f34d8 |
| 12-May-2015 |
Pete Cooper <peter_cooper@apple.com> |
Convert PHI getIncomingValue() to foreach over incoming_values(). NFC.
We already had a method to iterate over all the incoming values of a PHI. This just changes all eligible code to use it.
Ine
Convert PHI getIncomingValue() to foreach over incoming_values(). NFC.
We already had a method to iterate over all the incoming values of a PHI. This just changes all eligible code to use it.
Ineligible code included anything which cared about the index, or was also trying to get the i'th incoming BB.
llvm-svn: 237169
show more ...
|
Revision tags: llvmorg-3.6.1-rc1, llvmorg-3.5.2, llvmorg-3.5.2-rc1, llvmorg-3.6.0, llvmorg-3.6.0-rc4, 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 ...
|
#
37df2cfb |
| 19-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Remove the Pass argument from all of the critical edge splitting APIs and replace it and numerous booleans with an option struct.
The critical edge splitting API has a really large surface of f
[PM] Remove the Pass argument from all of the critical edge splitting APIs and replace it and numerous booleans with an option struct.
The critical edge splitting API has a really large surface of flags and so it seems worth burning a small option struct / builder. This struct can be constructed with the various preserved analyses and then flags can be flipped in a builder style.
The various users are now responsible for directly passing along their analysis information. This should be enough for the critical edge splitting to work cleanly with the new pass manager as well.
This API is still pretty crufty and could be cleaned up a lot, but I've focused on this change just threading an option struct rather than a pass through the API.
llvm-svn: 226456
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 ...
|
#
32c52c7e |
| 18-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Sink the specific analyses preserved by SplitBlock into its interface, removing Pass from its interface.
This also makes those analyses optional so that passes which don't even preserve these (
[PM] Sink the specific analyses preserved by SplitBlock into its interface, removing Pass from its interface.
This also makes those analyses optional so that passes which don't even preserve these (or use them) can skip the logic entirely.
llvm-svn: 226394
show more ...
|
#
b5c11535 |
| 18-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Replace another Pass argument with specific analyses that are optionally updated by MergeBlockIntoPredecessors.
No functionality changed, just refactoring to clear the way for the new pass mana
[PM] Replace another Pass argument with specific analyses that are optionally updated by MergeBlockIntoPredecessors.
No functionality changed, just refactoring to clear the way for the new pass manager.
llvm-svn: 226392
show more ...
|
#
5eee895c |
| 18-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Lift the actual analyses used into the inferface rather than accepting a Pass and querying it for analyses.
This is necessary to allow the utilities to work both with the old and new pass manag
[PM] Lift the actual analyses used into the inferface rather than accepting a Pass and querying it for analyses.
This is necessary to allow the utilities to work both with the old and new pass managers, and I also think this makes the interface much more clear and helps the reader know what analyses the utility can actually handle. I plan to repeat this process iteratively to clean up all the pass utilities.
llvm-svn: 226386
show more ...
|
#
691addc2 |
| 18-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Now that LoopInfo isn't in the Pass type hierarchy, it is much cleaner to derive from the generic base.
Thise removes a ton of boiler plate code and somewhat strange and pointless indirections.
[PM] Now that LoopInfo isn't in the Pass type hierarchy, it is much cleaner to derive from the generic base.
Thise removes a ton of boiler plate code and somewhat strange and pointless indirections. It also remove a bunch of the previously needed friend declarations. To fully remove these, I also lifted the verify logic into the generic LoopInfoBase, which seems good anyways -- it is generic and useful logic even for the machine side.
llvm-svn: 226385
show more ...
|
#
4f8f307c |
| 17-Jan-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Split the LoopInfo object apart from the legacy pass, creating a LoopInfoWrapperPass to wire the object up to the legacy pass manager.
This switches all the clients of LoopInfo over and paves t
[PM] Split the LoopInfo object apart from the legacy pass, creating a LoopInfoWrapperPass to wire the object up to the legacy pass manager.
This switches all the clients of LoopInfo over and paves the way to port LoopInfo to the new pass manager. No functionality change is intended with this iteration.
llvm-svn: 226373
show more ...
|
Revision tags: llvmorg-3.6.0-rc1, llvmorg-3.5.1, llvmorg-3.5.1-rc2, llvmorg-3.5.1-rc1 |
|
#
e5ea424a |
| 19-Nov-2014 |
Kostya Serebryany <kcc@google.com> |
Introduce llvm::SplitAllCriticalEdges
Summary: move the code from BreakCriticalEdges::runOnFunction() into a separate utility function llvm::SplitAllCriticalEdges() so that it can be used independen
Introduce llvm::SplitAllCriticalEdges
Summary: move the code from BreakCriticalEdges::runOnFunction() into a separate utility function llvm::SplitAllCriticalEdges() so that it can be used independently. No functionality change intended.
Test Plan: check-llvm
Reviewers: nlewycky
Reviewed By: nlewycky
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D6313
llvm-svn: 222288
show more ...
|
Revision tags: llvmorg-3.5.0, llvmorg-3.5.0-rc4, llvmorg-3.5.0-rc3, llvmorg-3.5.0-rc2, llvmorg-3.5.0-rc1 |
|
#
6c99015f |
| 21-Jul-2014 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges."
This reverts commit r213474 (and r213475), which causes a miscompile on a stage2 LTO build. I'll reply on
Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges."
This reverts commit r213474 (and r213475), which causes a miscompile on a stage2 LTO build. I'll reply on the list in a moment.
llvm-svn: 213562
show more ...
|
#
d11beffe |
| 20-Jul-2014 |
Manuel Jacob <me@manueljacob.de> |
[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges.
Summary: This patch introduces two new iterator ranges and updates existing code to use it. No functional change i
[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges.
Summary: This patch introduces two new iterator ranges and updates existing code to use it. No functional change intended.
Test Plan: All tests (make check-all) still pass.
Reviewers: dblaikie
Reviewed By: dblaikie
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D4481
llvm-svn: 213474
show more ...
|
#
818f5c48 |
| 15-Jul-2014 |
Peter Collingbourne <peter@pcc.me.uk> |
Give SplitBlockAndInsertIfThen the ability to update a domtree.
llvm-svn: 213045
|
Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1 |
|
#
5bdf72ce |
| 28-Apr-2014 |
Chandler Carruth <chandlerc@gmail.com> |
Fix rampant quadratic behavior in UpdatePHINodes. The operation of mapping from a basic block to an incoming value, either for removal or just lookup, is linear in the number of predecessors, and we
Fix rampant quadratic behavior in UpdatePHINodes. The operation of mapping from a basic block to an incoming value, either for removal or just lookup, is linear in the number of predecessors, and we were doing this for every entry in the 'Preds' list which is in many cases almost all of them!
Unfortunately, the fixes are quite ugly. PHI nodes just don't make this operation easy. The efficient way to fix this is to have a clever 'remove_if' operation on PHI nodes that lets us do a single pass over all the incoming values of the original PHI node, extracting the ones we care about. Then we could quickly construct the new phi node from this list. This would remove the remaining underlying quadratic movement of unrelated incoming values and the need for silly backwards looping to "minimize" how often we hit the quadratic case.
This is the last obvious fix for PR19499. It shaves another 20% off the compile time for me, and while UpdatePHINodes remains in the profile, most of the time is now stemming from the well known inefficiencies of LVI and jump threading.
llvm-svn: 207409
show more ...
|
#
e73658dd |
| 28-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++] Use 'nullptr'.
llvm-svn: 207394
|
Revision tags: llvmorg-3.4.1, llvmorg-3.4.1-rc2 |
|
#
f40110f4 |
| 25-Apr-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++] Use 'nullptr'. Transforms edition.
llvm-svn: 207196
|
Revision tags: llvmorg-3.4.1-rc1 |
|
#
2275a01a |
| 19-Mar-2014 |
Evgeniy Stepanov <eugeni.stepanov@gmail.com> |
Set debug info for instructions inserted in SplitBlockAndInsertIfThen.
llvm-svn: 204230
|
#
4220e9c1 |
| 04-Mar-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[Modules] Move ValueHandle into the IR library where Value itself lives.
Move the test for this class into the IR unittests as well.
This uncovers that ValueMap too is in the IR library. Ironically
[Modules] Move ValueHandle into the IR library where Value itself lives.
Move the test for this class into the IR unittests as well.
This uncovers that ValueMap too is in the IR library. Ironically, the unittest for ValueMap is useless in the Support library (honestly, so was the ValueHandle test) and so it already lives in the IR unittests. Mmmm, tasty layering.
llvm-svn: 202821
show more ...
|
#
73523021 |
| 13-Jan-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[PM] Split DominatorTree into a concrete analysis result object which can be used by both the new pass manager and the old.
This removes it from any of the virtual mess of the pass interfaces and le
[PM] Split DominatorTree into a concrete analysis result object which can be used by both the new pass manager and the old.
This removes it from any of the virtual mess of the pass interfaces and lets it derive cleanly from the DominatorTreeBase<> template. In turn, tons of boilerplate interface can be nuked and it turns into a very straightforward extension of the base DominatorTree interface.
The old analysis pass is now a simple wrapper. The names and style of this split should match the split between CallGraph and CallGraphWrapperPass. All of the users of DominatorTree have been updated to match using many of the same tricks as with CallGraph. The goal is that the common type remains the resulting DominatorTree rather than the pass. This will make subsequent work toward the new pass manager significantly easier.
Also in numerous places things became cleaner because I switched from re-running the pass (!!! mid way through some other passes run!!!) to directly recomputing the domtree.
llvm-svn: 199104
show more ...
|
#
5ad5f15c |
| 13-Jan-2014 |
Chandler Carruth <chandlerc@gmail.com> |
[cleanup] Move the Dominators.h and Verifier.h headers into the IR directory. These passes are already defined in the IR library, and it doesn't make any sense to have the headers in Analysis.
Long
[cleanup] Move the Dominators.h and Verifier.h headers into the IR directory. These passes are already defined in the IR library, and it doesn't make any sense to have the headers in Analysis.
Long term, I think there is going to be a much better way to divide these matters. The dominators code should be fully separated into the abstract graph algorithm and have that put in Support where it becomes obvious that evn Clang's CFGBlock's can use it. Then the verifier can manually construct dominance information from the Support-driven interface while the Analysis library can provide a pass which both caches, reconstructs, and supports a nice update API.
But those are very long term, and so I don't want to leave the really confusing structure until that day arrives.
llvm-svn: 199082
show more ...
|
Revision tags: llvmorg-3.4.0 |
|
#
530e207d |
| 23-Dec-2013 |
Kostya Serebryany <kcc@google.com> |
[asan] don't unpoison redzones on function exit in use-after-return mode.
Summary: Before this change the instrumented code before Ret instructions looked like: <Unpoison Frame Redzones> if (Fra
[asan] don't unpoison redzones on function exit in use-after-return mode.
Summary: Before this change the instrumented code before Ret instructions looked like: <Unpoison Frame Redzones> if (Frame != OriginalFrame) // I.e. Frame is fake <Poison Complete Frame>
Now the instrumented code looks like: if (Frame != OriginalFrame) // I.e. Frame is fake <Poison Complete Frame> else <Unpoison Frame Redzones>
Reviewers: eugenis
Reviewed By: eugenis
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2458
llvm-svn: 197907
show more ...
|
#
a9164e9e |
| 19-Dec-2013 |
Evgeniy Stepanov <eugeni.stepanov@gmail.com> |
Add an explicit insert point argument to SplitBlockAndInsertIfThen.
Currently SplitBlockAndInsertIfThen requires that branch condition is an Instruction itself, which is very inconvenient, because i
Add an explicit insert point argument to SplitBlockAndInsertIfThen.
Currently SplitBlockAndInsertIfThen requires that branch condition is an Instruction itself, which is very inconvenient, because it is sometimes an Operator, or even a Constant.
llvm-svn: 197677
show more ...
|