Misha Brukman
dfa5f83c8e
Spell `occurrence' correctly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8425 91177308-0d34-0410-b5e6-96231b3b80d8
2003-09-09 21:54:45 +00:00
Chris Lattner
36143fc444
Add support for the unwind instruction
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8408 91177308-0d34-0410-b5e6-96231b3b80d8
2003-09-08 18:54:55 +00:00
Chris Lattner
61c1e7e32d
Do not hoist volatile loads
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8399 91177308-0d34-0410-b5e6-96231b3b80d8
2003-09-08 18:17:14 +00:00
Chris Lattner
3186d275f7
Fix bug: TailDuplicate/2003-08-31-UnreachableBlocks.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8276 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-31 21:17:44 +00:00
Chris Lattner
a15854c9fe
ScalarRepl does not modify the CFG. Say so!
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8243 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-31 00:45:13 +00:00
Chris Lattner
99b28e632f
Fix bug: SCCP/2003-08-26-InvokeHandling.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8152 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-27 01:08:35 +00:00
Chris Lattner
086cb002d2
Fix bug: TailDup/2003-08-23-InvalidatedPointers.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8078 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-23 20:08:30 +00:00
Misha Brukman
ef6a6a69ff
The word dependent' has no
a'.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8030 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-21 22:14:26 +00:00
Misha Brukman
5560c9d49c
Spell `necessary' correctly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7944 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-18 14:43:39 +00:00
Brian Gaeke
bf3c4cfaad
Factory methods for function passes now return type FunctionPass *.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7839 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-14 06:09:32 +00:00
Chris Lattner
aa9c1f13a1
Implement instcombine optimizations:
...
(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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7828 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 20:16:26 +00:00
Chris Lattner
564a727969
Generalize some of the add tests to allow for reassociation to take place
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7825 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 19:01:45 +00:00
Chris Lattner
fb5be090f5
Assign arguments different ranks so they get grouped together
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7813 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 16:16:26 +00:00
Chris Lattner
3ccd17ea2a
Implement InstCombine/2003-08-12-AllocaNonNull.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7807 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 05:38:46 +00:00
Chris Lattner
934754bed6
Do not cannonicalize (X != 0) into (cast X to bool)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7806 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 05:33:12 +00:00
Chris Lattner
e92d2f450a
Change cannonicalization rules: add X,X is represented as multiplies, multiplies
...
of a power of two are represented as a shift.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7803 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 04:18:28 +00:00
Chris Lattner
df17af1dc7
Allow pulling logical operations through shifts.
...
This implements InstCombine/shift.ll:test14*
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7793 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 21:53:41 +00:00
Chris Lattner
e9608e37fc
Fix bug: Reassociate/2003-08-12-InfiniteLoop.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7792 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 21:45:24 +00:00
Chris Lattner
6007cb6c4d
Assign finer grained ranks, make sure to reassociate top-level after reassociating bottom level
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7787 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 20:14:27 +00:00
Chris Lattner
e132d95b62
Simplify code
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7783 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 19:17:27 +00:00
Chris Lattner
67ca768927
Implement testcases InstCombine/or.ll:test16/test17
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7782 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 19:11:07 +00:00
Tanya Lattner
11a49a722f
Fixed minor bug in SafeToHoist and made some changes suggested by Chris.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7614 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 20:39:02 +00:00
Tanya Lattner
9966c03aad
Fixed LICM bug that hoists trapping instructions that are not guaranteed to execute.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7612 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-05 18:45:46 +00:00
Chris Lattner
6806f5614d
DEBUG got moved to Support/Debug.h
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7492 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-01 22:15:03 +00:00
Chris Lattner
943c713c65
Instcombine: (A >> c1) << c2 for signed integers
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7295 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-24 18:38:56 +00:00
Chris Lattner
08fd7abb42
Reorganization of code, no functional changes.
...
Now it shoudl be a bit more efficient
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7292 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-24 17:52:58 +00:00
Chris Lattner
24c8e38455
Allow folding several instructions into casts, which can simplify a lot
...
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7290 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-24 17:35:25 +00:00
Chris Lattner
2cd9196e87
Add comments
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7283 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 21:41:57 +00:00
Chris Lattner
eca0c5c379
Remove explicit check for: not (not X) = X, it is already handled because 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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7282 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 21:37:07 +00:00
Chris Lattner
06782f804f
InstCombine: (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7272 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 19:36:21 +00:00
Chris Lattner
5840326ae6
- InstCombine: (X | C1) & C2 --> X & C2 iff C1 & C1 == 0
...
- InstCombine: (X | C) & C --> C
- InstCombine: (X | C1) & C2 --> (X | (C1&C2)) & C2
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7269 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 19:25:52 +00:00
Chris Lattner
ad44ebfff0
IC: (X & C1) | C2 --> (X | C2) & (C1|C2)
...
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7264 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 18:29:44 +00:00
Chris Lattner
c6a8aff3f6
IC: (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)
...
Minor code cleanup
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7262 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 17:57:01 +00:00
Chris Lattner
00b1a7e23e
InstCombine: (X ^ 4) == 8 --> X == 12
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7260 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 17:26:36 +00:00
Chris Lattner
bc5d414823
IC: (X & 5) == 13 --> false
...
IC: (X | 8) == 4 --> false
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7257 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 17:02:11 +00:00
Chris Lattner
c07736a397
Simplify code by using ConstantInt::getRawValue instead of checking to see
...
whether the constant is signed or unsigned, then casting
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7252 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 15:22:26 +00:00
Chris Lattner
00f185fbfd
Fix bug: TailDup/2003-07-22-InfiniteLoop.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7243 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 03:32:41 +00:00
Chris Lattner
1ba5bcd1ae
- InstCombine (cast (xor A, B) to bool) ==> (setne A, B)
...
- InstCombine (cast (and X, (1 << size(X)-1)) to bool) ==> x < 0
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7241 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-22 21:46:59 +00:00
John Criswell
067947380c
Added code that checks to see if a global variable is external before replacing
...
a load of the global variable with the variable's constant value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7216 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-21 19:42:57 +00:00
John Criswell
a676b78791
Dinakar and I fixed a bug where we were trying to get the initializer of
...
an external constant. Since external constants don't have initializers, we
were failing on an assert() call in llvm/GlobalVariable.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7193 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-17 19:06:55 +00:00
Chris Lattner
833b8a4181
Add support for elimination of load instruction from global constants
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6912 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-26 05:06:25 +00:00
Chris Lattner
0af1fab019
Instcombine: X * -1 -> -X
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6904 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-25 17:09:20 +00:00
Chris Lattner
837e42ccef
Fix bug: ADCE/2003-06-24-BadSuccessor.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6891 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-24 23:02:45 +00:00
Chris Lattner
99c91e021a
Do not mark ALL terminators live if any instruciton in the block is live. We only
...
want to mark it live if it is an unconditional branch. This fixes bug:
ADCE/2002-05-28-Crash.ll and makes this pass _much_ more useful.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6887 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-24 21:49:45 +00:00
Chris Lattner
38b5ae4b48
Fix bug: SCCP/2003-06-24-OverdefinedPHIValue.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6883 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-24 20:29:52 +00:00
Chris Lattner
fcd74e2e31
Fix bug: TailDup/2003-06-24-Simpleloop.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6881 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-24 19:48:06 +00:00
Chris Lattner
79d35b3f8b
Implement new transforms:
...
Replace (cast (sub A, B) to bool) -> (setne A, B)
Replace (cast (add A, B) to bool) -> (setne A, -B)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6873 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-23 21:59:52 +00:00
Chris Lattner
066ab6ac80
Add paranoia checking
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6856 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-22 20:46:00 +00:00
Chris Lattner
ea635cd072
Test change
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6852 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-22 20:25:27 +00:00
Chris Lattner
7a7bef4355
Initial checkin of Tail duplication pass.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6846 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-22 20:10:28 +00:00
Chris Lattner
797249bc13
Instcombine cast (getelementptr Ptr, 0, 0, 0) to ... into: cast Ptr to ...
...
This fixes type safety problems in a variety of benchmarks that were confusing
DSA.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6837 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-21 23:12:02 +00:00
Chris Lattner
9fe3886678
Implement the functionality of InstCombine/call.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6783 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-19 17:00:31 +00:00
Chris Lattner
bea68b3021
Don't corrupt memory when removing an instruction from the program, but
...
not the worklist
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6733 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-17 03:57:18 +00:00
Chris Lattner
34e353e560
Fix bug: ADCE/2003-06-11-InvalidCFG.ll
...
This was because we were deleting large chunks of functions without an exit block, because the post-dominance
information was not useful. This broke crafty and twolf.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6698 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-16 12:10:45 +00:00
Chris Lattner
9b5fd22bd9
Fix bug: InstCombine/2003-06-05-BranchInvertInfLoop.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6630 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-05 20:12:51 +00:00
Chris Lattner
40f5d70db4
Clean up previous code.
...
Add new combination to turn seteq X, 0 -> not(cast X to bool)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6604 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-04 05:10:11 +00:00
Chris Lattner
c4d10ebcd7
Implement combination of boolean not with branch
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6599 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-04 04:46:00 +00:00
Chris Lattner
074d84c746
Implement xform: (X != 0) -> (bool)X
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6506 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-01 03:35:25 +00:00
Chris Lattner
b37923f9a1
Okay totally give up on trying to optimize aggregates that cannot be completely
...
broken up into their elements. Too many programs break because of this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6440 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-30 19:22:14 +00:00
Chris Lattner
26d2ca1d13
add a check that allows the SRoA pass to avoid breaking programs, even if their
...
behavior is technically undefined
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6438 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-30 18:09:57 +00:00
Chris Lattner
261d686737
Fix bug: ScalarRepl/2003-05-30-MultiLevel.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6428 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-30 05:26:30 +00:00
Chris Lattner
5e062a1eda
Fix bug: ScalarRepl/2003-05-29-ArrayFail.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6425 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-30 04:15:41 +00:00
Chris Lattner
faf4cc2da0
Add comment
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6415 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-29 20:26:30 +00:00
Chris Lattner
2a9c847f25
Fix bug: Instcombine/2003-05-27-ConstExprCrash.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6352 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-27 16:40:51 +00:00
Chris Lattner
d10376bee5
* Actually USE the statistic that we made
...
* Implement SRoA for arrays
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6349 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-27 16:09:27 +00:00
Chris Lattner
ed7b41ea90
Implementation of the simple "scalar replacement of aggregates" transformation
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6346 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-27 15:45:27 +00:00
Chris Lattner
bd4ecf769d
Fix bug: InstCombine/2003-05-26-CastMiscompile.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6338 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-26 23:41:32 +00:00
Chris Lattner
de579f11ff
Remove using declarations
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6306 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-22 22:00:07 +00:00
Chris Lattner
c54e2b8f84
Minor cleanups.
...
This hunk:
- } else if (Src->getNumOperands() == 2 && Src->use_size() == 1) {
+ } else if (Src->getNumOperands() == 2) {
Allows GEP folding to be more aggressive, which reduces the number of instructions
and can dramatically speed up BasicAA in some cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6286 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-22 19:07:21 +00:00
Misha Brukman
82c89b9f3a
Hopefully, the final fix for `[Pp]ropogate'.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6251 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-20 21:01:22 +00:00
Misha Brukman
f117cc9ee6
s/convertable/convertible/g
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6248 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-20 18:45:36 +00:00
Chris Lattner
1d16ec7381
Handle va_arg instruction correctly
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6030 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-08 02:50:13 +00:00
Chris Lattner
e96fda3002
Fix spelling
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5983 91177308-0d34-0410-b5e6-96231b3b80d8
2003-05-02 19:26:34 +00:00
Chris Lattner
3f2ec3925f
Fix another case where constexprs could cause a crash
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5972 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-30 22:34:06 +00:00
Chris Lattner
fe32e0c578
Fix constant folding of constexprs
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5971 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-30 22:19:10 +00:00
Chris Lattner
619f825640
Fix bug: ADCE/2003-04-25-PHIPostDominateProblem.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5952 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-25 22:53:27 +00:00
Chris Lattner
bceb2b0061
Fix major problem with PHI node traversal: rechecking PHIs should go into
...
the visit function. The worklist is for when their lattice value changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5927 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-25 03:35:10 +00:00
Chris Lattner
9de28289f8
Minor non-functional changes:
...
* Spell propagate right
* Improve performance of phi node handling
* Delete using directive
* Other minor changes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5920 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-25 02:50:03 +00:00
Chris Lattner
e408e25132
Remove unnecesary &*'s
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5872 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-23 16:37:45 +00:00
Chris Lattner
fb242b6edc
Change the interface to constant expressions to allow automatic folding
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5793 91177308-0d34-0410-b5e6-96231b3b80d8
2003-04-16 22:40:51 +00:00
Chris Lattner
e941291a7a
Initial checkin of PRE on LLVM. This implementation is still lacking in
...
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5759 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-31 19:55:43 +00:00
Chris Lattner
c277eaa41e
Move BreakCriticalEdges pass to lib/Transforms/Utils
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5754 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-21 21:43:19 +00:00
Chris Lattner
c8802d2c16
Add the following instcombine xforms:
...
- 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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5743 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-11 00:12:48 +00:00
Chris Lattner
a4f445b28c
Implement: -A*-B == A*B
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5740 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 23:23:04 +00:00
Chris Lattner
a27231acc0
Add new transformation: // (~A | ~B) == (~(A & B))
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5738 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 23:13:59 +00:00
Chris Lattner
8d96964e29
Generalize not and neg comparison testers to allow constant to be considered 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
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5736 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 23:06:50 +00:00
Chris Lattner
4f98c56936
Generalize (A+c1)+c2 optimization to work with all associative operators
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5733 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 21:43:22 +00:00
Chris Lattner
28ba1aad99
Minor change, no functionality diff
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5731 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 19:20:30 +00:00
Chris Lattner
ea34005404
Fix bug: (x << 100) wasn't folded to 0, but (x >> 100) was (when x is unsigned)
...
Implement new shift optimizations for shifting the result of a shift.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5729 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 19:16:08 +00:00
Chris Lattner
cb40a3749a
Implement: (A|B)^B == A & (~B)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5728 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 18:24:17 +00:00
Chris Lattner
decd0812ec
Implement %test7 in InstCombine/getelementptr.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5704 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-05 22:33:14 +00:00
Chris Lattner
0252e49f6d
Convert LICM over to use AliasSetTracker. Besides being nicer, this automatically
...
allows LICM to use access sizes to help alias analysis be more precise.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5693 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-03 23:32:45 +00:00
Chris Lattner
fb743a937f
Change the mem2reg interface to accept a TargetData argument
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5685 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-03 17:25:18 +00:00
Chris Lattner
caadc93f7b
Fix bug: LICM/2003-02-28-PromoteDifferentType.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5675 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-28 19:21:40 +00:00
Chris Lattner
8601a9bf54
Fix bug: 2003-02-27-StoreSinkPHIs.ll
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5658 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-27 21:59:36 +00:00
Chris Lattner
2d0a4a4eb8
Convert to work with new AliasAnalysis interface by conservatively assuming all pointers are arbitrarily large accesses
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5636 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-26 19:28:57 +00:00
Chris Lattner
f0a93ed9c5
Rename Instruction::hasSideEffects() -> mayWriteToMemory()
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5620 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-24 20:48:32 +00:00
Chris Lattner
2e6e741b73
Initial implementation of Loop invariant memory->scalar promotion
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5613 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-24 03:52:32 +00:00
Chris Lattner
ad3448c917
4 new transformations:
...
* X*C + X --> X * (C+1)
* X + X*C --> X * (C+1)
* X - X*C --> X * (1-C)
* X*C - X --> X * (C-1)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5592 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-18 19:57:07 +00:00
Chris Lattner
a2881961b9
Add a variety of new transformations:
...
* 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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5587 91177308-0d34-0410-b5e6-96231b3b80d8
2003-02-18 19:28:33 +00:00