1; RUN: opt -basicaa %loadPolly -polly-dependences -analyze < %s | FileCheck %s 2; 3; Verify that only the inner reduction like accesses cause reduction dependences 4; 5; CHECK: Reduction dependences: 6; CHECK: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 } 7; 8; void f(int * restrict A, int * restrict sum) { 9; int i, j, k; 10; for (i = 0; i < 100; i++) { 11; *sum *= 7; 12; for (j = 0; j < 100; j++) { 13; *sum += A[i+j]; 14; for (k = 0; k< 100; k++) {} 15; } 16; } 17; } 18target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64" 19 20define void @f(i32* noalias %A, i32* noalias %sum) { 21entry: 22 br label %for.cond 23 24for.cond: ; preds = %for.inc11, %entry 25 %i.0 = phi i32 [ 0, %entry ], [ %inc12, %for.inc11 ] 26 %exitcond2 = icmp ne i32 %i.0, 100 27 br i1 %exitcond2, label %for.body, label %for.end13 28 29for.body: ; preds = %for.cond 30 %tmp = load i32, i32* %sum, align 4 31 %mul = mul nsw i32 %tmp, 7 32 store i32 %mul, i32* %sum, align 4 33 br label %for.cond1 34 35for.cond1: ; preds = %for.inc8, %for.body 36 %j.0 = phi i32 [ 0, %for.body ], [ %inc9, %for.inc8 ] 37 %exitcond1 = icmp ne i32 %j.0, 100 38 br i1 %exitcond1, label %for.body3, label %for.end10 39 40for.body3: ; preds = %for.cond1 41 %add = add nsw i32 %i.0, %j.0 42 %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add 43 %tmp3 = load i32, i32* %arrayidx, align 4 44 %tmp4 = load i32, i32* %sum, align 4 45 %add4 = add nsw i32 %tmp4, %tmp3 46 store i32 %add4, i32* %sum, align 4 47 br label %for.cond5 48 49for.cond5: ; preds = %for.inc, %for.body3 50 %k.0 = phi i32 [ 0, %for.body3 ], [ %inc, %for.inc ] 51 %exitcond = icmp ne i32 %k.0, 100 52 br i1 %exitcond, label %for.body7, label %for.end 53 54for.body7: ; preds = %for.cond5 55 br label %for.inc 56 57for.inc: ; preds = %for.body7 58 %inc = add nsw i32 %k.0, 1 59 br label %for.cond5 60 61for.end: ; preds = %for.cond5 62 br label %for.inc8 63 64for.inc8: ; preds = %for.end 65 %inc9 = add nsw i32 %j.0, 1 66 br label %for.cond1 67 68for.end10: ; preds = %for.cond1 69 br label %for.inc11 70 71for.inc11: ; preds = %for.end10 72 %inc12 = add nsw i32 %i.0, 1 73 br label %for.cond 74 75for.end13: ; preds = %for.cond 76 ret void 77} 78