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