xref: /llvm-project/llvm/test/CodeGen/RISCV/miss-sp-restore-eh.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
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