| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
preserves
LCSSA.
llvm-svn: 28739
|
| |
|
|
|
|
|
|
| |
assert
on this.
llvm-svn: 28738
|
| |
|
|
|
|
|
|
| |
post-increment value, should be first cast to the appropriated type (to the
type of the common expr). Otherwise, the rewrite of a use based on (common +
iv) may end up with an incorrect type.
llvm-svn: 28735
|
| |
|
|
|
|
| |
require LCSSA.
llvm-svn: 28734
|
| |
|
|
| |
llvm-svn: 28714
|
| |
|
|
|
|
| |
PPC/altivec
llvm-svn: 28698
|
| |
|
|
| |
llvm-svn: 28694
|
| |
|
|
| |
llvm-svn: 28693
|
| |
|
|
| |
llvm-svn: 28680
|
| |
|
|
| |
llvm-svn: 28678
|
| |
|
|
|
|
| |
actually going on.
llvm-svn: 28677
|
| |
|
|
| |
llvm-svn: 28664
|
| |
|
|
|
|
|
| |
to link in the implementation. Thanks to Anton Korobeynikov for figuring out
what was going on here.
llvm-svn: 28660
|
| |
|
|
| |
llvm-svn: 28642
|
| |
|
|
|
|
|
|
|
|
| |
code (while cloning) it often gets the branch/switch instructions. Since it
knows that edges of the CFG are dead, it need not clone (or even look) at
the obviously dead blocks. This should speed up the inliner substantially on
code where there are lots of inlinable calls to functions with constant
arguments. On C++ code in particular, this kicks in.
llvm-svn: 28641
|
| |
|
|
| |
llvm-svn: 28632
|
| |
|
|
| |
llvm-svn: 28619
|
| |
|
|
|
|
|
| |
reimplement getValueDominatingFunction to walk the DominanceTree rather than
just searching blindly.
llvm-svn: 28618
|
| |
|
|
|
|
|
| |
but for sub, it really does! Fix fixes a miscompilation of fibheap_cut in
llvmgcc4.
llvm-svn: 28600
|
| |
|
|
| |
llvm-svn: 28599
|
| |
|
|
|
|
|
| |
is now theoretically feature-complete. It has not, however, been thoroughly
test, and is still considered experimental.
llvm-svn: 28529
|
| |
|
|
|
|
|
| |
other calculations on each individually, rather than trying to delay it and do
them all at the end.
llvm-svn: 28527
|
| |
|
|
|
|
|
|
| |
the iterated Dominance Frontier of the loop-closure Phi's. This is the
second phase of the LCSSA pass. The third phase (coming soon) will be to
update all uses of loop variables to use the loop-closure Phi's instead.
llvm-svn: 28524
|
| |
|
|
|
|
| |
ldecod, lencod, and SPASS.
llvm-svn: 28523
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
makes it so that it constant folds instructions on the fly. This is good
for several reasons:
0. Many instructions are constant foldable after inlining, particularly if
inlining a call with constant arguments.
1. Without this, the inliner has to allocate memory for all of the instructions
that can be constant folded, then a subsequent pass has to delete them. This
gets the job done without this extra work.
2. This makes the inliner *pass* a bit more aggressive: in particular, it
partially solves a phase order issue where the inliner would inline lots
of code that folds away to nothing, but think that the resultant function
is big because of this code that will be gone. Now the code never exists.
This is the first part of a 2-step process. The second part will be smart
enough to see when this implicit constant folding propagates a constant into
a branch or switch instruction, making CFG edges dead.
This implements Transforms/Inline/inline_constprop.ll
llvm-svn: 28521
|
| |
|
|
| |
llvm-svn: 28519
|
| |
|
|
|
|
| |
given it's opcode, typeand operands.
llvm-svn: 28517
|
| |
|
|
| |
llvm-svn: 28512
|
| |
|
|
| |
llvm-svn: 28507
|
| |
|
|
|
|
| |
there's still a lot of work to be done on it.
llvm-svn: 28506
|
| |
|
|
| |
llvm-svn: 28503
|
| |
|
|
|
|
| |
and documentation updates soo.
llvm-svn: 28495
|
| |
|
|
| |
llvm-svn: 28490
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 28489
|
| |
|
|
|
|
|
| |
the program. This exposes more opportunities for the instcombiner, and implements
vec_shuffle.ll:test6
llvm-svn: 28487
|
| |
|
|
|
|
| |
extractelement from the SV's source. This implement vec_shuffle.ll:test[45]
llvm-svn: 28485
|
| |
|
|
|
|
| |
array scopes possibly accessing valid memory in outer subscripts.
llvm-svn: 28478
|
| |
|
|
|
|
| |
This implements Transforms/InstCombine/2006-05-10-InvalidIndexUndef.ll
llvm-svn: 28450
|
| |
|
|
|
|
| |
by Anton Korobeynikov! This is a step towards closing PR786.
llvm-svn: 28447
|
| |
|
|
| |
llvm-svn: 28422
|
| |
|
|
| |
llvm-svn: 28395
|
| |
|
|
|
|
| |
Patch written by Domagoj Babic!
llvm-svn: 28367
|
| |
|
|
|
|
| |
to the new module. Patch provided by Nick Lewycky!
llvm-svn: 28349
|
| |
|
|
| |
llvm-svn: 28289
|
| |
|
|
| |
llvm-svn: 28286
|
| |
|
|
| |
llvm-svn: 28284
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bitfield now gives this code:
_plus:
lwz r2, 0(r3)
rlwimi r2, r2, 0, 1, 31
xoris r2, r2, 32768
stw r2, 0(r3)
blr
instead of this:
_plus:
lwz r2, 0(r3)
srwi r4, r2, 31
slwi r4, r4, 31
addis r4, r4, -32768
rlwimi r2, r4, 0, 0, 0
stw r2, 0(r3)
blr
this can obviously still be improved.
llvm-svn: 28275
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
currently very limited, but can be extended in the future. For example,
we now compile:
uint %test30(uint %c1) {
%c2 = cast uint %c1 to ubyte
%c3 = xor ubyte %c2, 1
%c4 = cast ubyte %c3 to uint
ret uint %c4
}
to:
_xor:
movzbl 4(%esp), %eax
xorl $1, %eax
ret
instead of:
_xor:
movb $1, %al
xorb 4(%esp), %al
movzbl %al, %eax
ret
More impressively, we now compile:
struct B { unsigned bit : 1; };
void xor(struct B *b) { b->bit = b->bit ^ 1; }
To (X86/PPC):
_xor:
movl 4(%esp), %eax
xorl $-2147483648, (%eax)
ret
_xor:
lwz r2, 0(r3)
xoris r2, r2, 32768
stw r2, 0(r3)
blr
instead of (X86/PPC):
_xor:
movl 4(%esp), %eax
movl (%eax), %ecx
movl %ecx, %edx
shrl $31, %edx
# TRUNCATE movb %dl, %dl
xorb $1, %dl
movzbl %dl, %edx
andl $2147483647, %ecx
shll $31, %edx
orl %ecx, %edx
movl %edx, (%eax)
ret
_xor:
lwz r2, 0(r3)
srwi r4, r2, 31
xori r4, r4, 1
rlwimi r2, r4, 31, 0, 0
stw r2, 0(r3)
blr
This implements InstCombine/cast.ll:test30.
llvm-svn: 28273
|
| |
|
|
|
|
| |
Fix a nasty bug in the memcmp optimizer where we used the wrong variable!
llvm-svn: 28269
|
| |
|
|
| |
llvm-svn: 28268
|