1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc --mtriple=loongarch32 -mattr=+d \ 3; RUN: --min-jump-table-entries=4 < %s \ 4; RUN: --loongarch-annotate-tablejump \ 5; RUN: | FileCheck %s --check-prefix=LA32-JT 6; RUN: llc --mtriple=loongarch64 -mattr=+d \ 7; RUN: --min-jump-table-entries=4 < %s \ 8; RUN: --loongarch-annotate-tablejump \ 9; RUN: | FileCheck %s --check-prefix=LA64-JT 10 11define void @switch_4_arms(i32 %in, ptr %out) nounwind { 12; LA32-JT-LABEL: switch_4_arms: 13; LA32-JT: # %bb.0: # %entry 14; LA32-JT-NEXT: addi.w $a3, $a0, -1 15; LA32-JT-NEXT: ori $a2, $zero, 3 16; LA32-JT-NEXT: bltu $a2, $a3, .LBB0_7 17; LA32-JT-NEXT: # %bb.1: # %entry 18; LA32-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_0) 19; LA32-JT-NEXT: addi.w $a4, $a4, %pc_lo12(.LJTI0_0) 20; LA32-JT-NEXT: alsl.w $a3, $a3, $a4, 2 21; LA32-JT-NEXT: ld.w $a3, $a3, 0 22; LA32-JT-NEXT: .Ljrtb_0: 23; LA32-JT-NEXT: jr $a3 24; LA32-JT-NEXT: .LBB0_2: # %bb1 25; LA32-JT-NEXT: ori $a3, $zero, 4 26; LA32-JT-NEXT: b .LBB0_6 27; LA32-JT-NEXT: .LBB0_3: # %bb2 28; LA32-JT-NEXT: ori $a3, $zero, 3 29; LA32-JT-NEXT: b .LBB0_6 30; LA32-JT-NEXT: .LBB0_4: # %bb3 31; LA32-JT-NEXT: ori $a3, $zero, 2 32; LA32-JT-NEXT: b .LBB0_6 33; LA32-JT-NEXT: .LBB0_5: # %bb4 34; LA32-JT-NEXT: ori $a3, $zero, 1 35; LA32-JT-NEXT: .LBB0_6: # %exit 36; LA32-JT-NEXT: st.w $a3, $a1, 0 37; LA32-JT-NEXT: .LBB0_7: # %exit 38; LA32-JT-NEXT: addi.w $a3, $a0, -5 39; LA32-JT-NEXT: bltu $a2, $a3, .LBB0_9 40; LA32-JT-NEXT: # %bb.8: # %exit 41; LA32-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_1) 42; LA32-JT-NEXT: addi.w $a4, $a4, %pc_lo12(.LJTI0_1) 43; LA32-JT-NEXT: alsl.w $a3, $a3, $a4, 2 44; LA32-JT-NEXT: ld.w $a3, $a3, 0 45; LA32-JT-NEXT: .Ljrtb_1: 46; LA32-JT-NEXT: jr $a3 47; LA32-JT-NEXT: .LBB0_9: # %exit2 48; LA32-JT-NEXT: ret 49; 50; LA64-JT-LABEL: switch_4_arms: 51; LA64-JT: # %bb.0: # %entry 52; LA64-JT-NEXT: addi.w $a0, $a0, 0 53; LA64-JT-NEXT: addi.d $a3, $a0, -1 54; LA64-JT-NEXT: ori $a2, $zero, 3 55; LA64-JT-NEXT: bltu $a2, $a3, .LBB0_7 56; LA64-JT-NEXT: # %bb.1: # %entry 57; LA64-JT-NEXT: slli.d $a3, $a3, 3 58; LA64-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_0) 59; LA64-JT-NEXT: addi.d $a4, $a4, %pc_lo12(.LJTI0_0) 60; LA64-JT-NEXT: ldx.d $a3, $a3, $a4 61; LA64-JT-NEXT: .Ljrtb_0: 62; LA64-JT-NEXT: jr $a3 63; LA64-JT-NEXT: .LBB0_2: # %bb1 64; LA64-JT-NEXT: ori $a3, $zero, 4 65; LA64-JT-NEXT: b .LBB0_6 66; LA64-JT-NEXT: .LBB0_3: # %bb2 67; LA64-JT-NEXT: ori $a3, $zero, 3 68; LA64-JT-NEXT: b .LBB0_6 69; LA64-JT-NEXT: .LBB0_4: # %bb3 70; LA64-JT-NEXT: ori $a3, $zero, 2 71; LA64-JT-NEXT: b .LBB0_6 72; LA64-JT-NEXT: .LBB0_5: # %bb4 73; LA64-JT-NEXT: ori $a3, $zero, 1 74; LA64-JT-NEXT: .LBB0_6: # %exit 75; LA64-JT-NEXT: st.w $a3, $a1, 0 76; LA64-JT-NEXT: .LBB0_7: # %exit 77; LA64-JT-NEXT: addi.d $a3, $a0, -5 78; LA64-JT-NEXT: bltu $a2, $a3, .LBB0_9 79; LA64-JT-NEXT: # %bb.8: # %exit 80; LA64-JT-NEXT: slli.d $a3, $a3, 3 81; LA64-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_1) 82; LA64-JT-NEXT: addi.d $a4, $a4, %pc_lo12(.LJTI0_1) 83; LA64-JT-NEXT: ldx.d $a3, $a3, $a4 84; LA64-JT-NEXT: .Ljrtb_1: 85; LA64-JT-NEXT: jr $a3 86; LA64-JT-NEXT: .LBB0_9: # %exit2 87; LA64-JT-NEXT: ret 88entry: 89 switch i32 %in, label %exit [ 90 i32 1, label %bb1 91 i32 2, label %bb2 92 i32 3, label %bb3 93 i32 4, label %bb4 94 ] 95bb1: 96 store i32 4, ptr %out 97 br label %exit 98bb2: 99 store i32 3, ptr %out 100 br label %exit 101bb3: 102 store i32 2, ptr %out 103 br label %exit 104bb4: 105 store i32 1, ptr %out 106 br label %exit 107exit: 108 switch i32 %in, label %exit2 [ 109 i32 5, label %bb1 110 i32 6, label %bb2 111 i32 7, label %bb3 112 i32 8, label %bb4 113 ] 114exit2: 115 ret void 116} 117 118; UTC_ARGS: --disable 119 120; LA32-JT-LABEL: .LJTI0_0: 121; LA32-JT: .section .discard.tablejump_annotate,"",@progbits 122; LA32-JT-NEXT: .word .Ljrtb_0 123; LA32-JT-NEXT: .word .LJTI0_0 124; LA32-JT-NEXT: .word .Ljrtb_1 125; LA32-JT-NEXT: .word .LJTI0_1 126 127; UTC_ARGS: --disable 128; LA64-JT-LABEL: .LJTI0_0: 129; LA64-JT: .section .discard.tablejump_annotate,"",@progbits 130; LA64-JT-NEXT: .dword .Ljrtb_0 131; LA64-JT-NEXT: .dword .LJTI0_0 132; LA64-JT-NEXT: .dword .Ljrtb_1 133; LA64-JT-NEXT: .dword .LJTI0_1 134