mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
682a5fcba9
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! llvm-svn: 204859
37 lines
1.0 KiB
LLVM
37 lines
1.0 KiB
LLVM
; 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
|
|
}
|