1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -basicaa -globals-aa -da | FileCheck %s 2*9880d681SAndroid Build Coastguard Workerdefine void @i32_subscript(i32* %a) { 3*9880d681SAndroid Build Coastguard Workerentry: 4*9880d681SAndroid Build Coastguard Worker br label %for.body 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerfor.body: 7*9880d681SAndroid Build Coastguard Worker %i = phi i32 [ 0, %entry ], [ %i.inc, %for.body ] 8*9880d681SAndroid Build Coastguard Worker %a.addr = getelementptr i32, i32* %a, i32 %i 9*9880d681SAndroid Build Coastguard Worker %a.addr.2 = getelementptr i32, i32* %a, i32 5 10*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a.addr, align 4 11*9880d681SAndroid Build Coastguard Worker %1 = add i32 %0, 1 12*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %a.addr.2, align 4 13*9880d681SAndroid Build Coastguard Worker %i.inc = add nsw i32 %i, 1 14*9880d681SAndroid Build Coastguard Worker %i.inc.ext = sext i32 %i to i64 15*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %i.inc.ext, 100 16*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerfor.end: 19*9880d681SAndroid Build Coastguard Worker ret void 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker; CHECK: none 22*9880d681SAndroid Build Coastguard Worker; CHECK: anti 23*9880d681SAndroid Build Coastguard Worker; CHECK: output 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; Test for a bug, which caused an assert in ScalarEvolution because 27*9880d681SAndroid Build Coastguard Worker; the Dependence Analyzer attempted to zero extend a type to a smaller 28*9880d681SAndroid Build Coastguard Worker; type. 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; void t(unsigned int *a, unsigned int n) { 31*9880d681SAndroid Build Coastguard Worker; for (unsigned int i = 0; i != n; i++) { 32*9880d681SAndroid Build Coastguard Worker; a[(unsigned short)i] = g; 33*9880d681SAndroid Build Coastguard Worker; }} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker@g = common global i32 0, align 4 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine void @t(i32* noalias %a, i32 %n) nounwind { 38*9880d681SAndroid Build Coastguard Workerentry: 39*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp eq i32 %n, 0 40*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.end, label %for.body 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerfor.body: 43*9880d681SAndroid Build Coastguard Worker %i.02 = phi i32 [ %inc, %for.body ], [ 0, %entry ] 44*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @g, align 4 45*9880d681SAndroid Build Coastguard Worker %idxprom = and i32 %i.02, 65535 46*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %a, i32 %idxprom 47*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %arrayidx, align 4 48*9880d681SAndroid Build Coastguard Worker %inc = add i32 %i.02, 1 49*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %inc, %n 50*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.end, label %for.body 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerfor.end: 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker; CHECK: input 56*9880d681SAndroid Build Coastguard Worker; CHECK: none 57*9880d681SAndroid Build Coastguard Worker; CHECK: output 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine void @i16_wrap(i64* %a) { 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker br label %for.body 62*9880d681SAndroid Build Coastguard Workerfor.body: 63*9880d681SAndroid Build Coastguard Worker %i = phi i64 [0, %entry], [%i.inc, %for.inc] 64*9880d681SAndroid Build Coastguard Worker %i.tr = trunc i64 %i to i16 65*9880d681SAndroid Build Coastguard Worker %idx = getelementptr i64, i64* %a, i16 %i.tr 66*9880d681SAndroid Build Coastguard Worker %0 = load i64, i64* %idx 67*9880d681SAndroid Build Coastguard Worker %1 = add i64 %0, 1 68*9880d681SAndroid Build Coastguard Workerstore i64 %1, i64* %idx 69*9880d681SAndroid Build Coastguard Worker br label %for.inc 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerfor.inc: 72*9880d681SAndroid Build Coastguard Worker %i.inc = add nuw i64 %i, 1 73*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i64 %i.inc, 17179869184 74*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 75*9880d681SAndroid Build Coastguard Workerfor.end: 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker; CHECK: input 79*9880d681SAndroid Build Coastguard Worker; CHECK: anti 80*9880d681SAndroid Build Coastguard Worker; CHECK: output 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine void @i8_stride_wrap(i32* noalias %a, i32* noalias %b) { 83*9880d681SAndroid Build Coastguard Workerentry: 84*9880d681SAndroid Build Coastguard Worker br label %for.body 85*9880d681SAndroid Build Coastguard Workerfor.body: 86*9880d681SAndroid Build Coastguard Worker %i = phi i32 [1,%entry], [%i.inc, %for.inc] 87*9880d681SAndroid Build Coastguard Worker %i.tr = trunc i32 %i to i8 88*9880d681SAndroid Build Coastguard Worker %idx = getelementptr i32, i32* %a, i8 %i.tr 89*9880d681SAndroid Build Coastguard Worker %idx.2 = getelementptr i32, i32* %b, i32 %i 90*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %idx, align 4 91*9880d681SAndroid Build Coastguard Worker %1 = add i32 %0, 1 92*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %idx.2, align 4 93*9880d681SAndroid Build Coastguard Worker br label %for.inc 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerfor.inc: 96*9880d681SAndroid Build Coastguard Worker %i.inc = add nsw i32 %i, 256 97*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ult i32 %i, 65536 98*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerfor.end: 101*9880d681SAndroid Build Coastguard Worker ret void 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker; CHECK: input 104*9880d681SAndroid Build Coastguard Worker; CHECK: none 105*9880d681SAndroid Build Coastguard Worker; CHECK: none 106