xref: /llvm-project/llvm/test/CodeGen/LoongArch/annotate-tablejump.ll (revision 4c2c177567390cd3d8de3fd757e9234f1da832b7)
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