summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Fix InstCombine/2004-01-13-InstCombineInvokePHI.ll, which also fixes lotsChris Lattner2004-01-141-4/+20
| | | | | | of C++ programs in Shootout-C++, including lists1 and moments, etc llvm-svn: 10845
* Fix bug in previous checkinChris Lattner2004-01-121-1/+3
| | | | llvm-svn: 10798
* Eliminate use of ConstantHandling and ConstantExpr::getShift interfacesChris Lattner2004-01-121-39/+58
| | | | llvm-svn: 10796
* Do not hack on volatile loads. I'm not sure what the point of a volatile loadChris Lattner2004-01-121-0/+2
| | | | | | from constant memory is, but lets not take chances. llvm-svn: 10765
* Factor code out into the Utils libraryChris Lattner2003-12-191-23/+3
| | | | llvm-svn: 10530
* * Finegrainify namespacificationChris Lattner2003-12-071-4/+17
| | | | | | * Transform: free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X llvm-svn: 10303
* Implement feature: InstCombine/2003-11-13-ConstExprCastCall.llChris Lattner2003-11-131-1/+2
| | | | llvm-svn: 9981
* Put all LLVM code into the llvm namespace, as per bug 109.Brian Gaeke2003-11-111-0/+4
| | | | llvm-svn: 9903
* Fix flawed logic that was breaking several SPEC benchmarks, including gzip ↵Chris Lattner2003-11-051-3/+3
| | | | | | and crafty. llvm-svn: 9731
* Fix bug with previous implementation:Chris Lattner2003-11-051-4/+11
| | | | | | | | - // ~(c-X) == X-(c-1) == X+(-c+1) + // ~(c-X) == X-c-1 == X+(-c-1) Implement: C - ~X == X + (1+C) llvm-svn: 9715
* Minor cleanup, plus implement InstCombine/xor.ll:test17Chris Lattner2003-11-041-3/+17
| | | | llvm-svn: 9711
* Implement InstCombine/xor.ll:test(15|16)Chris Lattner2003-11-041-1/+8
| | | | llvm-svn: 9708
* Implement InstCombine/cast-set.ll:test6[a]. This improves code generated forChris Lattner2003-11-031-6/+57
| | | | | | a hot function in em3d llvm-svn: 9673
* Implement InstCombine/cast-set.ll: test1, test2, test7Chris Lattner2003-11-031-15/+41
| | | | llvm-svn: 9670
* Fix bug with zero sized castsChris Lattner2003-11-031-1/+1
| | | | llvm-svn: 9667
* Fix bug in previous checkinChris Lattner2003-11-021-1/+1
| | | | llvm-svn: 9656
* Implement transmogriphication of allocation instructionsChris Lattner2003-11-021-2/+33
| | | | llvm-svn: 9654
* Fix bug: 2003-10-29-CallSiteResolve.ll & PR70Chris Lattner2003-10-301-1/+11
| | | | llvm-svn: 9600
* Added LLVM project notice to the top of every C++ source file.John Criswell2003-10-201-0/+7
| | | | | | Header files will be on the way. llvm-svn: 9298
* Decrease usage of use_size()Chris Lattner2003-10-151-12/+12
| | | | llvm-svn: 9135
* whoops, don't accidentally lose variable namesChris Lattner2003-10-071-1/+1
| | | | llvm-svn: 8955
* Fix bug: InstCombine/cast.ll:test11 / PR#7Chris Lattner2003-10-071-1/+23
| | | | llvm-svn: 8954
* Refactor code a bitChris Lattner2003-10-071-4/+12
| | | | llvm-svn: 8952
* Fix bug in previous checkinChris Lattner2003-10-071-0/+1
| | | | llvm-svn: 8922
* Minor speedups for the instcombine passChris Lattner2003-10-061-17/+26
| | | | llvm-svn: 8894
* Implement InstCombine/add.ll:test17 & 18Chris Lattner2003-10-021-0/+16
| | | | llvm-svn: 8817
* Squelch warningChris Lattner2003-09-221-1/+1
| | | | llvm-svn: 8659
* Implement InstCombine/and.ll:test(15|16)Chris Lattner2003-09-191-0/+27
| | | | llvm-svn: 8607
* pull a large nested conditional out into its own functionChris Lattner2003-09-191-70/+91
| | | | llvm-svn: 8605
* Implement InstCombine/add.ll:test(15|16)Chris Lattner2003-09-191-0/+37
| | | | llvm-svn: 8604
* Simplify codeChris Lattner2003-09-111-9/+6
| | | | | | Implement InstCombine/mul.ll:test9 llvm-svn: 8488
* Fix spell-o'sChris Lattner2003-09-101-1/+1
| | | | llvm-svn: 8431
* Implement instcombine optimizations:Chris Lattner2003-08-131-1/+97
| | | | | | | | (A <setcc1> B) logicalop (A <setcc2> B) -> (A <setcc3> B) or true or false Where setcc[123] is one of the 6 setcc instructions, and logicalop is one of: And, Or, Xor llvm-svn: 7828
* Generalize some of the add tests to allow for reassociation to take placeChris Lattner2003-08-131-10/+130
| | | | llvm-svn: 7825
* Implement InstCombine/2003-08-12-AllocaNonNull.llChris Lattner2003-08-131-2/+4
| | | | llvm-svn: 7807
* Do not cannonicalize (X != 0) into (cast X to bool)Chris Lattner2003-08-131-79/+68
| | | | llvm-svn: 7806
* Change cannonicalization rules: add X,X is represented as multiplies, multipliesChris Lattner2003-08-131-8/+24
| | | | | | of a power of two are represented as a shift. llvm-svn: 7803
* Allow pulling logical operations through shifts.Chris Lattner2003-08-121-16/+61
| | | | | | This implements InstCombine/shift.ll:test14* llvm-svn: 7793
* Simplify codeChris Lattner2003-08-121-11/+8
| | | | llvm-svn: 7783
* Implement testcases InstCombine/or.ll:test16/test17Chris Lattner2003-08-121-0/+13
| | | | llvm-svn: 7782
* Instcombine: (A >> c1) << c2 for signed integersChris Lattner2003-07-241-10/+12
| | | | llvm-svn: 7295
* Reorganization of code, no functional changes.Chris Lattner2003-07-241-47/+48
| | | | | | Now it shoudl be a bit more efficient llvm-svn: 7292
* Allow folding several instructions into casts, which can simplify a lotChris Lattner2003-07-241-7/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | of codes. For example, short kernel (short t1) { t1 >>= 8; t1 <<= 8; return t1; } became: short %kernel(short %t1.1) { %tmp.3 = shr short %t1.1, ubyte 8 ; <short> [#uses=1] %tmp.5 = cast short %tmp.3 to int ; <int> [#uses=1] %tmp.7 = shl int %tmp.5, ubyte 8 ; <int> [#uses=1] %tmp.8 = cast int %tmp.7 to short ; <short> [#uses=1] ret short %tmp.8 } before, now it becomes: short %kernel(short %t1.1) { %tmp.3 = shr short %t1.1, ubyte 8 ; <short> [#uses=1] %tmp.8 = shl short %tmp.3, ubyte 8 ; <short> [#uses=1] ret short %tmp.8 } which will become: short %kernel(short %t1.1) { %tmp.3 = and short %t1.1, 0xFF00 ret short %tmp.3 } This implements cast-set.ll:test4 and test5 llvm-svn: 7290
* Add commentsChris Lattner2003-07-231-0/+9
| | | | llvm-svn: 7283
* Remove explicit check for: not (not X) = X, it is already handled because ↵Chris Lattner2003-07-231-10/+16
| | | | | | | | | xor is commutative - InstCombine: (X & C1) ^ C2 --> (X & C1) | C2 iff (C1&C2) == 0 - InstCombine: (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2 llvm-svn: 7282
* InstCombine: (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0Chris Lattner2003-07-231-9/+11
| | | | llvm-svn: 7272
* - InstCombine: (X | C1) & C2 --> X & C2 iff C1 & C1 == 0Chris Lattner2003-07-231-10/+33
| | | | | | | - InstCombine: (X | C) & C --> C - InstCombine: (X | C1) & C2 --> (X | (C1&C2)) & C2 llvm-svn: 7269
* IC: (X & C1) | C2 --> (X | C2) & (C1|C2)Chris Lattner2003-07-231-1/+26
| | | | | | | | | IC: (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2) We are now guaranteed that all 'or's will be inside of 'and's, and all 'and's will be inside of 'xor's, if the second operands are constants. llvm-svn: 7264
* IC: (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)Chris Lattner2003-07-231-4/+16
| | | | | | Minor code cleanup llvm-svn: 7262
* InstCombine: (X ^ 4) == 8 --> X == 12Chris Lattner2003-07-231-1/+6
| | | | llvm-svn: 7260
OpenPOWER on IntegriCloud