[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / jumptable-swguarded.ll
blobb4ab0585c0cc98099e0af175b9a3c3fc313c2ee3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple riscv32 -mattr=+experimental-zicfilp < %s | FileCheck %s
3 ; RUN: llc -mtriple riscv64 -mattr=+experimental-zicfilp < %s | FileCheck %s
4 ; RUN: llc -mtriple riscv32 < %s | FileCheck %s --check-prefix=NO-ZICFILP
5 ; RUN: llc -mtriple riscv64 < %s | FileCheck %s --check-prefix=NO-ZICFILP
7 ; Test using t2 to jump table branch.
8 define void @above_threshold(i32 signext %in, ptr %out) nounwind {
9 ; CHECK-LABEL: above_threshold:
10 ; CHECK:       # %bb.0: # %entry
11 ; CHECK-NEXT:    lpad 0
12 ; CHECK-NEXT:    addi a0, a0, -1
13 ; CHECK-NEXT:    li a2, 5
14 ; CHECK-NEXT:    bltu a2, a0, .LBB0_9
15 ; CHECK-NEXT:  # %bb.1: # %entry
16 ; CHECK-NEXT:    slli a0, a0, 2
17 ; CHECK-NEXT:    lui a2, %hi(.LJTI0_0)
18 ; CHECK-NEXT:    addi a2, a2, %lo(.LJTI0_0)
19 ; CHECK-NEXT:    add a0, a2, a0
20 ; CHECK-NEXT:    lw t2, 0(a0)
21 ; CHECK-NEXT:    jr t2
22 ; CHECK-NEXT:  .LBB0_2: # %bb1
23 ; CHECK-NEXT:    li a0, 4
24 ; CHECK-NEXT:    j .LBB0_8
25 ; CHECK-NEXT:  .LBB0_3: # %bb5
26 ; CHECK-NEXT:    li a0, 100
27 ; CHECK-NEXT:    j .LBB0_8
28 ; CHECK-NEXT:  .LBB0_4: # %bb3
29 ; CHECK-NEXT:    li a0, 2
30 ; CHECK-NEXT:    j .LBB0_8
31 ; CHECK-NEXT:  .LBB0_5: # %bb4
32 ; CHECK-NEXT:    li a0, 1
33 ; CHECK-NEXT:    j .LBB0_8
34 ; CHECK-NEXT:  .LBB0_6: # %bb2
35 ; CHECK-NEXT:    li a0, 3
36 ; CHECK-NEXT:    j .LBB0_8
37 ; CHECK-NEXT:  .LBB0_7: # %bb6
38 ; CHECK-NEXT:    li a0, 200
39 ; CHECK-NEXT:  .LBB0_8: # %exit
40 ; CHECK-NEXT:    sw a0, 0(a1)
41 ; CHECK-NEXT:  .LBB0_9: # %exit
42 ; CHECK-NEXT:    ret
44 ; NO-ZICFILP-LABEL: above_threshold:
45 ; NO-ZICFILP:       # %bb.0: # %entry
46 ; NO-ZICFILP-NEXT:    addi a0, a0, -1
47 ; NO-ZICFILP-NEXT:    li a2, 5
48 ; NO-ZICFILP-NEXT:    bltu a2, a0, .LBB0_9
49 ; NO-ZICFILP-NEXT:  # %bb.1: # %entry
50 ; NO-ZICFILP-NEXT:    slli a0, a0, 2
51 ; NO-ZICFILP-NEXT:    lui a2, %hi(.LJTI0_0)
52 ; NO-ZICFILP-NEXT:    addi a2, a2, %lo(.LJTI0_0)
53 ; NO-ZICFILP-NEXT:    add a0, a2, a0
54 ; NO-ZICFILP-NEXT:    lw a0, 0(a0)
55 ; NO-ZICFILP-NEXT:    jr a0
56 ; NO-ZICFILP-NEXT:  .LBB0_2: # %bb1
57 ; NO-ZICFILP-NEXT:    li a0, 4
58 ; NO-ZICFILP-NEXT:    j .LBB0_8
59 ; NO-ZICFILP-NEXT:  .LBB0_3: # %bb5
60 ; NO-ZICFILP-NEXT:    li a0, 100
61 ; NO-ZICFILP-NEXT:    j .LBB0_8
62 ; NO-ZICFILP-NEXT:  .LBB0_4: # %bb3
63 ; NO-ZICFILP-NEXT:    li a0, 2
64 ; NO-ZICFILP-NEXT:    j .LBB0_8
65 ; NO-ZICFILP-NEXT:  .LBB0_5: # %bb4
66 ; NO-ZICFILP-NEXT:    li a0, 1
67 ; NO-ZICFILP-NEXT:    j .LBB0_8
68 ; NO-ZICFILP-NEXT:  .LBB0_6: # %bb2
69 ; NO-ZICFILP-NEXT:    li a0, 3
70 ; NO-ZICFILP-NEXT:    j .LBB0_8
71 ; NO-ZICFILP-NEXT:  .LBB0_7: # %bb6
72 ; NO-ZICFILP-NEXT:    li a0, 200
73 ; NO-ZICFILP-NEXT:  .LBB0_8: # %exit
74 ; NO-ZICFILP-NEXT:    sw a0, 0(a1)
75 ; NO-ZICFILP-NEXT:  .LBB0_9: # %exit
76 ; NO-ZICFILP-NEXT:    ret
77 entry:
78   switch i32 %in, label %exit [
79     i32 1, label %bb1
80     i32 2, label %bb2
81     i32 3, label %bb3
82     i32 4, label %bb4
83     i32 5, label %bb5
84     i32 6, label %bb6
85   ]
86 bb1:
87   store i32 4, ptr %out
88   br label %exit
89 bb2:
90   store i32 3, ptr %out
91   br label %exit
92 bb3:
93   store i32 2, ptr %out
94   br label %exit
95 bb4:
96   store i32 1, ptr %out
97   br label %exit
98 bb5:
99   store i32 100, ptr %out
100   br label %exit
101 bb6:
102   store i32 200, ptr %out
103   br label %exit
104 exit:
105   ret void