Nick Lewycky
58a910dff5
Simplify logic further.
...
Ensure that we copy KnownProperties before calling visitBasicBlock, else
we may leak properties into blocks where they don't belong.
llvm-svn: 30705
2006-10-03 17:36:01 +00:00
Nick Lewycky
1d00f3e144
Simplify, now that predsimplify depends on break-crit-edges.
...
Fix SwitchInst where dest-block is the same as one of the cases.
llvm-svn: 30700
2006-10-03 15:19:11 +00:00
Nick Lewycky
755f801adc
Move break-crit-edges before the predicate simplifier. Allows us to
...
optimize in more cases.
llvm-svn: 30699
2006-10-03 14:52:23 +00:00
Chris Lattner
7d19067c42
Fix a bug from r1.391 of this file, where we checked the size instead of
...
the alignment when promoting allocations. This implements
InstCombine/cast.ll:test32
llvm-svn: 30682
2006-10-01 19:40:58 +00:00
Chris Lattner
6ab03f6a08
Eliminate ConstantBool::True and ConstantBool::False. Instead, provide
...
ConstantBool::getTrue() and ConstantBool::getFalse().
llvm-svn: 30665
2006-09-28 23:35:22 +00:00
Chris Lattner
e03ca2ca4a
set DEBUG_TYPE right
...
llvm-svn: 30623
2006-09-27 04:58:23 +00:00
Nick Lewycky
059c79264f
Style changes only. Remove dead code, fix a comment.
...
llvm-svn: 30588
2006-09-23 15:13:08 +00:00
Chris Lattner
51c95cdd82
Fix Transforms/IndVarsSimplify/2006-09-20-LFTR-Crash.ll
...
llvm-svn: 30555
2006-09-21 05:12:20 +00:00
Nick Lewycky
fde9c308b2
Don't rewrite ConstantExpr::get.
...
llvm-svn: 30552
2006-09-21 01:05:35 +00:00
Nick Lewycky
d74c55f483
Once we're down to "setcc type constant1, constant2", at least come up
...
with the right answer.
llvm-svn: 30550
2006-09-20 23:02:24 +00:00
Nick Lewycky
cfff1c3f86
Use a total ordering to compare instructions.
...
Fixes infinite loop in resolve().
llvm-svn: 30540
2006-09-20 17:04:01 +00:00
Andrew Lenharth
44cb67af5c
simplify
...
llvm-svn: 30535
2006-09-20 15:37:57 +00:00
Chris Lattner
380c7e9a59
We went through all that trouble to compute whether it was safe to transform
...
this comparison, but never checked it. Whoops, no wonder we miscompiled
177.mesa!
llvm-svn: 30511
2006-09-20 04:44:59 +00:00
Evan Cheng
cd3f6ff0e5
Back out Chris' last set of changes. This breaks 177.mesa and povray somehow.
...
llvm-svn: 30505
2006-09-20 01:39:40 +00:00
Evan Cheng
453280b94d
80 col.
...
llvm-svn: 30504
2006-09-20 01:10:02 +00:00
Andrew Lenharth
4f339bebb0
If we have an add, do it in the pointer realm, not the int realm. This is critical in the linux kernel for pointer analysis correctness
...
llvm-svn: 30496
2006-09-19 18:24:51 +00:00
Chris Lattner
12f52faf93
implement select.ll:test19-22
...
llvm-svn: 30482
2006-09-19 06:18:21 +00:00
Nick Lewycky
b9c5483a93
Walk down the dominator tree instead of the control flow graph. That means
...
that we can't modify the CFG any more, at least not until it's possible
to update the dominator tree (PR217).
llvm-svn: 30469
2006-09-18 21:09:35 +00:00
Chris Lattner
de07792595
Fix an infinite loop building the CFE
...
llvm-svn: 30465
2006-09-18 18:27:05 +00:00
Chris Lattner
4922a0e53f
Implement InstCombine/cast.ll:test31. This speeds up 462.libquantum by 26%.
...
llvm-svn: 30456
2006-09-18 05:27:43 +00:00
Chris Lattner
420c4bcc8d
Implement Transforms/InstCombine/shift-sra.ll:test0
...
llvm-svn: 30450
2006-09-18 04:31:40 +00:00
Chris Lattner
b3f24c91b0
Rewrite shift/and/compare sequences to promote better licm of the RHS.
...
Use isLogicalShift/isArithmeticShift to simplify code.
llvm-svn: 30448
2006-09-18 04:22:48 +00:00
Chris Lattner
850465d53f
Fix Transforms/InstCombine/2006-09-15-CastToBool.ll and PR913
...
llvm-svn: 30405
2006-09-16 03:14:10 +00:00
Nick Lewycky
12efffc96b
Add some more consistency checks.
...
llvm-svn: 30305
2006-09-13 19:32:53 +00:00
Nick Lewycky
51ce8d6b46
Fix unionSets so that it can merge correctly.
...
llvm-svn: 30304
2006-09-13 19:24:01 +00:00
Nick Lewycky
3a4dc7b489
Erase dead instructions.
...
llvm-svn: 30298
2006-09-13 18:55:37 +00:00
Chris Lattner
1d7ec20a4d
An sinkable instruction may exist with uses, if those uses are in dead blocks.
...
Handle this. This fixes PR908 and Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
llvm-svn: 30275
2006-09-12 19:17:09 +00:00
Chris Lattner
d28627009a
Fix PR905 and InstCombine/2006-09-11-EmptyStructCrash.ll
...
llvm-svn: 30266
2006-09-11 21:43:16 +00:00
Nick Lewycky
e94f42a740
Skip the linear search if the answer is already known.
...
llvm-svn: 30251
2006-09-11 17:23:34 +00:00
Chris Lattner
d1f8e07808
Allow tail duplication in more cases, relaxing the previous restriction a
...
bit. This fixes Regression/Transforms/TailDup/MergeTest.ll
llvm-svn: 30237
2006-09-10 18:17:58 +00:00
Nick Lewycky
9a22d7b60f
Replace EquivalenceClasses with a custom-built data structure. Many common
...
operations (like findProperties) should be faster, at the expense of
unionSets being slower in cases that are rare in practise.
Don't erase a dead Instruction. This fixes a memory corruption issue.
llvm-svn: 30235
2006-09-10 02:27:07 +00:00
Chris Lattner
0468987592
Implement Transforms/InstCombine/hoist_instr.ll
...
llvm-svn: 30234
2006-09-09 22:02:56 +00:00
Chris Lattner
d79dc79831
Turn div X, (Cond ? Y : 0) -> div X, Y
...
This implements select.ll::test18.
llvm-svn: 30230
2006-09-09 20:26:32 +00:00
Chris Lattner
c465046e65
Throttle back tail duplication to avoid creating really ugly sequences of code.
...
For Transforms/TailDup/if-tail-dup.ll, f.e., it produces:
_foo:
movl 8(%esp), %eax
movl 4(%esp), %ecx
testl $1, %ecx
je LBB1_2 #cond_next
LBB1_1: #cond_true
movl $1, (%eax)
LBB1_2: #cond_next
testl $2, %ecx
je LBB1_4 #cond_next10
LBB1_3: #cond_true6
movl $1, 4(%eax)
LBB1_4: #cond_next10
testl $4, %ecx
je LBB1_6 #cond_next18
LBB1_5: #cond_true14
movl $1, 8(%eax)
LBB1_6: #cond_next18
testl $8, %ecx
je LBB1_8 #return
LBB1_7: #cond_true22
movl $1, 12(%eax)
ret
LBB1_8: #return
ret
instead of:
_foo:
movl 4(%esp), %eax
testl $2, %eax
sete %cl
movl 8(%esp), %edx
testl $1, %eax
je LBB1_2 #cond_next
LBB1_1: #cond_true
movl $1, (%edx)
testb %cl, %cl
jne LBB1_4 #cond_next10
jmp LBB1_3 #cond_true6
LBB1_2: #cond_next
testb %cl, %cl
jne LBB1_4 #cond_next10
LBB1_3: #cond_true6
movl $1, 4(%edx)
testl $4, %eax
je LBB1_6 #cond_next18
jmp LBB1_5 #cond_true14
LBB1_4: #cond_next10
testl $4, %eax
je LBB1_6 #cond_next18
LBB1_5: #cond_true14
movl $1, 8(%edx)
testl $8, %eax
je LBB1_8 #return
jmp LBB1_7 #cond_true22
LBB1_6: #cond_next18
testl $8, %eax
je LBB1_8 #return
LBB1_7: #cond_true22
movl $1, 12(%edx)
ret
LBB1_8: #return
ret
llvm-svn: 30158
2006-09-07 21:30:15 +00:00
Nick Lewycky
8e5599354a
Improve handling of SelectInst.
...
Reorder operations to remove duplicated work.
Fix to leave floating-point types out of the optimization.
Add tests to predsimplify.ll for SwitchInst and SelectInst handling.
llvm-svn: 30055
2006-09-02 19:40:38 +00:00
Nick Lewycky
f6f529d008
Don't confuse canonicalize and lookup. Fixes predsimplify.reg4.ll. Also
...
corrects missing optimization opportunity removing cases from a switch.
llvm-svn: 30009
2006-09-01 03:26:35 +00:00
Nick Lewycky
08674ab707
Properties where both Values weren't in the union (as being equal to
...
another Value) weren't being found by findProperties.
This fixes predsimplify.ll test6, a missed optimization opportunity.
llvm-svn: 29991
2006-08-31 00:39:16 +00:00
Nick Lewycky
5f8f9af65c
Move to using the EquivalenceClass ADT. Removes SynSets.
...
If a branch's condition has become a ConstantBool, simplify it immediately.
Removing the edge saves work and exposes up more optimization opportunities
in the pass.
Add support for SelectInst.
llvm-svn: 29970
2006-08-30 02:46:48 +00:00
Devang Patel
f489d0f85c
Do not rely on std::sort and std::erase to get list of unique
...
exit blocks. The output is dependent on addresses of basic block.
Add and use Loop::getUniqueExitBlocks.
llvm-svn: 29966
2006-08-29 22:29:16 +00:00
Owen Anderson
a8a2e5c666
Clean up a bit.
...
llvm-svn: 29950
2006-08-29 06:10:56 +00:00
Nick Lewycky
b2e8ae1700
Add PredicateSimplifier pass. Collapses equal variables into one form
...
and simplifies expressions. This implements the optimization described
in PR807.
llvm-svn: 29947
2006-08-28 22:44:55 +00:00
Owen Anderson
62c84fe371
Make LoopUnroll fold excessive BasicBlocks. This results in a significant speedup of
...
gccas on 252.eon
llvm-svn: 29936
2006-08-28 02:09:46 +00:00
Chris Lattner
c2d3d3112e
eliminate RegisterOpt. It does the same thing as RegisterPass.
...
llvm-svn: 29925
2006-08-27 22:42:52 +00:00
Chris Lattner
3d27be1333
s|llvm/Support/Visibility.h|llvm/Support/Compiler.h|
...
llvm-svn: 29911
2006-08-27 12:54:02 +00:00
Owen Anderson
403b95af47
Fix a crash related to updating Phi nodes in the original header block. This was
...
causing a crash in 175.vpr
llvm-svn: 29887
2006-08-25 22:13:55 +00:00
Owen Anderson
8e4b029573
Add an assertion to check that we're really preserving LCSSA.
...
llvm-svn: 29886
2006-08-25 22:12:36 +00:00
Owen Anderson
8cca95cf5d
Reapply the indvars patch, since nothing blew up last night.
...
llvm-svn: 29874
2006-08-25 17:41:25 +00:00
Owen Anderson
94446a4267
Revert my previous patch. Since there are some major changes that went in today,
...
I'm going to wait to put this in HEAD until tomorrow, so as not to clutter the nightly
tester.
llvm-svn: 29868
2006-08-25 03:45:57 +00:00
Owen Anderson
15a6423431
Specify that indvars actually preserve LCSSA. This has been done for a while, but I
...
forgot to put in the analysis usage.
llvm-svn: 29867
2006-08-25 03:32:13 +00:00
Owen Anderson
e001d811ba
Implement unrolling of multiblock loops. This significantly improves the
...
utility of the LoopUnroll pass.
Also, add a testcase for multiblock-loop unrolling.
llvm-svn: 29859
2006-08-24 21:28:19 +00:00