79 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines2;3; Move instructions from region statements.4;5; for (int j = 0; j < n; j += 1) {6; bodyA:7; double val = 21.0 + 21.0;8; if (cond)9;10; bodyA_true:11; A[0] = 42;12;13; bodyB:14; A[0] = val;15; }16;17define void @func(i32 %n, ptr noalias nonnull %A) {18entry:19 br label %for20 21for:22 %j = phi i32 [0, %entry], [%j.inc, %inc]23 %j.cmp = icmp slt i32 %j, %n24 br i1 %j.cmp, label %bodyA, label %exit25 26 bodyA:27 %val = fadd double 21.0, 21.028 %cond = fcmp oeq double 21.0, 21.029 br i1 %cond, label %bodyA_true, label %bodyB30 31 bodyA_true:32 store double 42.0, ptr %A33 br label %bodyB34 35 bodyB:36 store double %val, ptr %A37 br label %bodyB_exit38 39 bodyB_exit:40 br label %inc41 42inc:43 %j.inc = add nuw nsw i32 %j, 144 br label %for45 46exit:47 br label %return48 49return:50 ret void51}52 53; CHECK: Statistics {54; CHECK: Instructions copied: 155; CHECK: Known loads forwarded: 056; CHECK: Read-only accesses copied: 057; CHECK: Operand trees forwarded: 158; CHECK: Statements with forwarded operand trees: 159; CHECK: }60; CHECK: After statements {61; CHECK: Stmt_bodyA__TO__bodyB62; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]63; CHECK: [n] -> { Stmt_bodyA__TO__bodyB[i0] -> MemRef_A[0] };64; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]65; CHECK: [n] -> { Stmt_bodyA__TO__bodyB[i0] -> MemRef_val[] };66; CHECK: Instructions {67; CHECK: %val = fadd double 2.100000e+01, 2.100000e+0168; CHECK: %cond = fcmp oeq double 2.100000e+01, 2.100000e+0169; CHECK: }70; CHECK: Stmt_bodyB71; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]72; CHECK: [n] -> { Stmt_bodyB[i0] -> MemRef_A[0] };73; CHECK: Instructions {74; CHECK: %val = fadd double 2.100000e+01, 2.100000e+0175; CHECK: store double %val, ptr %A, align 876; CHECK: }77; CHECK: }78 79