18b342656SKito Cheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 28b342656SKito Cheng; RUN: llc -mtriple=riscv64 -mattr=+v,+m < %s \ 38b342656SKito Cheng; RUN: | FileCheck %s 48b342656SKito Cheng 58b342656SKito Cheng 68b342656SKito Cheng@_ZTIi = external dso_local constant ptr 78b342656SKito Cheng 88b342656SKito Chengdeclare void @_Z3fooiiiiiiiiiiPi(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3, i32 signext %4, i32 signext %5, i32 signext %6, i32 signext %7, i32 %8, i32 %9, i32 %10) 98b342656SKito Cheng 108b342656SKito Chengdeclare dso_local ptr @__cxa_allocate_exception(i64) 118b342656SKito Cheng 128b342656SKito Chengdeclare dso_local void @__cxa_throw(ptr, ptr, ptr) 138b342656SKito Cheng 148b342656SKito Chengdefine signext i32 @foo() #1 personality ptr @__gxx_personality_v0 { 158b342656SKito Cheng; CHECK-LABEL: foo: 168b342656SKito Cheng; CHECK: # %bb.0: # %entry 178b342656SKito Cheng; CHECK-NEXT: addi sp, sp, -32 188b342656SKito Cheng; CHECK-NEXT: .cfi_def_cfa_offset 32 198b342656SKito Cheng; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 208b342656SKito Cheng; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 218b342656SKito Cheng; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 228b342656SKito Cheng; CHECK-NEXT: .cfi_offset ra, -8 238b342656SKito Cheng; CHECK-NEXT: .cfi_offset s0, -16 248b342656SKito Cheng; CHECK-NEXT: .cfi_offset s1, -24 258b342656SKito Cheng; CHECK-NEXT: addi s0, sp, 32 268b342656SKito Cheng; CHECK-NEXT: .cfi_def_cfa s0, 0 27*97982a8cSdlav-sc; CHECK-NEXT: .cfi_remember_state 288b342656SKito Cheng; CHECK-NEXT: .Ltmp0: 298b342656SKito Cheng; CHECK-NEXT: addi sp, sp, -32 308b342656SKito Cheng; CHECK-NEXT: li a0, 0 318b342656SKito Cheng; CHECK-NEXT: li a1, 0 328b342656SKito Cheng; CHECK-NEXT: li a2, 0 338b342656SKito Cheng; CHECK-NEXT: li a3, 0 348b342656SKito Cheng; CHECK-NEXT: li a4, 0 358b342656SKito Cheng; CHECK-NEXT: li a5, 0 368b342656SKito Cheng; CHECK-NEXT: li a6, 0 378b342656SKito Cheng; CHECK-NEXT: li a7, 0 38eabaee0cSFangrui Song; CHECK-NEXT: call _Z3fooiiiiiiiiiiPi 398b342656SKito Cheng; CHECK-NEXT: addi sp, sp, 32 408b342656SKito Cheng; CHECK-NEXT: .Ltmp1: 418b342656SKito Cheng; CHECK-NEXT: # %bb.1: # %try.cont.unreachable 428b342656SKito Cheng; CHECK-NEXT: .LBB0_2: # %lpad 438b342656SKito Cheng; CHECK-NEXT: .Ltmp2: 448b342656SKito Cheng; CHECK-NEXT: sext.w a1, a1 458b342656SKito Cheng; CHECK-NEXT: li a2, 1 468b342656SKito Cheng; CHECK-NEXT: bne a1, a2, .LBB0_4 478b342656SKito Cheng; CHECK-NEXT: # %bb.3: # %catch 48eabaee0cSFangrui Song; CHECK-NEXT: call __cxa_begin_catch 498b342656SKito Cheng; CHECK-NEXT: lw s1, 0(a0) 50eabaee0cSFangrui Song; CHECK-NEXT: call __cxa_end_catch 518b342656SKito Cheng; CHECK-NEXT: mv a0, s1 524b11f909SKito Cheng; CHECK-NEXT: addi sp, s0, -32 53*97982a8cSdlav-sc; CHECK-NEXT: .cfi_def_cfa sp, 32 548b342656SKito Cheng; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 558b342656SKito Cheng; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 568b342656SKito Cheng; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 57*97982a8cSdlav-sc; CHECK-NEXT: .cfi_restore ra 58*97982a8cSdlav-sc; CHECK-NEXT: .cfi_restore s0 59*97982a8cSdlav-sc; CHECK-NEXT: .cfi_restore s1 608b342656SKito Cheng; CHECK-NEXT: addi sp, sp, 32 61*97982a8cSdlav-sc; CHECK-NEXT: .cfi_def_cfa_offset 0 628b342656SKito Cheng; CHECK-NEXT: ret 638b342656SKito Cheng; CHECK-NEXT: .LBB0_4: # %ehcleanup 64*97982a8cSdlav-sc; CHECK-NEXT: .cfi_restore_state 65eabaee0cSFangrui Song; CHECK-NEXT: call _Unwind_Resume 668b342656SKito Chengentry: 678b342656SKito Cheng invoke void @_Z3fooiiiiiiiiiiPi(i32 signext poison, i32 signext poison, i32 signext poison, i32 signext poison, i32 signext poison, i32 signext poison, i32 signext poison, i32 signext poison, i32 poison, i32 poison, i32 poison) 688b342656SKito Cheng to label %try.cont.unreachable unwind label %lpad 698b342656SKito Cheng 708b342656SKito Chenglpad: 718b342656SKito Cheng %0 = landingpad { ptr, i32 } 728b342656SKito Cheng cleanup 738b342656SKito Cheng catch ptr @_ZTIi 748b342656SKito Cheng %1 = extractvalue { ptr, i32 } %0, 1 758b342656SKito Cheng %2 = call i32 @llvm.eh.typeid.for(ptr nonnull @_ZTIi) 768b342656SKito Cheng %matches = icmp eq i32 %1, %2 778b342656SKito Cheng br i1 %matches, label %catch, label %ehcleanup 788b342656SKito Cheng 798b342656SKito Chengcatch: 808b342656SKito Cheng %3 = extractvalue { ptr, i32 } %0, 0 818b342656SKito Cheng %4 = call ptr @__cxa_begin_catch(ptr %3) 828b342656SKito Cheng %5 = load i32, ptr %4, align 4 838b342656SKito Cheng call void @__cxa_end_catch() 848b342656SKito Cheng ret i32 %5 858b342656SKito Cheng 868b342656SKito Chengtry.cont.unreachable: 878b342656SKito Cheng unreachable 888b342656SKito Cheng 898b342656SKito Chengehcleanup: 908b342656SKito Cheng resume { ptr, i32 } %0 918b342656SKito Cheng} 928b342656SKito Cheng 938b342656SKito Chengdeclare i32 @__gxx_personality_v0(...) 948b342656SKito Cheng 958b342656SKito Chengdeclare i32 @llvm.eh.typeid.for(ptr) 968b342656SKito Cheng 978b342656SKito Chengdeclare ptr @__cxa_begin_catch(ptr) 988b342656SKito Chengdeclare void @__cxa_end_catch() 998b342656SKito Cheng 1008b342656SKito Chengattributes #1 = { "frame-pointer"="all"} 101