blob: 8977bc4cc8687eebd17e7fdf205b1cf8f1aca184 [file] [log] [blame]
Tobias Grosser8b052782015-11-10 16:23:30 +00001; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
2
3; In this test case we pass a pointer %A into a PHI node and also use this
4; pointer as base pointer of an array store. As a result, we get both scalar
5; and array memory accesses to A[] and A[0].
6
7; CHECK: Arrays {
8; CHECK: float MemRef_A[*]; // Element size 4
9; CHECK: float* MemRef_A; // Element size 0
10; CHECK: float* MemRef_x__phi; // Element size 0
11; CHECK: float* MemRef_B; // Element size 0
12; CHECK: float* MemRef_C[*]; // Element size 0
13; CHECK: }
14; CHECK: Arrays (Bounds as pw_affs) {
15; CHECK: float MemRef_A[*]; // Element size 4
16; CHECK: float* MemRef_A; // Element size 0
17; CHECK: float* MemRef_x__phi; // Element size 0
18; CHECK: float* MemRef_B; // Element size 0
19; CHECK: float* MemRef_C[*]; // Element size 0
20; CHECK: }
21; CHECK: Alias Groups (0):
22; CHECK: n/a
23; CHECK: Statements {
24; CHECK: Stmt_then
25; CHECK: Domain :=
26; CHECK: [p] -> { Stmt_then[i0] : p = 32 and i0 <= 999 and i0 >= 0 };
27; CHECK: Schedule :=
28; CHECK: [p] -> { Stmt_then[i0] -> [i0, 1] };
29; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
30; CHECK: [p] -> { Stmt_then[i0] -> MemRef_A[0] };
31; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
32; CHECK: [p] -> { Stmt_then[i0] -> MemRef_A[] };
33; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
34; CHECK: [p] -> { Stmt_then[i0] -> MemRef_x__phi[] };
35; CHECK: Stmt_else
36; CHECK: Domain :=
37; CHECK: [p] -> { Stmt_else[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 31 and i0 <= 999 and i0 >= 0) };
38; CHECK: Schedule :=
39; CHECK: [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 };
40; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
41; CHECK: [p] -> { Stmt_else[i0] -> MemRef_A[0] };
42; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
43; CHECK: [p] -> { Stmt_else[i0] -> MemRef_B[] };
44; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
45; CHECK: [p] -> { Stmt_else[i0] -> MemRef_x__phi[] };
46; CHECK: Stmt_bb8
47; CHECK: Domain :=
48; CHECK: [p] -> { Stmt_bb8[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 32 and i0 <= 999 and i0 >= 0) };
49; CHECK: Schedule :=
50; CHECK: [p] -> { Stmt_bb8[i0] -> [i0, 2] };
51; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
52; CHECK: [p] -> { Stmt_bb8[i0] -> MemRef_x__phi[] };
53; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
54; CHECK: [p] -> { Stmt_bb8[i0] -> MemRef_C[0] };
55
56
57target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
58
59define void @foo(float* noalias %A, float* noalias %B, float ** noalias %C, i32 %p) {
60bb:
61 br label %bb1
62
63bb1:
64 %i.0 = phi i64 [ 0, %bb ], [ %tmp9, %bb8 ]
65 %exitcond = icmp ne i64 %i.0, 1000
66 br i1 %exitcond, label %bb2, label %bb10
67
68bb2:
69 %cmp = icmp eq i32 %p, 32
70 br i1 %cmp, label %then, label %else
71
72then:
73 store float 3.0, float* %A
74 br label %bb8
75
76else:
77 store float 4.0, float* %A
78 br label %bb8
79
80bb8:
81 %x = phi float* [%A, %then], [%B, %else]
82 store float* %x, float** %C
83 %tmp9 = add nuw nsw i64 %i.0, 1
84 br label %bb1
85
86bb10:
87 ret void
88}