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