| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ;; Test target-specific stack cookie location. | |
| ; | |
| ; RUN: llc -mtriple=riscv64-linux < %s | FileCheck --check-prefix=LINUX-RISCV64 %s | |
| ; RUN: llc -mtriple=riscv64-fuchsia < %s | FileCheck --check-prefix=FUCHSIA-RISCV64 %s | |
| ; RUN: llc -mtriple=riscv64-android < %s | FileCheck --check-prefix=ANDROID-RISCV64 %s | |
| ; RUN: llc -mtriple=riscv64-openbsd < %s | FileCheck --check-prefix=OPENBSD-RISCV64 %s | |
| define void @func() sspreq nounwind { | |
| ; LINUX-RISCV64-LABEL: func: | |
| ; LINUX-RISCV64: # %bb.0: | |
| ; LINUX-RISCV64-NEXT: addi sp, sp, -32 | |
| ; LINUX-RISCV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill | |
| ; LINUX-RISCV64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill | |
| ; LINUX-RISCV64-NEXT: lui s0, %hi(__stack_chk_guard) | |
| ; LINUX-RISCV64-NEXT: ld a0, %lo(__stack_chk_guard)(s0) | |
| ; LINUX-RISCV64-NEXT: sd a0, 8(sp) | |
| ; LINUX-RISCV64-NEXT: addi a0, sp, 4 | |
| ; LINUX-RISCV64-NEXT: call capture | |
| ; LINUX-RISCV64-NEXT: ld a0, %lo(__stack_chk_guard)(s0) | |
| ; LINUX-RISCV64-NEXT: ld a1, 8(sp) | |
| ; LINUX-RISCV64-NEXT: bne a0, a1, .LBB0_2 | |
| ; LINUX-RISCV64-NEXT: # %bb.1: | |
| ; LINUX-RISCV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload | |
| ; LINUX-RISCV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload | |
| ; LINUX-RISCV64-NEXT: addi sp, sp, 32 | |
| ; LINUX-RISCV64-NEXT: ret | |
| ; LINUX-RISCV64-NEXT: .LBB0_2: | |
| ; LINUX-RISCV64-NEXT: call __stack_chk_fail | |
| ; | |
| ; FUCHSIA-RISCV64-LABEL: func: | |
| ; FUCHSIA-RISCV64: # %bb.0: | |
| ; FUCHSIA-RISCV64-NEXT: addi sp, sp, -32 | |
| ; FUCHSIA-RISCV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill | |
| ; FUCHSIA-RISCV64-NEXT: ld a0, -16(tp) | |
| ; FUCHSIA-RISCV64-NEXT: sd a0, 16(sp) | |
| ; FUCHSIA-RISCV64-NEXT: addi a0, sp, 12 | |
| ; FUCHSIA-RISCV64-NEXT: call capture | |
| ; FUCHSIA-RISCV64-NEXT: ld a0, -16(tp) | |
| ; FUCHSIA-RISCV64-NEXT: ld a1, 16(sp) | |
| ; FUCHSIA-RISCV64-NEXT: bne a0, a1, .LBB0_2 | |
| ; FUCHSIA-RISCV64-NEXT: # %bb.1: # %SP_return | |
| ; FUCHSIA-RISCV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload | |
| ; FUCHSIA-RISCV64-NEXT: addi sp, sp, 32 | |
| ; FUCHSIA-RISCV64-NEXT: ret | |
| ; FUCHSIA-RISCV64-NEXT: .LBB0_2: # %CallStackCheckFailBlk | |
| ; FUCHSIA-RISCV64-NEXT: call __stack_chk_fail | |
| ; | |
| ; ANDROID-RISCV64-LABEL: func: | |
| ; ANDROID-RISCV64: # %bb.0: | |
| ; ANDROID-RISCV64-NEXT: addi sp, sp, -32 | |
| ; ANDROID-RISCV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill | |
| ; ANDROID-RISCV64-NEXT: ld a0, -24(tp) | |
| ; ANDROID-RISCV64-NEXT: sd a0, 16(sp) | |
| ; ANDROID-RISCV64-NEXT: addi a0, sp, 12 | |
| ; ANDROID-RISCV64-NEXT: call capture | |
| ; ANDROID-RISCV64-NEXT: ld a0, -24(tp) | |
| ; ANDROID-RISCV64-NEXT: ld a1, 16(sp) | |
| ; ANDROID-RISCV64-NEXT: bne a0, a1, .LBB0_2 | |
| ; ANDROID-RISCV64-NEXT: # %bb.1: # %SP_return | |
| ; ANDROID-RISCV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload | |
| ; ANDROID-RISCV64-NEXT: addi sp, sp, 32 | |
| ; ANDROID-RISCV64-NEXT: ret | |
| ; ANDROID-RISCV64-NEXT: .LBB0_2: # %CallStackCheckFailBlk | |
| ; ANDROID-RISCV64-NEXT: call __stack_chk_fail | |
| ; | |
| ; OPENBSD-RISCV64-LABEL: func: | |
| ; OPENBSD-RISCV64: # %bb.0: | |
| ; OPENBSD-RISCV64-NEXT: addi sp, sp, -32 | |
| ; OPENBSD-RISCV64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill | |
| ; OPENBSD-RISCV64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill | |
| ; OPENBSD-RISCV64-NEXT: lui s0, %hi(__guard_local) | |
| ; OPENBSD-RISCV64-NEXT: ld a0, %lo(__guard_local)(s0) | |
| ; OPENBSD-RISCV64-NEXT: sd a0, 8(sp) | |
| ; OPENBSD-RISCV64-NEXT: addi a0, sp, 4 | |
| ; OPENBSD-RISCV64-NEXT: call capture | |
| ; OPENBSD-RISCV64-NEXT: ld a0, %lo(__guard_local)(s0) | |
| ; OPENBSD-RISCV64-NEXT: ld a1, 8(sp) | |
| ; OPENBSD-RISCV64-NEXT: bne a0, a1, .LBB0_2 | |
| ; OPENBSD-RISCV64-NEXT: # %bb.1: # %SP_return | |
| ; OPENBSD-RISCV64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload | |
| ; OPENBSD-RISCV64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload | |
| ; OPENBSD-RISCV64-NEXT: addi sp, sp, 32 | |
| ; OPENBSD-RISCV64-NEXT: ret | |
| ; OPENBSD-RISCV64-NEXT: .LBB0_2: # %CallStackCheckFailBlk | |
| ; OPENBSD-RISCV64-NEXT: lui a0, %hi(.LSSH) | |
| ; OPENBSD-RISCV64-NEXT: addi a0, a0, %lo(.LSSH) | |
| ; OPENBSD-RISCV64-NEXT: call __stack_smash_handler | |
| %1 = alloca i32, align 4 | |
| call void @capture(ptr %1) | |
| ret void | |
| } | |
| declare void @capture(ptr) |