; 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)