88 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1-m.main-none-eabi -mcpu=cortex-m55 -O3 < %s | FileCheck %s3 4define i32 @loop(ptr nocapture readonly %x) {5; CHECK-LABEL: loop:6; CHECK: @ %bb.0: @ %entry7; CHECK-NEXT: .save {r7, lr}8; CHECK-NEXT: push {r7, lr}9; CHECK-NEXT: mov.w lr, #50010; CHECK-NEXT: mov r1, r011; CHECK-NEXT: movs r0, #012; CHECK-NEXT: .p2align 213; CHECK-NEXT: .LBB0_1: @ %for.body14; CHECK-NEXT: @ =>This Inner Loop Header: Depth=115; CHECK-NEXT: ldr r2, [r1], #416; CHECK-NEXT: add r0, r217; CHECK-NEXT: le lr, .LBB0_118; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup19; CHECK-NEXT: pop {r7, pc}20entry:21 br label %for.body22 23for.cond.cleanup: ; preds = %for.body24 ret i32 %add25 26for.body: ; preds = %entry, %for.body27 %i.07 = phi i32 [ 0, %entry ], [ %inc, %for.body ]28 %s.06 = phi i32 [ 0, %entry ], [ %add, %for.body ]29 %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.0730 %0 = load i32, ptr %arrayidx, align 431 %add = add nsw i32 %0, %s.0632 %inc = add nuw nsw i32 %i.07, 133 %exitcond.not = icmp eq i32 %inc, 50034 br i1 %exitcond.not, label %for.cond.cleanup, label %for.body35}36 37define i64 @loopif(ptr nocapture readonly %x, i32 %y, i32 %n) {38; CHECK-LABEL: loopif:39; CHECK: @ %bb.0: @ %entry40; CHECK-NEXT: .save {r7, lr}41; CHECK-NEXT: push {r7, lr}42; CHECK-NEXT: cmp r2, #143; CHECK-NEXT: blt .LBB1_444; CHECK-NEXT: @ %bb.1: @ %for.body.lr.ph45; CHECK-NEXT: dls lr, r246; CHECK-NEXT: mov r12, r047; CHECK-NEXT: movs r0, #048; CHECK-NEXT: movs r3, #049; CHECK-NEXT: .p2align 250; CHECK-NEXT: .LBB1_2: @ %for.body51; CHECK-NEXT: @ =>This Inner Loop Header: Depth=152; CHECK-NEXT: ldr r2, [r12], #453; CHECK-NEXT: smlal r0, r3, r2, r154; CHECK-NEXT: le lr, .LBB1_255; CHECK-NEXT: @ %bb.3: @ %for.cond.cleanup56; CHECK-NEXT: mov r1, r357; CHECK-NEXT: pop {r7, pc}58; CHECK-NEXT: .p2align 259; CHECK-NEXT: .LBB1_4:60; CHECK-NEXT: movs r0, #061; CHECK-NEXT: movs r3, #062; CHECK-NEXT: mov r1, r363; CHECK-NEXT: pop {r7, pc}64entry:65 %cmp7 = icmp sgt i32 %n, 066 br i1 %cmp7, label %for.body.lr.ph, label %for.cond.cleanup67 68for.body.lr.ph: ; preds = %entry69 %conv1 = sext i32 %y to i6470 br label %for.body71 72for.cond.cleanup: ; preds = %for.body, %entry73 %s.0.lcssa = phi i64 [ 0, %entry ], [ %add, %for.body ]74 ret i64 %s.0.lcssa75 76for.body: ; preds = %for.body.lr.ph, %for.body77 %i.09 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]78 %s.08 = phi i64 [ 0, %for.body.lr.ph ], [ %add, %for.body ]79 %arrayidx = getelementptr inbounds i32, ptr %x, i32 %i.0980 %0 = load i32, ptr %arrayidx, align 481 %conv = sext i32 %0 to i6482 %mul = mul nsw i64 %conv, %conv183 %add = add nsw i64 %mul, %s.0884 %inc = add nuw nsw i32 %i.09, 185 %exitcond.not = icmp eq i32 %inc, %n86 br i1 %exitcond.not, label %for.cond.cleanup, label %for.body87}88