; RUN: opt %loadPolly -polly-stmt-granularity=bb -polly-scops -analyze < %s | FileCheck %s ; In this test case we pass a pointer %A into a PHI node and also use this ; pointer as base pointer of an array store. As a result, we get both scalar ; and array memory accesses to A[] and A[0]. ; CHECK: Arrays { ; CHECK-NEXT: float MemRef_A[*]; // Element size 4 ; CHECK-NEXT: float* MemRef_x__phi; // Element size 8 ; CHECK-NEXT: float* MemRef_C[*]; // Element size 8 ; CHECK-NEXT: } ; CHECK: Arrays (Bounds as pw_affs) { ; CHECK-NEXT: float MemRef_A[*]; // Element size 4 ; CHECK-NEXT: float* MemRef_x__phi; // Element size 8 ; CHECK-NEXT: float* MemRef_C[*]; // Element size 8 ; CHECK-NEXT: } ; CHECK: Alias Groups (0): ; CHECK-NEXT: n/a ; CHECK: Statements { ; CHECK-NEXT: Stmt_then ; CHECK-NEXT: Domain := ; CHECK-NEXT: [p] -> { Stmt_then[i0] : p = 32 and 0 <= i0 <= 999 }; ; CHECK-NEXT: Schedule := ; CHECK-NEXT: [p] -> { Stmt_then[i0] -> [i0, 1] }; ; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_A[0] }; ; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_x__phi[] }; ; CHECK-NEXT: Stmt_else ; CHECK-NEXT: Domain := ; CHECK-NEXT: [p] -> { Stmt_else[i0] : 0 <= i0 <= 999 and (p >= 33 or p <= 31) }; ; CHECK-NEXT: Schedule := ; CHECK-NEXT: [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 }; ; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_A[0] }; ; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_x__phi[] }; ; CHECK-NEXT: Stmt_bb8 ; CHECK-NEXT: Domain := ; CHECK-NEXT: [p] -> { Stmt_bb8[i0] : 0 <= i0 <= 999 }; ; CHECK-NEXT: Schedule := ; CHECK-NEXT: [p] -> { Stmt_bb8[i0] -> [i0, 2] }; ; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK-NEXT: [p] -> { Stmt_bb8[i0] -> MemRef_x__phi[] }; ; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [p] -> { Stmt_bb8[i0] -> MemRef_C[0] }; ; CHECK-NEXT: } target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" define void @foo(float* noalias %A, float* noalias %B, float ** noalias %C, i32 %p) { bb: br label %bb1 bb1: %i.0 = phi i64 [ 0, %bb ], [ %tmp9, %bb8 ] %exitcond = icmp ne i64 %i.0, 1000 br i1 %exitcond, label %bb2, label %bb10 bb2: %cmp = icmp eq i32 %p, 32 br i1 %cmp, label %then, label %else then: store float 3.0, float* %A br label %bb8 else: store float 4.0, float* %A br label %bb8 bb8: %x = phi float* [%A, %then], [%B, %else] store float* %x, float** %C %tmp9 = add nuw nsw i64 %i.0, 1 br label %bb1 bb10: ret void }