1; RUN: opt %loadNPMPolly '-passes=print<polly-optree>' -disable-output < %s | FileCheck %s -match-full-lines 2; 3; Move instructions to region statements. 4; 5; for (int j = 0; j < n; j += 1) { 6; bodyA: 7; double val = 21.0 + 21.0; 8; 9; bodyB: 10; if (cond) 11; body_true: 12; A[0] = val; 13; } 14; 15define void @func(i32 %n, ptr noalias nonnull %A) { 16entry: 17 br label %for 18 19for: 20 %j = phi i32 [0, %entry], [%j.inc, %inc] 21 %j.cmp = icmp slt i32 %j, %n 22 br i1 %j.cmp, label %bodyA, label %exit 23 24 bodyA: 25 %val = fadd double 21.0, 21.0 26 br label %bodyB 27 28 bodyB: 29 %cond = fcmp oeq double 21.0, 21.0 30 br i1 %cond, label %bodyB_true, label %bodyB_exit 31 32 bodyB_true: 33 store double %val, ptr %A 34 br label %bodyB_exit 35 36 bodyB_exit: 37 br label %inc 38 39inc: 40 %j.inc = add nuw nsw i32 %j, 1 41 br label %for 42 43exit: 44 br label %return 45 46return: 47 ret void 48} 49 50; CHECK: Statistics { 51; CHECK: Instructions copied: 1 52; CHECK: Known loads forwarded: 0 53; CHECK: Read-only accesses copied: 0 54; CHECK: Operand trees forwarded: 1 55; CHECK: Statements with forwarded operand trees: 1 56; CHECK: } 57 58; CHECK: After statements { 59; CHECK-NEXT: Stmt_bodyA 60; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] 61; CHECK-NEXT: [n] -> { Stmt_bodyA[i0] -> MemRef_val[] }; 62; CHECK-NEXT: Instructions { 63; CHECK-NEXT: %val = fadd double 2.100000e+01, 2.100000e+01 64; CHECK-NEXT: } 65; CHECK-NEXT: Stmt_bodyB__TO__bodyB_exit 66; CHECK-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0] 67; CHECK-NEXT: [n] -> { Stmt_bodyB__TO__bodyB_exit[i0] -> MemRef_A[0] }; 68; CHECK-NEXT: Instructions { 69; CHECK-NEXT: %val = fadd double 2.100000e+01, 2.100000e+01 70; CHECK-NEXT: %cond = fcmp oeq double 2.100000e+01, 2.100000e+01 71; CHECK-NEXT: } 72; CHECK-NEXT: } 73