|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| ... |  | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| | Value::getUnderlyingObject does (when TD is around).  This allows us to avoid calling DecomposeGEPExpression unless the ultimate alias check we care about passes, speedup up BasicAA a bit.
llvm-svn: 89920 | 
| | 
| 
| 
| 
| 
| | list of scaled offsets.  Use this to eliminate some previous ad-hoc code which was subtly broken (it assumed all Constant*'s were non-zero, but strange constant express could be zero).
llvm-svn: 89915 | 
| | 
| 
| 
| | llvm-svn: 89914 | 
| | 
| 
| 
| | llvm-svn: 89666 | 
| | 
| 
| 
| 
| 
| 
| 
| | check if
we have a non-constant pointer.  Constant pointers can't be local.
llvm-svn: 89665 | 
| | 
| 
| 
| | llvm-svn: 89664 | 
| | 
| 
| 
| | llvm-svn: 89663 | 
| | 
| 
| 
| | llvm-svn: 89602 | 
| | 
| 
| 
| | llvm-svn: 89601 | 
| | 
| 
| 
| | llvm-svn: 89600 | 
| | 
| 
| 
| 
| 
| 
| 
| | The hasNoModRefInfoForCalls isn't worth it as a filter because 
basicaa provides m/r info and everything chains to it, so remove
it.
llvm-svn: 89599 | 
| | 
| 
| 
| 
| 
| 
| 
| | if it is not ultimately captured. Teach BasicAliasAnalysis that a 
local object address which does not escape and is never stored does
not alias with a value resulting from a load.
llvm-svn: 89398 | 
| | 
| 
| 
| 
| 
| | allocated until runtime (such as an alloca). Patch by Hans Wennborg!
llvm-svn: 88760 | 
| | 
| 
| 
| 
| 
| | GVN to be more aggressive. Patch by Hans Wennborg! (with a comment added by me)
llvm-svn: 86582 | 
| | 
| 
| 
| 
| 
| | from various APIs, addressing PR5325.
llvm-svn: 86231 | 
| | 
| 
| 
| | llvm-svn: 85286 | 
| | 
| 
| 
| 
| 
| | to free()
llvm-svn: 85181 | 
| | 
| 
| 
| 
| 
| | aggressive on PHI instructions.
llvm-svn: 85158 | 
| | 
| 
| 
| 
| 
| | VISIBILITY_HIDDEN removal.
llvm-svn: 85043 | 
| | 
| 
| 
| 
| 
| 
| | Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042 | 
| | 
| 
| 
| 
| 
| | subclass of AllocationInst, so it no longer is necessary.
llvm-svn: 84969 | 
| | 
| 
| 
| | llvm-svn: 84373 | 
| | 
| 
| 
| 
| 
| | not themselves phi nodes. However, V2 may be. Call aliasCheck with V2 first to potentially eliminate a std::swap call.
llvm-svn: 84226 | 
| | 
| 
| 
| | llvm-svn: 84191 | 
| | 
| 
| 
| 
| 
| | improve alias results if constant, and the source pointer can't be modified.
llvm-svn: 84175 | 
| | 
| 
| 
| | llvm-svn: 84174 | 
| | 
| 
| 
| 
| 
| | only dereference the element they point to directly with no pointer arithmetic.
llvm-svn: 84159 | 
| | 
| 
| 
| | llvm-svn: 84080 | 
| | 
| 
| 
| 
| 
| 
| 
| | 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: 84074 | 
| | 
| 
| 
| | llvm-svn: 84072 | 
| | 
| 
| 
| 
| 
| | value than it's safe to declare the PHI NoAlias the value. Ditto for MustAlias.
llvm-svn: 84038 | 
| | 
| 
| 
| | llvm-svn: 84000 | 
| | 
| 
| 
| 
| 
| | modify through the pointer they're given.
llvm-svn: 83959 | 
| | 
| 
| 
| 
| 
| 
| 
| | as to MallocInst.
Reviewed by Eli Friedman.
llvm-svn: 82281 | 
| | 
| 
| 
| | llvm-svn: 80267 | 
| | 
| 
| 
| | llvm-svn: 78948 | 
| | 
| 
| 
| 
| 
| 
| 
| | change back are
metadata related, which I'm waiting on to avoid conflicting with Devang.
llvm-svn: 77721 | 
| | 
| 
| 
| | llvm-svn: 77494 | 
| | 
| 
| 
| 
| 
| | getAnalysisIfAvailable<TargetData>().
llvm-svn: 77028 | 
| | 
| 
| 
| 
| 
| | thanks to contexts-on-types.  More to come.
llvm-svn: 77011 | 
| | 
| 
| 
| | llvm-svn: 76702 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Getelementptrs that are defined to wrap are virtually useless to
optimization, and getelementptrs that are undefined on any kind
of overflow are too restrictive -- it's difficult to ensure that
all intermediate addresses are within bounds. I'm going to take
a different approach.
Remove a few optimizations that depended on this flag.
llvm-svn: 76437 | 
| | 
| 
| 
| 
| 
| 
| 
| | GEPOperator's hasNoPointer0verflow(), and make a few places in instcombine
that create GEPs that may overflow clear the NoOverflow value. Among
other things, this partially addresses PR2831.
llvm-svn: 76252 | 
| | 
| 
| 
| 
| 
| 
| 
| | number of issues in
our current context-passing stuff, which is also fixed here
llvm-svn: 76089 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").
llvm-svn: 75640 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.
llvm-svn: 75379 |