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