169 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2 3; RUN: llc < %s -mtriple=aarch64 -regalloc=basic | FileCheck %s4 5; Test that the register allocator behaves differently with minsize functions.6 7declare void @foo(i32, ptr)8 9define void @optsize(i32 %arg, i32 %arg1, ptr %arg2, ptr %arg3, ptr %arg4, i32 %arg5, i1 %arg6) minsize {10; CHECK-LABEL: optsize:11; CHECK: // %bb.0: // %bb12; CHECK-NEXT: stp x30, x23, [sp, #-48]! // 16-byte Folded Spill13; CHECK-NEXT: stp x22, x21, [sp, #16] // 16-byte Folded Spill14; CHECK-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill15; CHECK-NEXT: .cfi_def_cfa_offset 4816; CHECK-NEXT: .cfi_offset w19, -817; CHECK-NEXT: .cfi_offset w20, -1618; CHECK-NEXT: .cfi_offset w21, -2419; CHECK-NEXT: .cfi_offset w22, -3220; CHECK-NEXT: .cfi_offset w23, -4021; CHECK-NEXT: .cfi_offset w30, -4822; CHECK-NEXT: mov w23, w523; CHECK-NEXT: mov x22, x424; CHECK-NEXT: mov x21, x325; CHECK-NEXT: mov x20, x226; CHECK-NEXT: mov w19, w127; CHECK-NEXT: .LBB0_1: // %bb828; CHECK-NEXT: // =>This Inner Loop Header: Depth=129; CHECK-NEXT: cbz w19, .LBB0_130; CHECK-NEXT: // %bb.2: // %bb831; CHECK-NEXT: // in Loop: Header=BB0_1 Depth=132; CHECK-NEXT: cmp w19, #3933; CHECK-NEXT: b.eq .LBB0_634; CHECK-NEXT: // %bb.3: // %bb835; CHECK-NEXT: // in Loop: Header=BB0_1 Depth=136; CHECK-NEXT: cmp w19, #3437; CHECK-NEXT: b.eq .LBB0_638; CHECK-NEXT: // %bb.4: // %bb839; CHECK-NEXT: // in Loop: Header=BB0_1 Depth=140; CHECK-NEXT: cmp w19, #1041; CHECK-NEXT: b.ne .LBB0_142; CHECK-NEXT: // %bb.5: // %bb943; CHECK-NEXT: // in Loop: Header=BB0_1 Depth=144; CHECK-NEXT: str wzr, [x20]45; CHECK-NEXT: b .LBB0_146; CHECK-NEXT: .LBB0_6: // %bb1047; CHECK-NEXT: // in Loop: Header=BB0_1 Depth=148; CHECK-NEXT: mov w0, w2349; CHECK-NEXT: mov x1, x2150; CHECK-NEXT: str wzr, [x22]51; CHECK-NEXT: bl foo52; CHECK-NEXT: b .LBB0_153bb:54 br label %bb755 56bb7: ; preds = %bb13, %bb57 %phi = phi i32 [ 0, %bb ], [ %spec.select, %bb13 ]58 br label %bb859 60bb8: ; preds = %bb10, %bb9, %bb8, %bb761 switch i32 %arg1, label %bb8 [62 i32 10, label %bb963 i32 1, label %bb1664 i32 0, label %bb1365 i32 39, label %bb1066 i32 34, label %bb1067 ]68 69bb9: ; preds = %bb870 store i32 0, ptr %arg2, align 471 br label %bb872 73bb10: ; preds = %bb8, %bb874 store i32 0, ptr %arg4, align 475 tail call void @foo(i32 %arg5, ptr %arg3)76 br label %bb877 78bb13: ; preds = %bb879 %not.arg6 = xor i1 %arg6, true80 %spec.select = zext i1 %not.arg6 to i3281 br label %bb782 83bb16: ; preds = %bb884 unreachable85}86 87define void @optspeed(i32 %arg, i32 %arg1, ptr %arg2, ptr %arg3, ptr %arg4, i32 %arg5, i1 %arg6) {88; CHECK-LABEL: optspeed:89; CHECK: // %bb.0: // %bb90; CHECK-NEXT: stp x30, x23, [sp, #-48]! // 16-byte Folded Spill91; CHECK-NEXT: stp x22, x21, [sp, #16] // 16-byte Folded Spill92; CHECK-NEXT: stp x20, x19, [sp, #32] // 16-byte Folded Spill93; CHECK-NEXT: .cfi_def_cfa_offset 4894; CHECK-NEXT: .cfi_offset w19, -895; CHECK-NEXT: .cfi_offset w20, -1696; CHECK-NEXT: .cfi_offset w21, -2497; CHECK-NEXT: .cfi_offset w22, -3298; CHECK-NEXT: .cfi_offset w23, -4099; CHECK-NEXT: .cfi_offset w30, -48100; CHECK-NEXT: mov w22, w5101; CHECK-NEXT: mov x21, x4102; CHECK-NEXT: mov x20, x3103; CHECK-NEXT: mov x23, x2104; CHECK-NEXT: mov w19, w1105; CHECK-NEXT: b .LBB1_2106; CHECK-NEXT: .LBB1_1: // %bb10107; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1108; CHECK-NEXT: mov w0, w22109; CHECK-NEXT: mov x1, x20110; CHECK-NEXT: str wzr, [x21]111; CHECK-NEXT: bl foo112; CHECK-NEXT: .LBB1_2: // %bb8113; CHECK-NEXT: // =>This Inner Loop Header: Depth=1114; CHECK-NEXT: cmp w19, #33115; CHECK-NEXT: b.gt .LBB1_6116; CHECK-NEXT: // %bb.3: // %bb8117; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1118; CHECK-NEXT: cbz w19, .LBB1_2119; CHECK-NEXT: // %bb.4: // %bb8120; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1121; CHECK-NEXT: cmp w19, #10122; CHECK-NEXT: b.ne .LBB1_2123; CHECK-NEXT: // %bb.5: // %bb9124; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1125; CHECK-NEXT: str wzr, [x23]126; CHECK-NEXT: b .LBB1_2127; CHECK-NEXT: .LBB1_6: // %bb8128; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1129; CHECK-NEXT: cmp w19, #34130; CHECK-NEXT: b.eq .LBB1_1131; CHECK-NEXT: // %bb.7: // %bb8132; CHECK-NEXT: // in Loop: Header=BB1_2 Depth=1133; CHECK-NEXT: cmp w19, #39134; CHECK-NEXT: b.eq .LBB1_1135; CHECK-NEXT: b .LBB1_2136bb:137 br label %bb7138 139bb7: ; preds = %bb13, %bb140 %phi = phi i32 [ 0, %bb ], [ %spec.select, %bb13 ]141 br label %bb8142 143bb8: ; preds = %bb10, %bb9, %bb8, %bb7144 switch i32 %arg1, label %bb8 [145 i32 10, label %bb9146 i32 1, label %bb16147 i32 0, label %bb13148 i32 39, label %bb10149 i32 34, label %bb10150 ]151 152bb9: ; preds = %bb8153 store i32 0, ptr %arg2, align 4154 br label %bb8155 156bb10: ; preds = %bb8, %bb8157 store i32 0, ptr %arg4, align 4158 tail call void @foo(i32 %arg5, ptr %arg3)159 br label %bb8160 161bb13: ; preds = %bb8162 %not.arg6 = xor i1 %arg6, true163 %spec.select = zext i1 %not.arg6 to i32164 br label %bb7165 166bb16: ; preds = %bb8167 unreachable168}169