52 lines · plain
1; RUN: llc -mtriple=hexagon -mcpu=hexagonv5 -enable-pipeliner -verify-machineinstrs < %s | FileCheck %s2 3; If the trip count is a compile-time constant, then decrement it instead4; of computing a new LC0 value.5 6; CHECK-LABEL: @test7; CHECK: loop0(.LBB0_1,#999)8 9define i32 @test(ptr %A, ptr %B, i32 %count) {10entry:11 br label %for.body12 13for.body:14 %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ]15 %arrayidx.phi = phi ptr [ %A, %entry ], [ %arrayidx.inc, %for.body ]16 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]17 %0 = load i32, ptr %arrayidx.phi, align 418 %add = add nsw i32 %0, %sum.0219 %inc = add nsw i32 %i.01, 120 %exitcond = icmp eq i32 %inc, 100021 %arrayidx.inc = getelementptr i32, ptr %arrayidx.phi, i32 122 br i1 %exitcond, label %for.end, label %for.body23 24for.end:25 ret i32 %add26}27 28; The constant trip count is small enough that the kernel is not executed.29 30; CHECK-LABEL: @test131; CHECK-NOT: loop0(32 33define i32 @test1(ptr %A, ptr %B, i32 %count) {34entry:35 br label %for.body36 37for.body:38 %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ]39 %arrayidx.phi = phi ptr [ %A, %entry ], [ %arrayidx.inc, %for.body ]40 %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]41 %0 = load i32, ptr %arrayidx.phi, align 442 %add = add nsw i32 %0, %sum.0243 %inc = add nsw i32 %i.01, 144 %exitcond = icmp eq i32 %inc, 145 %arrayidx.inc = getelementptr i32, ptr %arrayidx.phi, i32 146 br i1 %exitcond, label %for.end, label %for.body47 48for.end:49 ret i32 %add50}51 52