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 6 7; Test using t2 to jump table branch. 8define 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, a0, a2 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 43; 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, a0, a2 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 77entry: 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 ] 86bb1: 87 store i32 4, ptr %out 88 br label %exit 89bb2: 90 store i32 3, ptr %out 91 br label %exit 92bb3: 93 store i32 2, ptr %out 94 br label %exit 95bb4: 96 store i32 1, ptr %out 97 br label %exit 98bb5: 99 store i32 100, ptr %out 100 br label %exit 101bb6: 102 store i32 200, ptr %out 103 br label %exit 104exit: 105 ret void 106} 107