| ; 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 --code-model=small < %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: lwz 3, -28680(2) | |
| ; LINUX32-NEXT: stw 0, 20(1) | |
| ; 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: ld 3, -28688(13) | |
| ; LINUX64-NEXT: std 0, 144(1) | |
| ; 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) |