brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 5e5f34d Raw
49 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly<no-default-opts>' -S < %s | FileCheck %s2 3define void @foo(ptr %A, i1 %cond0, i1 %cond1) {4entry:5  br label %loop6 7loop:8  %indvar = phi i64 [0, %entry], [%indvar.next, %backedge]9  %val0 = fadd float 1.0, 2.010  %val1 = fadd float 1.0, 2.011  br i1 %cond0, label %branch1, label %backedge12 13; CHECK-LABEL: polly.stmt.loop:14; CHECK-NEXT:    %p_val0 = fadd float 1.000000e+00, 2.000000e+0015; CHECK-NEXT:    %p_val1 = fadd float 1.000000e+00, 2.000000e+0016; CHECK-NEXT:    br i117 18; The interesting instruction here is %val2, which does not dominate the exit of19; the non-affine region. Care needs to be taken when code-generating this write.20; Specifically, at some point we modeled this scalar write, which we tried to21; code generate in the exit block of the non-affine region.22branch1:23  %val2 = fadd float 1.0, 2.024  br i1 %cond1, label %branch2, label %backedge25 26; CHECK-LABEL: polly.stmt.branch1:27; CHECK-NEXT:    %p_val2 = fadd float 1.000000e+00, 2.000000e+0028; CHECK-NEXT:    br i129 30branch2:31  br label %backedge32 33; CHECK-LABEL: polly.stmt.branch2:34; CHECK-NEXT:    br label35 36; CHECK-LABEL: polly.stmt.backedge.exit:37; CHECK:         %polly.merge = phi float [ %p_val0, %polly.stmt.loop ], [ %p_val1, %polly.stmt.branch1 ], [ %p_val2, %polly.stmt.branch2 ]38 39backedge:40  %merge = phi float [%val0, %loop], [%val1, %branch1], [%val2, %branch2]41  %indvar.next = add i64 %indvar, 142  store float %merge, ptr %A43  %cmp = icmp sle i64 %indvar.next, 10044  br i1 %cmp, label %loop, label %exit45 46exit:47  ret void48}49