; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple=powerpc-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD32 %s ; RUN: llc -mtriple=powerpc64-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD64 %s ; RUN: llc -mtriple=powerpc-unknown-linux < %s | FileCheck -check-prefix=LINUX32 %s ; RUN: llc -mtriple=powerpc64-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s ; RUN: llc -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s ; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s define void @func() sspreq nounwind { ; OPENBSD32-LABEL: func: ; OPENBSD32: # %bb.0: ; OPENBSD32-NEXT: mflr 0 ; OPENBSD32-NEXT: stwu 1, -32(1) ; OPENBSD32-NEXT: stw 0, 36(1) ; OPENBSD32-NEXT: stw 30, 24(1) # 4-byte Folded Spill ; OPENBSD32-NEXT: lis 30, __guard_local@ha ; OPENBSD32-NEXT: lwz 3, __guard_local@l(30) ; OPENBSD32-NEXT: stw 3, 20(1) ; OPENBSD32-NEXT: addi 3, 1, 16 ; OPENBSD32-NEXT: bl capture ; OPENBSD32-NEXT: lwz 3, __guard_local@l(30) ; OPENBSD32-NEXT: lwz 4, 20(1) ; OPENBSD32-NEXT: cmplw 3, 4 ; OPENBSD32-NEXT: bne- 0, .LBB0_2 ; OPENBSD32-NEXT: # %bb.1: # %SP_return ; OPENBSD32-NEXT: lwz 30, 24(1) # 4-byte Folded Reload ; OPENBSD32-NEXT: lwz 0, 36(1) ; OPENBSD32-NEXT: addi 1, 1, 32 ; OPENBSD32-NEXT: mtlr 0 ; OPENBSD32-NEXT: blr ; OPENBSD32-NEXT: .LBB0_2: # %CallStackCheckFailBlk ; OPENBSD32-NEXT: lis 3, .LSSH@ha ; OPENBSD32-NEXT: la 3, .LSSH@l(3) ; OPENBSD32-NEXT: bl __stack_smash_handler ; ; OPENBSD64-LABEL: func: ; OPENBSD64: # %bb.0: ; OPENBSD64-NEXT: mflr 0 ; OPENBSD64-NEXT: std 30, -16(1) # 8-byte Folded Spill ; OPENBSD64-NEXT: stdu 1, -64(1) ; OPENBSD64-NEXT: std 0, 80(1) ; OPENBSD64-NEXT: addis 30, 2, __guard_local@toc@ha ; OPENBSD64-NEXT: ld 3, __guard_local@toc@l(30) ; OPENBSD64-NEXT: std 3, 40(1) ; OPENBSD64-NEXT: addi 3, 1, 36 ; OPENBSD64-NEXT: bl capture ; OPENBSD64-NEXT: nop ; OPENBSD64-NEXT: ld 3, __guard_local@toc@l(30) ; OPENBSD64-NEXT: ld 4, 40(1) ; OPENBSD64-NEXT: cmpld 3, 4 ; OPENBSD64-NEXT: bne- 0, .LBB0_2 ; OPENBSD64-NEXT: # %bb.1: # %SP_return ; OPENBSD64-NEXT: addi 1, 1, 64 ; OPENBSD64-NEXT: ld 0, 16(1) ; OPENBSD64-NEXT: mtlr 0 ; OPENBSD64-NEXT: ld 30, -16(1) # 8-byte Folded Reload ; OPENBSD64-NEXT: blr ; OPENBSD64-NEXT: .LBB0_2: # %CallStackCheckFailBlk ; OPENBSD64-NEXT: addis 3, 2, .LSSH@toc@ha ; OPENBSD64-NEXT: addi 3, 3, .LSSH@toc@l ; OPENBSD64-NEXT: bl __stack_smash_handler ; OPENBSD64-NEXT: nop ; ; LINUX32-LABEL: func: ; LINUX32: # %bb.0: ; LINUX32-NEXT: mflr 0 ; LINUX32-NEXT: stwu 1, -16(1) ; LINUX32-NEXT: stw 0, 20(1) ; LINUX32-NEXT: lwz 3, -28680(2) ; LINUX32-NEXT: stw 3, 12(1) ; LINUX32-NEXT: addi 3, 1, 8 ; LINUX32-NEXT: bl capture ; LINUX32-NEXT: lwz 3, 12(1) ; LINUX32-NEXT: lwz 4, -28680(2) ; LINUX32-NEXT: cmplw 4, 3 ; LINUX32-NEXT: bne 0, .LBB0_2 ; LINUX32-NEXT: # %bb.1: ; LINUX32-NEXT: lwz 0, 20(1) ; LINUX32-NEXT: addi 1, 1, 16 ; LINUX32-NEXT: mtlr 0 ; LINUX32-NEXT: blr ; LINUX32-NEXT: .LBB0_2: ; LINUX32-NEXT: bl __stack_chk_fail ; ; LINUX64-LABEL: func: ; LINUX64: # %bb.0: ; LINUX64-NEXT: mflr 0 ; LINUX64-NEXT: stdu 1, -128(1) ; LINUX64-NEXT: std 0, 144(1) ; LINUX64-NEXT: ld 3, -28688(13) ; LINUX64-NEXT: std 3, 120(1) ; LINUX64-NEXT: addi 3, 1, 116 ; LINUX64-NEXT: bl capture ; LINUX64-NEXT: nop ; LINUX64-NEXT: ld 3, 120(1) ; LINUX64-NEXT: ld 4, -28688(13) ; LINUX64-NEXT: cmpld 4, 3 ; LINUX64-NEXT: bne 0, .LBB0_2 ; LINUX64-NEXT: # %bb.1: ; LINUX64-NEXT: addi 1, 1, 128 ; LINUX64-NEXT: ld 0, 16(1) ; LINUX64-NEXT: mtlr 0 ; LINUX64-NEXT: blr ; LINUX64-NEXT: .LBB0_2: ; LINUX64-NEXT: bl __stack_chk_fail ; LINUX64-NEXT: nop ; ; AIX32-LABEL: func: ; AIX32: # %bb.0: ; AIX32-NEXT: mflr 0 ; AIX32-NEXT: stwu 1, -80(1) ; AIX32-NEXT: stw 0, 88(1) ; AIX32-NEXT: stw 31, 76(1) # 4-byte Folded Spill ; AIX32-NEXT: lwz 31, L..C0(2) # @__ssp_canary_word ; AIX32-NEXT: lwz 3, 0(31) ; AIX32-NEXT: stw 3, 72(1) ; AIX32-NEXT: addi 3, 1, 68 ; AIX32-NEXT: bl .capture[PR] ; AIX32-NEXT: nop ; AIX32-NEXT: lwz 3, 0(31) ; AIX32-NEXT: lwz 4, 72(1) ; AIX32-NEXT: cmplw 3, 4 ; AIX32-NEXT: bne 0, L..BB0_2 ; AIX32-NEXT: # %bb.1: ; AIX32-NEXT: lwz 31, 76(1) # 4-byte Folded Reload ; AIX32-NEXT: addi 1, 1, 80 ; AIX32-NEXT: lwz 0, 8(1) ; AIX32-NEXT: mtlr 0 ; AIX32-NEXT: blr ; AIX32-NEXT: L..BB0_2: ; AIX32-NEXT: bl .__stack_chk_fail[PR] ; AIX32-NEXT: nop ; ; AIX64-LABEL: func: ; AIX64: # %bb.0: ; AIX64-NEXT: mflr 0 ; AIX64-NEXT: stdu 1, -144(1) ; AIX64-NEXT: std 0, 160(1) ; AIX64-NEXT: std 31, 136(1) # 8-byte Folded Spill ; AIX64-NEXT: ld 31, L..C0(2) # @__ssp_canary_word ; AIX64-NEXT: ld 3, 0(31) ; AIX64-NEXT: std 3, 128(1) ; AIX64-NEXT: addi 3, 1, 124 ; AIX64-NEXT: bl .capture[PR] ; AIX64-NEXT: nop ; AIX64-NEXT: ld 3, 0(31) ; AIX64-NEXT: ld 4, 128(1) ; AIX64-NEXT: cmpld 3, 4 ; AIX64-NEXT: bne 0, L..BB0_2 ; AIX64-NEXT: # %bb.1: ; AIX64-NEXT: ld 31, 136(1) # 8-byte Folded Reload ; AIX64-NEXT: addi 1, 1, 144 ; AIX64-NEXT: ld 0, 16(1) ; AIX64-NEXT: mtlr 0 ; AIX64-NEXT: blr ; AIX64-NEXT: L..BB0_2: ; AIX64-NEXT: bl .__stack_chk_fail[PR] ; AIX64-NEXT: nop %alloca = alloca i32, align 4 call void @capture(ptr %alloca) ret void } declare void @capture(ptr)