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
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)
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
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
78 switch i32 %in, label %exit [
99 store i32 100, ptr %out
102 store i32 200, ptr %out