1983a0ae5Swanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs < %s \ 3983a0ae5Swanglei; RUN: | FileCheck %s --check-prefix=LA32 4*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s \ 5983a0ae5Swanglei; RUN: | FileCheck %s --check-prefix=LA64 6983a0ae5Swanglei 7983a0ae5Swangleideclare void @foo(ptr %p); 8983a0ae5Swangleideclare void @bar(ptr %p); 9983a0ae5Swangleideclare dso_local i32 @__gxx_personality_v0(...) 10983a0ae5Swanglei 11983a0ae5Swanglei;; Before getExceptionPointerRegister() and getExceptionSelectorRegister() 12983a0ae5Swanglei;; lowering hooks were defined this would trigger an assertion during live 13983a0ae5Swanglei;; variable analysis. 14983a0ae5Swanglei 15983a0ae5Swangleidefine void @caller(ptr %p) personality ptr @__gxx_personality_v0 { 16983a0ae5Swanglei; LA32-LABEL: caller: 17983a0ae5Swanglei; LA32: # %bb.0: # %entry 18983a0ae5Swanglei; LA32-NEXT: addi.w $sp, $sp, -16 19983a0ae5Swanglei; LA32-NEXT: .cfi_def_cfa_offset 16 20983a0ae5Swanglei; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 21983a0ae5Swanglei; LA32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill 22983a0ae5Swanglei; LA32-NEXT: st.w $s0, $sp, 4 # 4-byte Folded Spill 23983a0ae5Swanglei; LA32-NEXT: .cfi_offset 1, -4 24983a0ae5Swanglei; LA32-NEXT: .cfi_offset 22, -8 25983a0ae5Swanglei; LA32-NEXT: .cfi_offset 23, -12 26983a0ae5Swanglei; LA32-NEXT: move $fp, $a0 2757ad3f1dSXiaodong Liu; LA32-NEXT: beqz $a0, .LBB0_2 2857ad3f1dSXiaodong Liu; LA32-NEXT: # %bb.1: # %bb2 29983a0ae5Swanglei; LA32-NEXT: .Ltmp0: 30983a0ae5Swanglei; LA32-NEXT: move $a0, $fp 31983a0ae5Swanglei; LA32-NEXT: bl %plt(bar) 32983a0ae5Swanglei; LA32-NEXT: .Ltmp1: 33983a0ae5Swanglei; LA32-NEXT: b .LBB0_3 3457ad3f1dSXiaodong Liu; LA32-NEXT: .LBB0_2: # %bb1 35983a0ae5Swanglei; LA32-NEXT: .Ltmp2: 36983a0ae5Swanglei; LA32-NEXT: move $a0, $fp 37983a0ae5Swanglei; LA32-NEXT: bl %plt(foo) 38983a0ae5Swanglei; LA32-NEXT: .Ltmp3: 39983a0ae5Swanglei; LA32-NEXT: .LBB0_3: # %end2 40983a0ae5Swanglei; LA32-NEXT: ld.w $s0, $sp, 4 # 4-byte Folded Reload 41983a0ae5Swanglei; LA32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload 42983a0ae5Swanglei; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 43983a0ae5Swanglei; LA32-NEXT: addi.w $sp, $sp, 16 44983a0ae5Swanglei; LA32-NEXT: ret 45983a0ae5Swanglei; LA32-NEXT: .LBB0_4: # %lpad 46983a0ae5Swanglei; LA32-NEXT: .Ltmp4: 47983a0ae5Swanglei; LA32-NEXT: move $s0, $a0 48983a0ae5Swanglei; LA32-NEXT: move $a0, $fp 49983a0ae5Swanglei; LA32-NEXT: bl callee 50983a0ae5Swanglei; LA32-NEXT: move $a0, $s0 51983a0ae5Swanglei; LA32-NEXT: bl %plt(_Unwind_Resume) 52983a0ae5Swanglei; 53983a0ae5Swanglei; LA64-LABEL: caller: 54983a0ae5Swanglei; LA64: # %bb.0: # %entry 55983a0ae5Swanglei; LA64-NEXT: addi.d $sp, $sp, -32 56983a0ae5Swanglei; LA64-NEXT: .cfi_def_cfa_offset 32 57983a0ae5Swanglei; LA64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill 58983a0ae5Swanglei; LA64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill 59983a0ae5Swanglei; LA64-NEXT: st.d $s0, $sp, 8 # 8-byte Folded Spill 60983a0ae5Swanglei; LA64-NEXT: .cfi_offset 1, -8 61983a0ae5Swanglei; LA64-NEXT: .cfi_offset 22, -16 62983a0ae5Swanglei; LA64-NEXT: .cfi_offset 23, -24 63983a0ae5Swanglei; LA64-NEXT: move $fp, $a0 6457ad3f1dSXiaodong Liu; LA64-NEXT: beqz $a0, .LBB0_2 6557ad3f1dSXiaodong Liu; LA64-NEXT: # %bb.1: # %bb2 66983a0ae5Swanglei; LA64-NEXT: .Ltmp0: 67983a0ae5Swanglei; LA64-NEXT: move $a0, $fp 68983a0ae5Swanglei; LA64-NEXT: bl %plt(bar) 69983a0ae5Swanglei; LA64-NEXT: .Ltmp1: 70983a0ae5Swanglei; LA64-NEXT: b .LBB0_3 7157ad3f1dSXiaodong Liu; LA64-NEXT: .LBB0_2: # %bb1 72983a0ae5Swanglei; LA64-NEXT: .Ltmp2: 73983a0ae5Swanglei; LA64-NEXT: move $a0, $fp 74983a0ae5Swanglei; LA64-NEXT: bl %plt(foo) 75983a0ae5Swanglei; LA64-NEXT: .Ltmp3: 76983a0ae5Swanglei; LA64-NEXT: .LBB0_3: # %end2 77983a0ae5Swanglei; LA64-NEXT: ld.d $s0, $sp, 8 # 8-byte Folded Reload 78983a0ae5Swanglei; LA64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload 79983a0ae5Swanglei; LA64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload 80983a0ae5Swanglei; LA64-NEXT: addi.d $sp, $sp, 32 81983a0ae5Swanglei; LA64-NEXT: ret 82983a0ae5Swanglei; LA64-NEXT: .LBB0_4: # %lpad 83983a0ae5Swanglei; LA64-NEXT: .Ltmp4: 84983a0ae5Swanglei; LA64-NEXT: move $s0, $a0 85983a0ae5Swanglei; LA64-NEXT: move $a0, $fp 86983a0ae5Swanglei; LA64-NEXT: bl callee 87983a0ae5Swanglei; LA64-NEXT: move $a0, $s0 88983a0ae5Swanglei; LA64-NEXT: bl %plt(_Unwind_Resume) 89983a0ae5Swangleientry: 90983a0ae5Swanglei %0 = icmp eq ptr %p, null 91983a0ae5Swanglei br i1 %0, label %bb1, label %bb2 92983a0ae5Swanglei 93983a0ae5Swangleibb1: 94983a0ae5Swanglei invoke void @foo(ptr %p) to label %end1 unwind label %lpad 95983a0ae5Swanglei 96983a0ae5Swangleibb2: 97983a0ae5Swanglei invoke void @bar(ptr %p) to label %end2 unwind label %lpad 98983a0ae5Swanglei 99983a0ae5Swangleilpad: 100983a0ae5Swanglei %1 = landingpad { ptr, i32 } cleanup 101983a0ae5Swanglei call void @callee(ptr %p) 102983a0ae5Swanglei resume { ptr, i32 } %1 103983a0ae5Swanglei 104983a0ae5Swangleiend1: 105983a0ae5Swanglei ret void 106983a0ae5Swanglei 107983a0ae5Swangleiend2: 108983a0ae5Swanglei ret void 109983a0ae5Swanglei} 110983a0ae5Swanglei 111983a0ae5Swangleidefine internal void @callee(ptr %p) { 112983a0ae5Swanglei; LA32-LABEL: callee: 113983a0ae5Swanglei; LA32: # %bb.0: 114983a0ae5Swanglei; LA32-NEXT: ret 115983a0ae5Swanglei; 116983a0ae5Swanglei; LA64-LABEL: callee: 117983a0ae5Swanglei; LA64: # %bb.0: 118983a0ae5Swanglei; LA64-NEXT: ret 119983a0ae5Swanglei ret void 120983a0ae5Swanglei} 121