| ; 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: {{.*}} |