81 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<optree>' -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines2;3; Synthesizable values defined outside of a loop can be used4; inside the loop.5;6; for (int j = 0; j < n; j += 1) {7; bodyA:8; double val = j;9;10; for (int i = 0; i < n; i += 1) {11; bodyB:12; A[0] = val;13; }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 %val = sitofp i32 %j to double27 br label %inner.for28 29 30 inner.for:31 %i = phi i32 [0, %bodyA], [%i.inc, %inner.inc]32 %i.cmp = icmp slt i32 %i, %n33 br i1 %i.cmp, label %bodyB, label %inner.exit34 35 36 bodyB:37 store double %val, ptr %A38 br label %inner.inc39 40 41 inner.inc:42 %i.inc = add nuw nsw i32 %i, 143 br label %inner.for44 45 inner.exit:46 br label %inc47 48inc:49 %j.inc = add nuw nsw i32 %j, 150 br label %for51 52exit:53 br label %return54 55return:56 ret void57}58 59 60; CHECK: Statistics {61; CHECK: Instructions copied: 162; CHECK: Operand trees forwarded: 163; CHECK: Statements with forwarded operand trees: 164; CHECK: }65 66; CHECK: After statements {67; CHECK-NEXT: Stmt_bodyA68; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]69; CHECK-NEXT: [n] -> { Stmt_bodyA[i0] -> MemRef_val[] };70; CHECK-NEXT: Instructions {71; CHECK-NEXT: %val = sitofp i32 %j to double72; CHECK-NEXT: }73; CHECK-NEXT: Stmt_bodyB74; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]75; CHECK-NEXT: [n] -> { Stmt_bodyB[i0, i1] -> MemRef_A[0] };76; CHECK-NEXT: Instructions {77; CHECK-NEXT: %val = sitofp i32 %j to double78; CHECK-NEXT: store double %val, ptr %A, align 879; CHECK-NEXT: }80; CHECK-NEXT: }81