summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/JumpThreading.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Move getTrue() and getFalse() to 2.5-like APIs.Owen Anderson2009-07-311-2/+3
| | | | llvm-svn: 77685
* Move more code back to 2.5 APIs.Owen Anderson2009-07-301-2/+1
| | | | llvm-svn: 77635
* Move ConstantExpr to 2.5 API.Owen Anderson2009-07-291-1/+1
| | | | llvm-svn: 77494
* Remove Value::getName{Start,End}, the last of the old Name APIs.Daniel Dunbar2009-07-261-3/+3
| | | | llvm-svn: 77152
* Eliminate some uses of DOUT, cerr, and getNameStart().Daniel Dunbar2009-07-261-34/+35
| | | | llvm-svn: 77145
* Revert the ConstantInt constructors back to their 2.5 forms where possible, ↵Owen Anderson2009-07-241-3/+2
| | | | | | thanks to contexts-on-types. More to come. llvm-svn: 77011
* Convert several more passes to use getAnalysisIfAvailable<TargetData>()Dan Gohman2009-07-241-2/+1
| | | | | | instead of getAnalysis<TargetData>(). llvm-svn: 76982
* Get rid of the Pass+Context magic.Owen Anderson2009-07-221-9/+11
| | | | llvm-svn: 76702
* Rename getConstantInt{True|False} to get{True|False} at Chris' behest.Owen Anderson2009-07-211-2/+2
| | | | llvm-svn: 76598
* Revert yesterday's change by removing the LLVMContext parameter to ↵Owen Anderson2009-07-151-1/+1
| | | | | | AllocaInst and MallocInst. llvm-svn: 75863
* Move EVER MORE stuff over to LLVMContext.Owen Anderson2009-07-141-1/+1
| | | | llvm-svn: 75703
* This started as a small change, I swear. Unfortunately, lots of things call ↵Owen Anderson2009-07-091-1/+1
| | | | | | the [I|F]CmpInst constructors. Who knew!? llvm-svn: 75200
* "LLVMContext* " --> "LLVMContext *"Owen Anderson2009-07-061-1/+1
| | | | llvm-svn: 74878
* Thread LLVMContext through the constant folding APIs, which touches a lot of ↵Owen Anderson2009-07-061-1/+1
| | | | | | files. llvm-svn: 74844
* Second batch of passes using LLVMContext.Owen Anderson2009-07-031-8/+11
| | | | llvm-svn: 74753
* fix inverted logic pointed out by John McCall, noticed by inspection.Chris Lattner2009-07-021-1/+1
| | | | | | | This was considering vector intrinsics to have cost 2, but non-vector intrinsics to have cost 1, which is backward. llvm-svn: 74698
* Fix a bunch of other places that used operator[] to test whetherDan Gohman2009-07-021-6/+10
| | | | | | a key is present in a std::map or DenseMap to use find instead. llvm-svn: 74676
* make jump threading handle lexically identical compare instructionsChris Lattner2009-06-191-4/+17
| | | | | | | | as if they were multiple uses of the same instruction. This interacts well with the existing loadpre that j-t does to open up many new jump threads earlier. llvm-svn: 73768
* Teach jump threading to look at comparisons between phi nodes and non-constants.Nick Lewycky2009-06-191-25/+48
| | | | llvm-svn: 73755
* fix some problems spotted by Duncan and Nicolas GeoffrayChris Lattner2009-05-041-2/+2
| | | | llvm-svn: 70872
* * Sink 4 duplicates of edge threading validity checks and DOUT prints intoChris Lattner2009-05-041-71/+84
| | | | | | | | | | ThreadEdge directly. This shares the code, but is just a refactoring. * Make JumpThreading compute the set of loop headers and avoid threading across them. This prevents jump threading from forming irreducible loops (goodness) but also prevents it from threading in other cases that are beneficial (see the comment above FindFunctionBackedges). llvm-svn: 70820
* Fix a debug info dependency in jump threading.Dale Johannesen2009-03-171-2/+5
| | | | llvm-svn: 67064
* this wasn't intended to go in.Chris Lattner2009-03-061-34/+0
| | | | llvm-svn: 66252
* Change various llvm utilities to use PrettyStackTraceProgram inChris Lattner2009-03-061-0/+34
| | | | | | | their main routines. This makes the tools print their argc/argv commands if they crash. llvm-svn: 66248
* Fix PR3353, infinitely jump threading an infinite loop make from switches.Chris Lattner2009-01-191-0/+5
| | | | llvm-svn: 62529
* Fix PR3298, a crash in Jump Threading. Apparently even Chris Lattner2009-01-091-0/+4
| | | | | | jump threading can have bugs, who knew? ;-) llvm-svn: 61983
* remove DebugIterations option. Despite the accusations, Chris Lattner2008-12-081-14/+1
| | | | | | | jump threading has been shown to only expose problems not have bugs itself. I'm sure it's completely bug free! ;-) llvm-svn: 60725
* Start simplifying a switch that has a successor that is a switch.Chris Lattner2008-12-041-0/+74
| | | | llvm-svn: 60534
* add a debugging option to help track down j-t problems.Chris Lattner2008-12-041-1/+14
| | | | llvm-svn: 60514
* Teach jump threading some more simple tricks:Chris Lattner2008-12-031-16/+156
| | | | | | | | | | | | | | | | 1) have it fold "br undef", which does occur with surprising frequency as jump threading iterates. 2) teach j-t to delete dead blocks. This removes the successor edges, reducing the in-edges of other blocks, allowing recursive simplification. 3) Fold things like: br COND, BBX, BBY BBX: br COND, BBZ, BBW which also happens because jump threading iterates. llvm-svn: 60470
* switch a couple more calls to use array_pod_sort.Chris Lattner2008-12-011-1/+2
| | | | llvm-svn: 60337
* Teach jump threading to clean up after itself, DCE and constfolding theChris Lattner2008-12-011-1/+24
| | | | | | | | | new instructions it simplifies. Because we're threading jumps on edges with constants coming in from PHI's, we inherently are exposing a lot more constants to the new block. Folding them and deleting dead conditions allows the cost model in jump threading to be more accurate as it iterates. llvm-svn: 60327
* don't call MergeBasicBlockIntoOnlyPred on a block whose onlyChris Lattner2008-11-281-1/+2
| | | | | | | predecessor is itself. This doesn't make sense, and this is a dead infinite loop anyway. llvm-svn: 60210
* Fix PR3138: if we merge the entry block into another block, make sure toChris Lattner2008-11-271-0/+6
| | | | | | move the other block back up into the entry position! llvm-svn: 60179
* move FindAvailableLoadedValue from JumpThreading to Transforms/Utils.Chris Lattner2008-11-271-63/+3
| | | | llvm-svn: 60166
* move MergeBasicBlockIntoOnlyPred to Transforms/Utils.Chris Lattner2008-11-271-31/+0
| | | | llvm-svn: 60162
* rename ThreadBlock to ProcessBlock, since it does other things thanChris Lattner2008-11-271-4/+4
| | | | | | just simple threading. llvm-svn: 60157
* Make jump threading substantially more powerful, in the following ways:Chris Lattner2008-11-271-0/+273
| | | | | | | | | | | | | | | | | 1. Make it fold blocks separated by an unconditional branch. This enables jump threading to see a broader scope. 2. Make jump threading able to eliminate locally redundant loads when they feed the branch condition of a block. This frequently occurs due to reg2mem running. 3. Make jump threading able to eliminate *partially redundant* loads when they feed the branch condition of a block. This is common in code with lots of loads and stores like C++ code and 255.vortex. This implements thread-loads.ll and rdar://6402033. Per the fixme's, several pieces of this should be moved into Transforms/Utils. llvm-svn: 60148
* Tidy up several unbeseeming casts from pointer to intptr_t.Dan Gohman2008-09-041-1/+1
| | | | llvm-svn: 55779
* Enable first-class aggregates support.Dan Gohman2008-07-231-14/+1
| | | | | | | | | | | | Remove the GetResultInst instruction. It is still accepted in LLVM assembly and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove support for return instructions with multiple values. These are auto-upgraded to use InsertValueInst instructions. The IRBuilder still accepts multiple-value returns, and auto-upgrades them to InsertValueInst instructions. llvm-svn: 53941
* Fix some constructs that gcc-4.4 warns about.Duncan Sands2008-05-271-2/+2
| | | | llvm-svn: 51591
* Tidy up BasicBlock::getFirstNonPHI, and change a bunch of places toDan Gohman2008-05-231-2/+1
| | | | | | use it instead of duplicating its functionality. llvm-svn: 51499
* Fix typo.Matthijs Kooijman2008-05-201-1/+1
| | | | llvm-svn: 51303
* Clean up the use of static and anonymous namespaces. This turned upDan Gohman2008-05-131-2/+4
| | | | | | | several things that were neither in an anonymous namespace nor static but not intended to be global. llvm-svn: 51017
* restore doxygen comment.Chris Lattner2008-05-091-17/+16
| | | | llvm-svn: 50881
* Improve pass documentation and comments.Gordon Henriksen2008-05-081-16/+17
| | | | | | Patch by Matthijs Kooijman! llvm-svn: 50861
* fix typo Duncan noticedChris Lattner2008-05-061-1/+1
| | | | llvm-svn: 50699
* Fix a crash when threading a block that includes a MRV call result.Chris Lattner2008-05-051-4/+19
| | | | | | | | | DemoteRegToStack doesn't work with MRVs yet, because it relies on the ability to load/store things. This fixes PR2285. llvm-svn: 50667
* Don't infininitely thread branches when a threaded edgeChris Lattner2008-04-251-0/+22
| | | | | | | | | | | | | goes back to the block, e.g.: Threading edge through bool from 'bb37.us.thread3829' to 'bb37.us' with cost: 1, across block: bb37.us: ; preds = %bb37.us.thread3829, %bb37.us, %bb33 %D1361.1.us = phi i32 [ %tmp36, %bb33 ], [ %D1361.1.us, %bb37.us ], [ 0, %bb37.us.thread3829 ] ; <i32> [#uses=2] %tmp39.us = icmp eq i32 %D1361.1.us, 0 ; <i1> [#uses=1] br i1 %tmp39.us, label %bb37.us, label %bb42.us llvm-svn: 50251
* Start doing the significantly useful part of jump threading: handle casesChris Lattner2008-04-221-7/+83
| | | | | | | | | | | | | | | | | | | | | | | | where a comparison has a phi input and that phi is a constant. For example, stuff like: Threading edge through bool from 'bb2149' to 'bb2231' with cost: 1, across block: bb2237: ; preds = %bb2231, %bb2149 %tmp2328.rle = phi i32 [ %tmp2232, %bb2231 ], [ %tmp2232439, %bb2149 ] ; <i32> [#uses=2] %done.0 = phi i32 [ %done.2, %bb2231 ], [ 0, %bb2149 ] ; <i32> [#uses=1] %tmp2239 = icmp eq i32 %done.0, 0 ; <i1> [#uses=1] br i1 %tmp2239, label %bb2231, label %bb2327 or bb38.i298: ; preds = %bb33.i295, %bb1693 %tmp39.i296.rle = phi %struct.ibox* [ null, %bb1693 ], [ %tmp39.i296.rle1109, %bb33.i295 ] ; <%struct.ibox*> [#uses=2] %minspan.1.i291.reg2mem.1 = phi i32 [ 32000, %bb1693 ], [ %minspan.0.i288, %bb33.i295 ] ; <i32> [#uses=1] %tmp40.i297 = icmp eq %struct.ibox* %tmp39.i296.rle, null ; <i1> [#uses=1] br i1 %tmp40.i297, label %implfeeds.exit311, label %bb43.i301 This triggers thousands of times in spec. llvm-svn: 50110
OpenPOWER on IntegriCloud