summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar
Commit message (Collapse)AuthorAgeFilesLines
...
* s/convertable/convertible/gMisha Brukman2003-05-201-1/+1
| | | | llvm-svn: 6248
* Fix long standing bugChris Lattner2003-05-151-1/+1
| | | | llvm-svn: 6232
* Fix bug: LoopPreheaders/2003-05-12-PreheaderExitOfChild.llChris Lattner2003-05-121-5/+19
| | | | llvm-svn: 6153
* Handle va_arg instruction correctlyChris Lattner2003-05-081-0/+1
| | | | llvm-svn: 6030
* Fix spellingChris Lattner2003-05-021-1/+1
| | | | llvm-svn: 5983
* Fix Bug: LowerSwitch/2003-05-01-PHIProblem.llChris Lattner2003-05-011-2/+12
| | | | llvm-svn: 5979
* Fix another case where constexprs could cause a crashChris Lattner2003-04-301-5/+2
| | | | llvm-svn: 5972
* Fix constant folding of constexprsChris Lattner2003-04-301-6/+3
| | | | llvm-svn: 5971
* Fix bug: ADCE/2003-04-25-PHIPostDominateProblem.llChris Lattner2003-04-251-9/+10
| | | | llvm-svn: 5952
* Fix major problem with PHI node traversal: rechecking PHIs should go intoChris Lattner2003-04-251-1/+1
| | | | | | the visit function. The worklist is for when their lattice value changes. llvm-svn: 5927
* Minor non-functional changes:Chris Lattner2003-04-251-61/+47
| | | | | | | | | * Spell propagate right * Improve performance of phi node handling * Delete using directive * Other minor changes llvm-svn: 5920
* Remove unnecesary &*'sChris Lattner2003-04-2310-17/+17
| | | | llvm-svn: 5872
* New pass to lower switch instructions to branch instructionsChris Lattner2003-04-231-0/+102
| | | | llvm-svn: 5865
* Minor cleanupsChris Lattner2003-04-231-6/+6
| | | | llvm-svn: 5863
* Change the interface to constant expressions to allow automatic foldingChris Lattner2003-04-161-1/+1
| | | | llvm-svn: 5793
* Initial checkin of PRE on LLVM. This implementation is still lacking inChris Lattner2003-03-311-0/+614
| | | | | | | | | | | | | | | several ways: * Load expressions are not PRE'd well. Alias Analysis should be used to get accurate information when computing anticipatibility. * The expression collection implementation does not handle PHI nodes properly, thus the implementation misses many opportunities to PRE. * This code could be sped up quite a bit Despite these flaws, the code seems to work well, and handles PR's as one would expect. llvm-svn: 5759
* Move BreakCriticalEdges pass to lib/Transforms/UtilsChris Lattner2003-03-211-155/+0
| | | | llvm-svn: 5754
* Add the following instcombine xforms:Chris Lattner2003-03-111-29/+74
| | | | | | | | - Implement simple reassociation: (A|c1)|(B|c2) == (A|B)|(c1|c2) - (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 - (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 llvm-svn: 5743
* Implement: -A*-B == A*BChris Lattner2003-03-101-0/+4
| | | | llvm-svn: 5740
* Add new transformation: // (~A | ~B) == (~(A & B))Chris Lattner2003-03-101-8/+19
| | | | llvm-svn: 5738
* Generalize not and neg comparison testers to allow constant to be considered ↵Chris Lattner2003-03-101-27/+41
| | | | | | | | | | | | | | | | | | | | not'able and neg'able. This allows optimization of this: int %test4(int %A, int %B) { %a = xor int %A, -1 %c = and int %a, 5 ; 5 = ~c2 %d = xor int %c, -1 ret int %d } into this: int %test4(int %A, int %B) { ; No predecessors! %c.demorgan = or int %A, -6 ; <int> [#uses=1] ret int %c.demorgan } llvm-svn: 5736
* Generalize (A+c1)+c2 optimization to work with all associative operatorsChris Lattner2003-03-101-35/+50
| | | | llvm-svn: 5733
* Minor change, no functionality diffChris Lattner2003-03-101-3/+3
| | | | llvm-svn: 5731
* Fix bug: (x << 100) wasn't folded to 0, but (x >> 100) was (when x is unsigned)Chris Lattner2003-03-101-7/+48
| | | | | | Implement new shift optimizations for shifting the result of a shift. llvm-svn: 5729
* Implement: (A|B)^B == A & (~B)Chris Lattner2003-03-101-0/+25
| | | | llvm-svn: 5728
* Implement %test7 in InstCombine/getelementptr.llChris Lattner2003-03-051-7/+21
| | | | llvm-svn: 5704
* Convert LICM over to use AliasSetTracker. Besides being nicer, this ↵Chris Lattner2003-03-031-164/+45
| | | | | | | | automatically allows LICM to use access sizes to help alias analysis be more precise. llvm-svn: 5693
* Change the mem2reg interface to accept a TargetData argumentChris Lattner2003-03-032-3/+8
| | | | llvm-svn: 5685
* Fix bug: LICM/2003-02-28-PromoteDifferentType.llChris Lattner2003-02-281-2/+8
| | | | llvm-svn: 5675
* Fix bug I introduced yesterday :(Chris Lattner2003-02-281-1/+2
| | | | llvm-svn: 5669
* Fix bug: LICM/2003-02-27-PreheaderExitNodeUpdate.llChris Lattner2003-02-281-1/+5
| | | | llvm-svn: 5667
* Fix bug: 2003-02-27-PreheaderExitNodeUpdate.ll by updating exit node infoChris Lattner2003-02-271-0/+16
| | | | llvm-svn: 5664
* Add a new assertion to check that stuff is happening rightChris Lattner2003-02-271-3/+8
| | | | | | | Ironically the exit block modification code wasn't updating the exit block information itself. Fix this. llvm-svn: 5659
* Fix bug: 2003-02-27-StoreSinkPHIs.llChris Lattner2003-02-271-1/+4
| | | | llvm-svn: 5658
* * Don't forget to update Loop information!Chris Lattner2003-02-271-3/+5
| | | | | | | | * Remove bogus assertion: there may be a single outside predecessor and still need a new loop-preheader if the predecessor has multiple successors. See bug: LICM/2003-02-27-PreheaderProblem.ll llvm-svn: 5655
* * Significant changes to the preheader insertion pass:Chris Lattner2003-02-271-42/+219
| | | | | | | | | - Now we perform loop exit-block splitting to ensure exit blocks are always dominated by the loop header. - We now preserve dominance frontier information - This fixes bug: LICM/2003-02-26-LoopExitNotDominated.ll llvm-svn: 5652
* Convert to work with new AliasAnalysis interface by conservatively assuming ↵Chris Lattner2003-02-261-6/+6
| | | | | | all pointers are arbitrarily large accesses llvm-svn: 5636
* Rename Instruction::hasSideEffects() -> mayWriteToMemory()Chris Lattner2003-02-242-2/+2
| | | | llvm-svn: 5620
* Initial implementation of Loop invariant memory->scalar promotionChris Lattner2003-02-241-33/+328
| | | | llvm-svn: 5613
* Split mem2reg promotion into two parts: a function which does the work, andChris Lattner2003-02-221-0/+59
| | | | | | a pass which wraps the function. This allows other passes to use the functionality llvm-svn: 5610
* 4 new transformations:Chris Lattner2003-02-181-0/+42
| | | | | | | | | * X*C + X --> X * (C+1) * X + X*C --> X * (C+1) * X - X*C --> X * (1-C) * X*C - X --> X * (C-1) llvm-svn: 5592
* Add a variety of new transformations:Chris Lattner2003-02-181-48/+140
| | | | | | | | | | | | | | | | * A & ~A == 0 * A / (2^c) == A >> c if unsigned * 0 / A == 0 * 1.0 * A == A * A * (2^c) == A << c * A ^ ~A == -1 * A | ~A == -1 * 0 % X = 0 * A % (2^c) == A & (c-1) if unsigned * A - (A & B) == A & ~B * -1 - A == ~A llvm-svn: 5587
* Fix typoChris Lattner2003-02-011-1/+1
| | | | llvm-svn: 5458
* Fix bug: ADCE/2003-01-22-PredecessorProblem.llChris Lattner2003-01-231-7/+18
| | | | llvm-svn: 5405
* Fix a huge performance problem in reassociate by introducing aChris Lattner2002-12-151-1/+7
| | | | | | rank map cache for instruction ranks llvm-svn: 5030
* Minor changes:Chris Lattner2002-12-151-19/+13
| | | | | | | | * Reword comment to make more clear * Don't print out BB's after modification made * Don't delete and new an instruction when we need to move something, just move it. llvm-svn: 5029
* Remove dead codeChris Lattner2002-12-071-32/+0
| | | | llvm-svn: 4952
* Fix bug: 2002-12-05-MissedConstProp.ll pointed out by Casey CarterChris Lattner2002-12-051-1/+2
| | | | llvm-svn: 4935
* - Eliminated the deferred symbol table stuff in Module & Function, it reallyChris Lattner2002-11-201-5/+4
| | | | | | wasn't an optimization and it was causing lots of bugs. llvm-svn: 4779
* Fix warningChris Lattner2002-11-091-2/+4
| | | | llvm-svn: 4649
OpenPOWER on IntegriCloud