forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PR15967 Fix in basicaa for faulty returning no alias.
This commit consist of two parts. The first part fix the PR15967. The wrong conclusion was made when the MaxLookup limit was reached. The fix introduce a out parameter (MaxLookupReached) to DecomposeGEPExpression that the function aliasGEP can act upon. The second part is introducing the constant MaxLookupSearchDepth to make sure that DecomposeGEPExpression and GetUnderlyingObject use the same search depth. This is a small cleanup to clarify the original algorithm. Patch by Karl-Johan Karlsson! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204859 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
1 parent
3a0a1f6
commit 23463c9
Showing
2 changed files
with
74 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
; RUN: opt < %s -basicaa -gvn -S | FileCheck %s | ||
|
||
; PR15967 | ||
; BasicAA claims no alias when there is (due to a problem when the MaxLookup | ||
; limit was reached). | ||
|
||
target datalayout = "e" | ||
|
||
%struct.foo = type { i32, i32 } | ||
|
||
define i32 @main() { | ||
%t = alloca %struct.foo, align 4 | ||
%1 = getelementptr inbounds %struct.foo* %t, i32 0, i32 0 | ||
store i32 1, i32* %1, align 4 | ||
%2 = getelementptr inbounds %struct.foo* %t, i64 1 | ||
%3 = bitcast %struct.foo* %2 to i8* | ||
%4 = getelementptr inbounds i8* %3, i32 -1 | ||
store i8 0, i8* %4 | ||
%5 = getelementptr inbounds i8* %4, i32 -1 | ||
store i8 0, i8* %5 | ||
%6 = getelementptr inbounds i8* %5, i32 -1 | ||
store i8 0, i8* %6 | ||
%7 = getelementptr inbounds i8* %6, i32 -1 | ||
store i8 0, i8* %7 | ||
%8 = getelementptr inbounds i8* %7, i32 -1 | ||
store i8 0, i8* %8 | ||
%9 = getelementptr inbounds i8* %8, i32 -1 | ||
store i8 0, i8* %9 | ||
%10 = getelementptr inbounds i8* %9, i32 -1 | ||
store i8 0, i8* %10 | ||
%11 = getelementptr inbounds i8* %10, i32 -1 | ||
store i8 0, i8* %11 | ||
%12 = load i32* %1, align 4 | ||
ret i32 %12 | ||
; CHECK: ret i32 %12 | ||
} |