| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | |
| ; RUN: llc -mtriple=arm-unknown-linux-eabi < %s | FileCheck -check-prefix=LINUX %s | |
| ; RUN: llc -mtriple=arm-unknown-linux-gnueabi < %s | FileCheck -check-prefix=LINUX %s | |
| ; RUN: llc -mtriple=arm-unknown-openbsd < %s | FileCheck -check-prefix=OPENBSD %s | |
| define void @func() sspreq nounwind { | |
| ; LINUX-LABEL: func: | |
| ; LINUX: @ %bb.0: | |
| ; LINUX-NEXT: .save {r11, lr} | |
| ; LINUX-NEXT: push {r11, lr} | |
| ; LINUX-NEXT: .pad #8 | |
| ; LINUX-NEXT: sub sp, sp, #8 | |
| ; LINUX-NEXT: ldr r0, .LCPI0_0 | |
| ; LINUX-NEXT: ldr r0, [r0] | |
| ; LINUX-NEXT: str r0, [sp, #4] | |
| ; LINUX-NEXT: mov r0, sp | |
| ; LINUX-NEXT: bl capture | |
| ; LINUX-NEXT: ldr r0, [sp, #4] | |
| ; LINUX-NEXT: ldr r1, .LCPI0_0 | |
| ; LINUX-NEXT: ldr r1, [r1] | |
| ; LINUX-NEXT: cmp r1, r0 | |
| ; LINUX-NEXT: addeq sp, sp, #8 | |
| ; LINUX-NEXT: popeq {r11, lr} | |
| ; LINUX-NEXT: moveq pc, lr | |
| ; LINUX-NEXT: .LBB0_1: | |
| ; LINUX-NEXT: bl __stack_chk_fail | |
| ; LINUX-NEXT: .p2align 2 | |
| ; LINUX-NEXT: @ %bb.2: | |
| ; LINUX-NEXT: .LCPI0_0: | |
| ; LINUX-NEXT: .long __stack_chk_guard | |
| ; | |
| ; OPENBSD-LABEL: func: | |
| ; OPENBSD: @ %bb.0: | |
| ; OPENBSD-NEXT: push {r4, lr} | |
| ; OPENBSD-NEXT: sub sp, sp, #8 | |
| ; OPENBSD-NEXT: ldr r4, .LCPI0_0 | |
| ; OPENBSD-NEXT: ldr r0, [r4] | |
| ; OPENBSD-NEXT: ldr r0, .LCPI0_2 | |
| ; OPENBSD-NEXT: ldr r0, [r0] | |
| ; OPENBSD-NEXT: str r0, [sp, #4] | |
| ; OPENBSD-NEXT: mov r0, sp | |
| ; OPENBSD-NEXT: bl capture | |
| ; OPENBSD-NEXT: ldr r0, [r4] | |
| ; OPENBSD-NEXT: ldr r1, [sp, #4] | |
| ; OPENBSD-NEXT: cmp r0, r1 | |
| ; OPENBSD-NEXT: addeq sp, sp, #8 | |
| ; OPENBSD-NEXT: popeq {r4, lr} | |
| ; OPENBSD-NEXT: moveq pc, lr | |
| ; OPENBSD-NEXT: .LBB0_1: @ %CallStackCheckFailBlk | |
| ; OPENBSD-NEXT: ldr r0, .LCPI0_1 | |
| ; OPENBSD-NEXT: bl __stack_smash_handler | |
| ; OPENBSD-NEXT: .p2align 2 | |
| ; OPENBSD-NEXT: @ %bb.2: | |
| ; OPENBSD-NEXT: .LCPI0_0: | |
| ; OPENBSD-NEXT: .long __guard_local | |
| ; OPENBSD-NEXT: .LCPI0_1: | |
| ; OPENBSD-NEXT: .long .LSSH | |
| ; OPENBSD-NEXT: .LCPI0_2: | |
| ; OPENBSD-NEXT: .long __guard_local | |
| %alloca = alloca i32, align 4 | |
| call void @capture(ptr %alloca) | |
| ret void | |
| } | |
| declare void @capture(ptr) | |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: | |
| ; EABI: {{.*}} | |
| ; GNUEABI: {{.*}} |