| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 30588
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
or when splitting loops with a common header into multiple loops. In particular
the old code would always insert the preheader before the old loop header. This
is disasterous in cases where the loop hasn't been rotated. For example, it can
produce code like:
.. outside the loop...
jmp LBB1_2 #bb13.outer
LBB1_1: #bb1
movsd 8(%esp,%esi,8), %xmm1
mulsd (%edi), %xmm1
addsd %xmm0, %xmm1
addl $24, %edi
incl %esi
jmp LBB1_3 #bb13
LBB1_2: #bb13.outer
leal (%edx,%eax,8), %edi
pxor %xmm1, %xmm1
xorl %esi, %esi
LBB1_3: #bb13
movapd %xmm1, %xmm0
cmpl $4, %esi
jl LBB1_1 #bb1
Note that the loop body is actually LBB1_1 + LBB1_3, which means that the
loop now contains an uncond branch WITHIN it to jump around the inserted
loop header (LBB1_2). Doh.
This patch changes the preheader insertion code to insert it in the right
spot, producing this code:
... outside the loop, fall into the header ...
LBB1_1: #bb13.outer
leal (%edx,%eax,8), %esi
pxor %xmm0, %xmm0
xorl %edi, %edi
jmp LBB1_3 #bb13
LBB1_2: #bb1
movsd 8(%esp,%edi,8), %xmm0
mulsd (%esi), %xmm0
addsd %xmm1, %xmm0
addl $24, %esi
incl %edi
LBB1_3: #bb13
movapd %xmm0, %xmm1
cmpl $4, %edi
jl LBB1_2 #bb1
Totally crazy, no branch in the loop! :)
llvm-svn: 30587
|
|
|
|
|
|
|
|
| |
reachable, making it general purpose enough for use by InsertPreheaderForLoop.
Eliminate custom dominfo updating code in InsertPreheaderForLoop, using
UpdateDomInfoForRevectoredPreds instead.
llvm-svn: 30586
|
|
|
|
| |
llvm-svn: 30555
|
|
|
|
| |
llvm-svn: 30552
|
|
|
|
|
|
| |
with the right answer.
llvm-svn: 30550
|
|
|
|
|
|
| |
Fixes infinite loop in resolve().
llvm-svn: 30540
|
|
|
|
| |
llvm-svn: 30535
|
|
|
|
|
|
|
| |
this comparison, but never checked it. Whoops, no wonder we miscompiled
177.mesa!
llvm-svn: 30511
|
|
|
|
| |
llvm-svn: 30505
|
|
|
|
| |
llvm-svn: 30504
|
|
|
|
|
|
| |
critical in the linux kernel for pointer analysis correctness
llvm-svn: 30496
|
|
|
|
| |
llvm-svn: 30482
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 30465
|
|
|
|
|
|
|
|
| |
... args, remove the '...'.
This is Transforms/DeadArgElim/dead_vaargs.ll
llvm-svn: 30459
|
|
|
|
| |
llvm-svn: 30456
|
|
|
|
| |
llvm-svn: 30450
|
|
|
|
|
|
| |
Use isLogicalShift/isArithmeticShift to simplify code.
llvm-svn: 30448
|
|
|
|
| |
llvm-svn: 30405
|
|
|
|
|
|
| |
MultiSource/Applications/Burg
llvm-svn: 30397
|
|
|
|
|
|
|
|
| |
revealed these
changes to be incorrect. They just weren't showing up in any of our current testcases.
llvm-svn: 30385
|
|
|
|
|
|
|
|
|
| |
DLL* linkages got full (I hope) codegeneration support in C & both x86
assembler backends.
External weak linkage added for future use, we don't provide any
codegeneration, etc. support for it.
llvm-svn: 30374
|
|
|
|
|
|
|
| |
This folds unconditional branches that are often produced by code
specialization.
llvm-svn: 30307
|
|
|
|
| |
llvm-svn: 30305
|
|
|
|
| |
llvm-svn: 30304
|
|
|
|
| |
llvm-svn: 30303
|
|
|
|
| |
llvm-svn: 30298
|
|
|
|
| |
llvm-svn: 30281
|
|
|
|
|
|
| |
Handle this. This fixes PR908 and Transforms/LICM/2006-09-12-DeadUserOfSunkInstr.ll
llvm-svn: 30275
|
|
|
|
| |
llvm-svn: 30266
|
|
|
|
| |
llvm-svn: 30251
|
|
|
|
|
|
| |
bit. This fixes Regression/Transforms/TailDup/MergeTest.ll
llvm-svn: 30237
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 30234
|
|
|
|
| |
llvm-svn: 30231
|
|
|
|
|
|
| |
This implements select.ll::test18.
llvm-svn: 30230
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
lowerinvoke regtests.
llvm-svn: 30115
|
|
|
|
|
|
|
| |
Call these from your backend to enjoy setjmp/longjmp goodness, see
lib/Target/IA64/IA64ISelLowering.cpp for an example
llvm-svn: 30095
|
|
|
|
|
|
| |
their recursive calls.
llvm-svn: 30057
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
corrects missing optimization opportunity removing cases from a switch.
llvm-svn: 30009
|
|
|
|
|
|
|
|
| |
another Value) weren't being found by findProperties.
This fixes predsimplify.ll test6, a missed optimization opportunity.
llvm-svn: 29991
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
exit blocks. The output is dependent on addresses of basic block.
Add and use Loop::getUniqueExitBlocks.
llvm-svn: 29966
|
|
|
|
| |
llvm-svn: 29950
|
|
|
|
|
|
|
| |
and simplifies expressions. This implements the optimization described
in PR807.
llvm-svn: 29947
|
|
|
|
|
|
|
|
| |
speedup of
gccas on 252.eon
llvm-svn: 29936
|
|
|
|
| |
llvm-svn: 29932
|