1; RUN: opt %loadNPMPolly '-passes=print<polly-function-scops>' -disable-output -polly-detect-full-functions < %s 2>&1 \ 2; RUN: | FileCheck %s -check-prefix=FULL 3; RUN: opt %loadNPMPolly '-passes=print<polly-function-scops>' -disable-output < %s 2>&1 \ 4; RUN: | FileCheck %s -check-prefix=WITHOUT-FULL 5 6; FULL: Region: %bb---FunctionExit 7; FULL: Statements { 8; FULL-NEXT: Stmt_loop_1 9; FULL-NEXT: Domain := 10; FULL-NEXT: [p] -> { Stmt_loop_1[i0] : p = 42 and 0 <= i0 <= 1025 }; 11; FULL-NEXT: Schedule := 12; FULL-NEXT: [p] -> { Stmt_loop_1[i0] -> [1, i0] }; 13; FULL-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] 14; FULL-NEXT: [p] -> { Stmt_loop_1[i0] -> MemRef_A[0] }; 15; FULL-NEXT: Stmt_loop_2 16; FULL-NEXT: Domain := 17; FULL-NEXT: [p] -> { Stmt_loop_2[i0] : 0 <= i0 <= 1025 and (p >= 43 or p <= 41) }; 18; FULL-NEXT: Schedule := 19; FULL-NEXT: [p] -> { Stmt_loop_2[i0] -> [0, i0] : p >= 43 or p <= 41 }; 20; FULL-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] 21; FULL-NEXT: [p] -> { Stmt_loop_2[i0] -> MemRef_A[0] }; 22; FULL-NEXT: } 23 24; WITHOUT-FULL: Region: %loop.2---%merge 25; WITHOUT-FULL: Statements { 26; WITHOUT-FULL-NEXT: Stmt_loop_2 27; WITHOUT-FULL-NEXT: Domain := 28; WITHOUT-FULL-NEXT: { Stmt_loop_2[i0] : 0 <= i0 <= 1025 }; 29; WITHOUT-FULL-NEXT: Schedule := 30; WITHOUT-FULL-NEXT: { Stmt_loop_2[i0] -> [i0] }; 31; WITHOUT-FULL-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] 32; WITHOUT-FULL-NEXT: { Stmt_loop_2[i0] -> MemRef_A[0] }; 33; WITHOUT-FULL-NEXT: } 34 35; WITHOUT-FULL: Region: %loop.1---%merge 36; WITHOUT-FULL: Statements { 37; WITHOUT-FULL-NEXT: Stmt_loop_1 38; WITHOUT-FULL-NEXT: Domain := 39; WITHOUT-FULL-NEXT: { Stmt_loop_1[i0] : 0 <= i0 <= 1025 }; 40; WITHOUT-FULL-NEXT: Schedule := 41; WITHOUT-FULL-NEXT: { Stmt_loop_1[i0] -> [i0] }; 42; WITHOUT-FULL-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] 43; WITHOUT-FULL-NEXT: { Stmt_loop_1[i0] -> MemRef_A[0] }; 44; WITHOUT-FULL-NEXT: } 45 46define void @foo(ptr %A, i32 %p) { 47bb: 48 %cmp = icmp eq i32 %p, 42 49 br i1 %cmp, label %loop.1, label %loop.2 50 51loop.1: 52 %indvar.1 = phi i64 [0, %bb], [%indvar.next.1, %loop.1] 53 %indvar.next.1 = add i64 %indvar.1, 1 54 store float 42.0, ptr %A 55 %cmp.1 = icmp sle i64 %indvar.1, 1024 56 br i1 %cmp.1, label %loop.1, label %merge 57 58loop.2: 59 %indvar.2 = phi i64 [0, %bb], [%indvar.next.2, %loop.2] 60 %indvar.next.2 = add i64 %indvar.2, 1 61 store float 42.0, ptr %A 62 %cmp.2 = icmp sle i64 %indvar.2, 1024 63 br i1 %cmp.2, label %loop.2, label %merge 64 65merge: 66 ret void 67} 68