1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Check that geps with equal base offsets of noalias base pointers stay noalias. 6*9880d681SAndroid Build Coastguard Workerdefine i32 @test(i32* %p, i16 %i) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Function: test: 8*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32* %p, i32 0 9*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32* %p, i32 1 10*9880d681SAndroid Build Coastguard Worker %b = icmp eq i16 %i, 0 11*9880d681SAndroid Build Coastguard Worker br i1 %b, label %bb1, label %bb2 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerbb1: 14*9880d681SAndroid Build Coastguard Worker %f = getelementptr i32, i32* %pi, i32 1 15*9880d681SAndroid Build Coastguard Worker %g = getelementptr i32, i32* %pi.next, i32 1 16*9880d681SAndroid Build Coastguard Worker br label %bb3 17*9880d681SAndroid Build Coastguard Workerbb2: 18*9880d681SAndroid Build Coastguard Worker %f2 = getelementptr i32, i32* %pi, i32 1 19*9880d681SAndroid Build Coastguard Worker %g2 = getelementptr i32, i32* %pi.next, i32 1 20*9880d681SAndroid Build Coastguard Worker br label %bb3 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerbb3: 23*9880d681SAndroid Build Coastguard Worker %ptr_phi = phi i32* [ %f, %bb1 ], [ %f2, %bb2 ] 24*9880d681SAndroid Build Coastguard Worker %ptr_phi2 = phi i32* [ %g, %bb1 ], [ %g2, %bb2 ] 25*9880d681SAndroid Build Coastguard Worker; CHECK: NoAlias: i32* %f1, i32* %g1 26*9880d681SAndroid Build Coastguard Worker %f1 = getelementptr i32, i32* %ptr_phi , i32 1 27*9880d681SAndroid Build Coastguard Worker %g1 = getelementptr i32, i32* %ptr_phi2 , i32 1 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerret i32 0 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; Check that geps with equal indices of noalias base pointers stay noalias. 33*9880d681SAndroid Build Coastguard Workerdefine i32 @test2([2 x i32]* %p, i32 %i) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Function: test2: 35*9880d681SAndroid Build Coastguard Worker %pi = getelementptr [2 x i32], [2 x i32]* %p, i32 0 36*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr [2 x i32], [2 x i32]* %p, i32 1 37*9880d681SAndroid Build Coastguard Worker %b = icmp eq i32 %i, 0 38*9880d681SAndroid Build Coastguard Worker br i1 %b, label %bb1, label %bb2 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerbb1: 41*9880d681SAndroid Build Coastguard Worker %f = getelementptr [2 x i32], [2 x i32]* %pi, i32 1 42*9880d681SAndroid Build Coastguard Worker %g = getelementptr [2 x i32], [2 x i32]* %pi.next, i32 1 43*9880d681SAndroid Build Coastguard Worker br label %bb3 44*9880d681SAndroid Build Coastguard Workerbb2: 45*9880d681SAndroid Build Coastguard Worker %f2 = getelementptr [2 x i32], [2 x i32]* %pi, i32 1 46*9880d681SAndroid Build Coastguard Worker %g2 = getelementptr [2 x i32], [2 x i32]* %pi.next, i32 1 47*9880d681SAndroid Build Coastguard Worker br label %bb3 48*9880d681SAndroid Build Coastguard Workerbb3: 49*9880d681SAndroid Build Coastguard Worker %ptr_phi = phi [2 x i32]* [ %f, %bb1 ], [ %f2, %bb2 ] 50*9880d681SAndroid Build Coastguard Worker %ptr_phi2 = phi [2 x i32]* [ %g, %bb1 ], [ %g2, %bb2 ] 51*9880d681SAndroid Build Coastguard Worker; CHECK: NoAlias: i32* %f1, i32* %g1 52*9880d681SAndroid Build Coastguard Worker %f1 = getelementptr [2 x i32], [2 x i32]* %ptr_phi , i32 1, i32 %i 53*9880d681SAndroid Build Coastguard Worker %g1 = getelementptr [2 x i32], [2 x i32]* %ptr_phi2 , i32 1, i32 %i 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerret i32 0 56*9880d681SAndroid Build Coastguard Worker} 57