| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 92740
|
|
|
|
| |
llvm-svn: 90696
|
|
|
|
|
|
|
|
|
| |
first expression as P+4+4*i which we considered to possibly alias
P+4*j. Now we correctly analyze the former one as P+1+4*i.
@test10 is a sanity test that verfies that we know that P+4+4*i != P+4*i.
llvm-svn: 89960
|
|
|
|
|
|
|
| |
previously already handled it at -m32 because there were no i32->i64
extensions for addressing.
llvm-svn: 89959
|
|
|
|
| |
llvm-svn: 89955
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
allows us to compile the example in readme.txt into:
LBB1_1: ## %bb
movl 4(%rdx,%rax), %ecx
movl %ecx, %esi
imull (%rdx,%rax), %esi
imull %esi, %ecx
movl %esi, 8(%rdx,%rax)
imull %ecx, %esi
movl %ecx, 12(%rdx,%rax)
movl %esi, 16(%rdx,%rax)
imull %ecx, %esi
movl %esi, 20(%rdx,%rax)
addq $16, %rax
cmpq $4000, %rax
jne LBB1_1
instead of:
LBB1_1:
movl (%rdx,%rax), %ecx
imull 4(%rdx,%rax), %ecx
movl %ecx, 8(%rdx,%rax)
imull 4(%rdx,%rax), %ecx
movl %ecx, 12(%rdx,%rax)
imull 8(%rdx,%rax), %ecx
movl %ecx, 16(%rdx,%rax)
imull 12(%rdx,%rax), %ecx
movl %ecx, 20(%rdx,%rax)
addq $16, %rax
cmpq $4000, %rax
jne LBB1_1
GCC (4.2) doesn't seem to be able to eliminate the loads in this
testcase either, it generates:
L2:
movl (%rdx), %eax
imull 4(%rdx), %eax
movl %eax, 8(%rdx)
imull 4(%rdx), %eax
movl %eax, 12(%rdx)
imull 8(%rdx), %eax
movl %eax, 16(%rdx)
imull 12(%rdx), %eax
movl %eax, 20(%rdx)
addl $4, %ecx
addq $16, %rdx
cmpl $1002, %ecx
jne L2
llvm-svn: 89952
|
|
|
|
| |
llvm-svn: 89951
|
|
|
|
| |
llvm-svn: 89950
|
|
|
|
|
|
| |
DecomposeGEPExpression. This dramatically simplifies and shrinks the code by eliminating the horrible CheckGEPInstructions method, fixes a miscompilation (@test3) and makes the code more aggressive. In particular, we now handle the @test4 case, which is reduced from the SmallPtrSet constructor. Missing this caused us to emit a variable length memset instead of a fixed size one.
llvm-svn: 89922
|
|
|
|
| |
llvm-svn: 89921
|
|
|
|
| |
llvm-svn: 89601
|
|
|
|
|
|
| |
depend on target data to supply it within the test
llvm-svn: 85900
|
|
|
|
|
|
| |
aggressive on PHI instructions.
llvm-svn: 85158
|
|
|
|
| |
llvm-svn: 84405
|
|
|
|
|
|
| |
transform, which isn't happening yet.
llvm-svn: 84402
|
|
|
|
|
|
| |
edge case.
llvm-svn: 84401
|
|
|
|
| |
llvm-svn: 84400
|
|
|
|
| |
llvm-svn: 84385
|
|
|
|
| |
llvm-svn: 84383
|
|
|
|
| |
llvm-svn: 84125
|
|
|
|
|
|
|
|
| |
cannot alias the GEP. GEP pointer alias rule states this clearly:
A pointer value formed from a getelementptr instruction is associated with the
addresses associated with the first operand of the getelementptr.
llvm-svn: 84079
|
|
|
|
| |
llvm-svn: 84069
|
|
|
|
|
|
| |
value than it's safe to declare the PHI NoAlias the value. Ditto for MustAlias.
llvm-svn: 84038
|
|
|
|
| |
llvm-svn: 83985
|
|
|
|
|
|
| |
modify through the pointer they're given.
llvm-svn: 83959
|
|
|
|
| |
llvm-svn: 81540
|
|
|
|
|
|
|
|
| |
input filename so that opt doesn't print the input filename in the
output so that grep lines in the tests don't unintentionally match
strings in the input filename.
llvm-svn: 81537
|
|
|
|
| |
llvm-svn: 81293
|
|
|
|
| |
llvm-svn: 81261
|
|
|
|
| |
llvm-svn: 81257
|
|
|
|
|
|
| |
of using llvm-as, now that opt supports this.
llvm-svn: 81226
|
|
|
|
| |
llvm-svn: 80519
|
|
|
|
| |
llvm-svn: 80518
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
beyond their associated static array type.
I believe that this fixes a legitimate bug, because BasicAliasAnalysis
already has code to check for this condition that works for non-constant
indices, however it was missing the case of constant indices. With this
change, it checks for both.
This fixes PR4267, and miscompiles of SPEC 188.ammp and 464.h264.href.
llvm-svn: 72451
|
|
|
|
| |
llvm-svn: 67046
|
|
|
|
| |
llvm-svn: 67011
|
|
|
|
| |
llvm-svn: 66918
|
|
|
|
|
|
|
|
| |
couldn't ever be the return of call instruction. However, it's quite possible
that said local allocation is itself the return of a function call. That's
what malloc and calloc are for, actually.
llvm-svn: 64442
|
|
|
|
|
|
|
|
| |
only dereference their arguments, and enhance
BasicAA to make use of this fact when computing ModRef info.
llvm-svn: 63718
|
|
|
|
|
|
|
|
|
|
| |
The problematic part of this patch is that we were out of attribute bits,
requiring some fancy bit hacking to make it fit (by shrinking alignment)
without breaking existing users or the file format.
This change will require users to rebuild llvm-gcc to match llvm.
llvm-svn: 61239
|
|
|
|
| |
llvm-svn: 61095
|
|
|
|
|
|
| |
builds.
llvm-svn: 61094
|
|
|
|
|
|
| |
intrinsics are properly marked nocapture, the fixme should be addressed.
llvm-svn: 61040
|
|
|
|
|
|
|
|
|
|
|
| |
parallel, allowing it to decide that P/Q must alias if A/B
must alias in things like:
P = gep A, 0, i, 1
Q = gep B, 0, i, 1
This allows GVN to delete 62 more instructions out of 403.gcc.
llvm-svn: 60820
|
|
|
|
|
|
|
|
|
| |
indicate functions that allocate, such as operator new, or list::insert. The
actual definition is slightly less strict (for now).
No changes to the bitcode reader/writer, asm printer or verifier were needed.
llvm-svn: 59934
|
|
|
|
| |
llvm-svn: 54832
|
|
|
|
|
|
|
| |
pointer derived from a local allocation, if the local allocation
never escapes, the pointers can't alias. This implements PR2436
llvm-svn: 52301
|
|
|
|
| |
llvm-svn: 52173
|
|
|
|
|
|
|
|
| |
is longer than the second one) should stop after finding one. Added break
instruction guarantees it. It also changes difference between offsets to
absolute value of this difference in the condition.
llvm-svn: 51875
|
|
|
|
| |
llvm-svn: 51349
|