; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple=loongarch32-linux-gnu < %s | FileCheck -check-prefix=LINUX32 %s ; RUN: llc -mtriple=loongarch64-linux-gnu < %s | FileCheck -check-prefix=LINUX64 %s ; RUN: llc -mtriple=loongarch32-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s ; RUN: llc -mtriple=loongarch64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s define void @func() sspreq nounwind { ; LINUX32-LABEL: func: ; LINUX32: # %bb.0: ; LINUX32-NEXT: addi.w $sp, $sp, -16 ; LINUX32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill ; LINUX32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill ; LINUX32-NEXT: pcalau12i $fp, %pc_hi20(__stack_chk_guard) ; LINUX32-NEXT: ld.w $a0, $fp, %pc_lo12(__stack_chk_guard) ; LINUX32-NEXT: st.w $a0, $sp, 4 ; LINUX32-NEXT: addi.w $a0, $sp, 0 ; LINUX32-NEXT: bl capture ; LINUX32-NEXT: ld.w $a0, $fp, %pc_lo12(__stack_chk_guard) ; LINUX32-NEXT: ld.w $a1, $sp, 4 ; LINUX32-NEXT: bne $a0, $a1, .LBB0_2 ; LINUX32-NEXT: # %bb.1: ; LINUX32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload ; LINUX32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload ; LINUX32-NEXT: addi.w $sp, $sp, 16 ; LINUX32-NEXT: ret ; LINUX32-NEXT: .LBB0_2: ; LINUX32-NEXT: bl __stack_chk_fail ; ; LINUX64-LABEL: func: ; LINUX64: # %bb.0: ; LINUX64-NEXT: addi.d $sp, $sp, -32 ; LINUX64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill ; LINUX64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill ; LINUX64-NEXT: pcalau12i $fp, %pc_hi20(__stack_chk_guard) ; LINUX64-NEXT: ld.d $a0, $fp, %pc_lo12(__stack_chk_guard) ; LINUX64-NEXT: st.d $a0, $sp, 8 ; LINUX64-NEXT: addi.d $a0, $sp, 4 ; LINUX64-NEXT: pcaddu18i $ra, %call36(capture) ; LINUX64-NEXT: jirl $ra, $ra, 0 ; LINUX64-NEXT: ld.d $a0, $fp, %pc_lo12(__stack_chk_guard) ; LINUX64-NEXT: ld.d $a1, $sp, 8 ; LINUX64-NEXT: bne $a0, $a1, .LBB0_2 ; LINUX64-NEXT: # %bb.1: ; LINUX64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload ; LINUX64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload ; LINUX64-NEXT: addi.d $sp, $sp, 32 ; LINUX64-NEXT: ret ; LINUX64-NEXT: .LBB0_2: ; LINUX64-NEXT: pcaddu18i $ra, %call36(__stack_chk_fail) ; LINUX64-NEXT: jirl $ra, $ra, 0 ; ; OPENBSD32-LABEL: func: ; OPENBSD32: # %bb.0: ; OPENBSD32-NEXT: addi.w $sp, $sp, -16 ; OPENBSD32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill ; OPENBSD32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill ; OPENBSD32-NEXT: pcalau12i $fp, %pc_hi20(__guard_local) ; OPENBSD32-NEXT: ld.w $a0, $fp, %pc_lo12(__guard_local) ; OPENBSD32-NEXT: st.w $a0, $sp, 4 ; OPENBSD32-NEXT: addi.w $a0, $sp, 0 ; OPENBSD32-NEXT: bl capture ; OPENBSD32-NEXT: ld.w $a0, $fp, %pc_lo12(__guard_local) ; OPENBSD32-NEXT: ld.w $a1, $sp, 4 ; OPENBSD32-NEXT: bne $a0, $a1, .LBB0_2 ; OPENBSD32-NEXT: # %bb.1: # %SP_return ; OPENBSD32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload ; OPENBSD32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload ; OPENBSD32-NEXT: addi.w $sp, $sp, 16 ; OPENBSD32-NEXT: ret ; OPENBSD32-NEXT: .LBB0_2: # %CallStackCheckFailBlk ; OPENBSD32-NEXT: pcalau12i $a0, %pc_hi20(.LSSH) ; OPENBSD32-NEXT: addi.w $a0, $a0, %pc_lo12(.LSSH) ; OPENBSD32-NEXT: bl __stack_smash_handler ; ; OPENBSD64-LABEL: func: ; OPENBSD64: # %bb.0: ; OPENBSD64-NEXT: addi.d $sp, $sp, -32 ; OPENBSD64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill ; OPENBSD64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill ; OPENBSD64-NEXT: pcalau12i $fp, %pc_hi20(__guard_local) ; OPENBSD64-NEXT: ld.d $a0, $fp, %pc_lo12(__guard_local) ; OPENBSD64-NEXT: st.d $a0, $sp, 8 ; OPENBSD64-NEXT: addi.d $a0, $sp, 4 ; OPENBSD64-NEXT: pcaddu18i $ra, %call36(capture) ; OPENBSD64-NEXT: jirl $ra, $ra, 0 ; OPENBSD64-NEXT: ld.d $a0, $fp, %pc_lo12(__guard_local) ; OPENBSD64-NEXT: ld.d $a1, $sp, 8 ; OPENBSD64-NEXT: bne $a0, $a1, .LBB0_2 ; OPENBSD64-NEXT: # %bb.1: # %SP_return ; OPENBSD64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload ; OPENBSD64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload ; OPENBSD64-NEXT: addi.d $sp, $sp, 32 ; OPENBSD64-NEXT: ret ; OPENBSD64-NEXT: .LBB0_2: # %CallStackCheckFailBlk ; OPENBSD64-NEXT: pcalau12i $a0, %pc_hi20(.LSSH) ; OPENBSD64-NEXT: addi.d $a0, $a0, %pc_lo12(.LSSH) ; OPENBSD64-NEXT: pcaddu18i $ra, %call36(__stack_smash_handler) ; OPENBSD64-NEXT: jirl $ra, $ra, 0 %alloca = alloca i32, align 4 call void @capture(ptr %alloca) ret void } declare void @capture(ptr)