78 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines2;3; Move %v and %val to %bodyB, so %bodyA can be removed (by -polly-simplify)4;5; for (int j = 0; j < n; j += 1) {6; bodyA:7; double val1 = 12.5 + 12.5;8;9; bodyB:10; double val2 = 21.0 + 21.0;11;12; bodyC:13; A[0] = val2;14; }15;16define void @func(i32 %n, ptr noalias nonnull %A) {17entry:18 br label %for19 20for:21 %j = phi i32 [0, %entry], [%j.inc, %inc]22 %j.cmp = icmp slt i32 %j, %n23 br i1 %j.cmp, label %bodyA, label %exit24 25 bodyA:26 %val1 = fadd double 12.5, 12.527 br label %bodyB28 29 bodyB:30 %val2 = fadd double %val1, 21.031 br label %bodyC32 33 bodyC:34 store double %val2, ptr %A35 br label %inc36 37inc:38 %j.inc = add nuw nsw i32 %j, 139 br label %for40 41exit:42 br label %return43 44return:45 ret void46}47 48 49; CHECK: Statistics {50; CHECK: Instructions copied: 351; CHECK: Operand trees forwarded: 252; CHECK: Statements with forwarded operand trees: 253; CHECK: }54 55; CHECK: After statements {56; CHECK-NEXT: Stmt_bodyA57; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]58; CHECK-NEXT: [n] -> { Stmt_bodyA[i0] -> MemRef_val1[] };59; CHECK-NEXT: Instructions {60; CHECK-NEXT: %val1 = fadd double 1.250000e+01, 1.250000e+0161; CHECK-NEXT: }62; CHECK-NEXT: Stmt_bodyB63; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]64; CHECK-NEXT: [n] -> { Stmt_bodyB[i0] -> MemRef_val2[] };65; CHECK-NEXT: Instructions {66; CHECK-NEXT: %val1 = fadd double 1.250000e+01, 1.250000e+0167; CHECK-NEXT: %val2 = fadd double %val1, 2.100000e+0168; CHECK-NEXT: }69; CHECK-NEXT: Stmt_bodyC70; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]71; CHECK-NEXT: [n] -> { Stmt_bodyC[i0] -> MemRef_A[0] };72; CHECK-NEXT: Instructions {73; CHECK-NEXT: %val1 = fadd double 1.250000e+01, 1.250000e+0174; CHECK-NEXT: %val2 = fadd double %val1, 2.100000e+0175; CHECK-NEXT: store double %val2, ptr %A, align 876; CHECK-NEXT: }77; CHECK-NEXT: }78