1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/test/Analysis/BasicAA/2014-03-18-Maxlookup-reached.ll
Arnold Schwaighofer 682a5fcba9 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!

llvm-svn: 204859
2014-03-26 21:30:19 +00:00

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
}