1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -mtriple riscv64 < %s | FileCheck %s 3 4declare signext i32 @func1(ptr noundef) local_unnamed_addr 5declare signext i32 @func2(ptr noundef) local_unnamed_addr 6declare signext i32 @func3(ptr noundef) local_unnamed_addr 7declare signext i32 @func4(ptr noundef) local_unnamed_addr 8declare signext i32 @func5(ptr noundef) local_unnamed_addr 9declare signext i32 @default_func(ptr noundef) local_unnamed_addr 10 11define dso_local signext i32 @test_shrinkwrap_jump_table(ptr noundef %m) local_unnamed_addr { 12; CHECK-LABEL: test_shrinkwrap_jump_table: 13; CHECK: # %bb.0: # %entry 14; CHECK-NEXT: lw a1, 0(a0) 15; CHECK-NEXT: addi a1, a1, -1 16; CHECK-NEXT: li a2, 4 17; CHECK-NEXT: bltu a2, a1, .LBB0_7 18; CHECK-NEXT: # %bb.1: # %entry 19; CHECK-NEXT: slli a1, a1, 2 20; CHECK-NEXT: lui a2, %hi(.LJTI0_0) 21; CHECK-NEXT: addi a2, a2, %lo(.LJTI0_0) 22; CHECK-NEXT: add a1, a1, a2 23; CHECK-NEXT: lw a1, 0(a1) 24; CHECK-NEXT: jr a1 25; CHECK-NEXT: .LBB0_2: # %sw.bb 26; CHECK-NEXT: tail func1 27; CHECK-NEXT: .LBB0_3: # %sw.bb7 28; CHECK-NEXT: tail func5 29; CHECK-NEXT: .LBB0_4: # %sw.bb3 30; CHECK-NEXT: tail func3 31; CHECK-NEXT: .LBB0_5: # %sw.bb5 32; CHECK-NEXT: tail func4 33; CHECK-NEXT: .LBB0_6: # %sw.bb1 34; CHECK-NEXT: tail func2 35; CHECK-NEXT: .LBB0_7: # %sw.default 36; CHECK-NEXT: addi sp, sp, -16 37; CHECK-NEXT: .cfi_def_cfa_offset 16 38; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 39; CHECK-NEXT: .cfi_offset ra, -8 40; CHECK-NEXT: call default_func 41; CHECK-NEXT: li a0, 0 42; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 43; CHECK-NEXT: .cfi_restore ra 44; CHECK-NEXT: addi sp, sp, 16 45; CHECK-NEXT: .cfi_def_cfa_offset 0 46; CHECK-NEXT: ret 47entry: 48 %0 = load i32, ptr %m, align 4 49 switch i32 %0, label %sw.default [ 50 i32 1, label %sw.bb 51 i32 2, label %sw.bb1 52 i32 3, label %sw.bb3 53 i32 4, label %sw.bb5 54 i32 5, label %sw.bb7 55 ] 56 57sw.bb: 58 %call = tail call signext i32 @func1(ptr noundef nonnull %m) 59 br label %sw.epilog 60 61sw.bb1: 62 %call2 = tail call signext i32 @func2(ptr noundef nonnull %m) 63 br label %sw.epilog 64 65sw.bb3: 66 %call4 = tail call signext i32 @func3(ptr noundef nonnull %m) 67 br label %sw.epilog 68 69sw.bb5: 70 %call6 = tail call signext i32 @func4(ptr noundef nonnull %m) 71 br label %sw.epilog 72 73sw.bb7: 74 %call8 = tail call signext i32 @func5(ptr noundef nonnull %m) 75 br label %sw.epilog 76 77sw.default: 78 %call9 = tail call signext i32 @default_func(ptr noundef nonnull %m) 79 br label %sw.epilog 80 81sw.epilog: 82 %ret.0 = phi i32 [ 0, %sw.default ], [ %call8, %sw.bb7 ], [ %call6, %sw.bb5 ], [ %call4, %sw.bb3 ], [ %call2, %sw.bb1 ], [ %call, %sw.bb ] 83 ret i32 %ret.0 84} 85