1; RUN: opt %loadNPMPolly '-passes=polly-import-jscop,print<polly-ast>' -polly-ast-detect-parallel -disable-output < %s | FileCheck %s 2; 3; CHECK: #pragma known-parallel reduction (+ : MemRef_A) 4; CHECK-NEXT: for (int c0 = 0; c0 <= 2; c0 += 1) { 5; CHECK-NEXT: if (c0 == 1) { 6; CHECK-NEXT: #pragma simd 7; CHECK-NEXT: for (int c1 = 0; c1 < 2 * n; c1 += 1) 8; CHECK-NEXT: Stmt_S1(c1); 9; CHECK-NEXT: } else 10; CHECK-NEXT: #pragma simd reduction (+ : MemRef_A) 11; CHECK-NEXT: for (int c1 = (-c0 / 2) + 2; c1 <= 2 * n; c1 += 2) 12; CHECK-NEXT: Stmt_S0(2 * n - c1); 13; CHECK-NEXT: } 14; 15; void rmalrs(int *A, long n) { 16; for (long i = 0; i < 2 * n; i++) 17; S0: A[0] += i; 18; for (long i = 0; i < 2 * n; i++) 19; S1: A[i + 1] = 1; 20; } 21; 22target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64" 23 24define void @rmalrs(ptr %A, i32 %n) { 25entry: 26 br label %for.cond 27 28for.cond: ; preds = %for.inc, %entry 29 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] 30 %mul = shl nsw i32 %n, 1 31 %cmp = icmp slt i32 %i.0, %mul 32 br i1 %cmp, label %for.body, label %for.end 33 34for.body: ; preds = %for.cond 35 br label %S0 36 37S0: ; preds = %for.body 38 %tmp = load i32, ptr %A, align 4 39 %add = add nsw i32 %tmp, %i.0 40 store i32 %add, ptr %A, align 4 41 br label %for.inc 42 43for.inc: ; preds = %S0 44 %inc = add nsw i32 %i.0, 1 45 br label %for.cond 46 47for.end: ; preds = %for.cond 48 br label %for.cond2 49 50for.cond2: ; preds = %for.inc8, %for.end 51 %i1.0 = phi i32 [ 0, %for.end ], [ %inc9, %for.inc8 ] 52 %mul3 = shl nsw i32 %n, 1 53 %cmp4 = icmp slt i32 %i1.0, %mul3 54 br i1 %cmp4, label %for.body5, label %for.end10 55 56for.body5: ; preds = %for.cond2 57 br label %S1 58 59S1: ; preds = %for.body5 60 %add6 = add nsw i32 %i1.0, 1 61 %arrayidx7 = getelementptr inbounds i32, ptr %A, i32 %add6 62 store i32 1, ptr %arrayidx7, align 4 63 br label %for.inc8 64 65for.inc8: ; preds = %S1 66 %inc9 = add nsw i32 %i1.0, 1 67 br label %for.cond2 68 69for.end10: ; preds = %for.cond2 70 ret void 71} 72 73