83 lines · plain
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s2; Check that there are no packets with two or more instructions, except3; for the endloop packet.4 5; This is the expected code:6;7; p0 = cmp.gt(r3,#0)8; if (!p0) jump:nt .LBB0_39; loop0(.LBB0_2,r3)10; r3 = memw(r1++#4)11; r4 = memw(r2++#4)12; r3 = add(r4,r3)13; memw(r0++#4) = r314; { nop; nop }:endloop015; jumpr r3116 17; CHECK-LABEL: fred:18; CHECK: {19; CHECK-NEXT: cmp20; CHECK-NEXT: }21; CHECK: {22; CHECK-NEXT: jump23; CHECK-NEXT: }24; CHECK: {25; CHECK-NEXT: loop026; CHECK-NEXT: }27; CHECK: {28; CHECK-NEXT: memw29; CHECK-NEXT: }30; CHECK: {31; CHECK-NEXT: memw32; CHECK-NEXT: }33; CHECK: {34; CHECK-NEXT: add35; CHECK-NEXT: }36; CHECK: {37; CHECK-NEXT: memw38; CHECK-NEXT: }39; CHECK: {40; CHECK-NEXT: nop41; CHECK-NEXT: nop42; CHECK-NEXT: }{{[ \t]*}}:endloop043; CHECK: {44; CHECK-NEXT: jumpr r3145; CHECK-NEXT: }46 47target triple = "hexagon"48 49 50define void @fred(ptr nocapture %a0, ptr nocapture readonly %a1, ptr nocapture readonly %a2, i32 %a3) local_unnamed_addr #0 {51b4:52 %v5 = icmp sgt i32 %a3, 053 br i1 %v5, label %b6, label %b2154 55b6: ; preds = %b456 br label %b757 58b7: ; preds = %b7, %b659 %v8 = phi i32 [ %v18, %b7 ], [ 0, %b6 ]60 %v9 = phi ptr [ %v17, %b7 ], [ %a0, %b6 ]61 %v10 = phi ptr [ %v14, %b7 ], [ %a2, %b6 ]62 %v11 = phi ptr [ %v12, %b7 ], [ %a1, %b6 ]63 %v12 = getelementptr inbounds i32, ptr %v11, i32 164 %v13 = load i32, ptr %v11, align 465 %v14 = getelementptr inbounds i32, ptr %v10, i32 166 %v15 = load i32, ptr %v10, align 467 %v16 = add nsw i32 %v15, %v1368 %v17 = getelementptr inbounds i32, ptr %v9, i32 169 store i32 %v16, ptr %v9, align 470 %v18 = add nuw nsw i32 %v8, 171 %v19 = icmp eq i32 %v18, %a372 br i1 %v19, label %b20, label %b773 74b20: ; preds = %b775 br label %b2176 77b21: ; preds = %b20, %b478 ret void79}80 81attributes #0 = { norecurse nounwind "target-cpu"="hexagonv60" "target-features"="-packets" }82 83