73 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines2;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 %for18 19for:20 %j = phi i32 [0, %entry], [%j.inc, %inc]21 %j.cmp = icmp slt i32 %j, %n22 br i1 %j.cmp, label %bodyA, label %exit23 24 bodyA:25 %val = fadd double 21.0, 21.026 br label %bodyB27 28 bodyB:29 %cond = fcmp oeq double 21.0, 21.030 br i1 %cond, label %bodyB_true, label %bodyB_exit31 32 bodyB_true:33 store double %val, ptr %A34 br label %bodyB_exit35 36 bodyB_exit:37 br label %inc38 39inc:40 %j.inc = add nuw nsw i32 %j, 141 br label %for42 43exit:44 br label %return45 46return:47 ret void48}49 50; CHECK: Statistics {51; CHECK: Instructions copied: 152; CHECK: Known loads forwarded: 053; CHECK: Read-only accesses copied: 054; CHECK: Operand trees forwarded: 155; CHECK: Statements with forwarded operand trees: 156; CHECK: }57 58; CHECK: After statements {59; CHECK-NEXT: Stmt_bodyA60; 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+0164; CHECK-NEXT: }65; CHECK-NEXT: Stmt_bodyB__TO__bodyB_exit66; 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+0170; CHECK-NEXT: %cond = fcmp oeq double 2.100000e+01, 2.100000e+0171; CHECK-NEXT: }72; CHECK-NEXT: }73