mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-15 16:09:02 +00:00
6ee91ac76e
Unlike PPC64, PPC32/SVRV4 does not have red zone. In the absence of it there is no guarantee that this part of the stack will not be modified by any interrupt. To avoid this, make sure to claim the stack frame first before storing into it. This fixes https://llvm.org/bugs/show_bug.cgi?id=26519. Differential Revision: https://reviews.llvm.org/D24093 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280705 91177308-0d34-0410-b5e6-96231b3b80d8
46 lines
1.7 KiB
LLVM
46 lines
1.7 KiB
LLVM
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin | FileCheck -check-prefix=CHECK-MACHO %s
|
|
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin -disable-fp-elim | FileCheck -check-prefix=CHECK-MACHO %s
|
|
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-linux-gnu | FileCheck -check-prefix=LINUX-NO-FP %s
|
|
; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-linux-gnu -disable-fp-elim | FileCheck -check-prefix=LINUX-FP %s
|
|
|
|
define void @func() {
|
|
entry:
|
|
unreachable
|
|
}
|
|
|
|
; MachO cannot handle an empty function.
|
|
; CHECK-MACHO: _func:
|
|
; CHECK-MACHO-NEXT: .cfi_startproc
|
|
; CHECK-MACHO-NEXT: {{^}};
|
|
; CHECK-MACHO-NEXT: nop
|
|
; CHECK-MACHO-NEXT: .cfi_endproc
|
|
|
|
; An empty function is perfectly fine on ELF.
|
|
; LINUX-NO-FP: func:
|
|
; LINUX-NO-FP-NEXT: {{^}}.L[[BEGIN:.*]]:{{$}}
|
|
; LINUX-NO-FP-NEXT: .cfi_startproc
|
|
; LINUX-NO-FP-NEXT: {{^}}#
|
|
; LINUX-NO-FP-NEXT: {{^}}.L[[END:.*]]:{{$}}
|
|
; LINUX-NO-FP-NEXT: .size func, .L[[END]]-.L[[BEGIN]]
|
|
; LINUX-NO-FP-NEXT: .cfi_endproc
|
|
|
|
; A cfi directive can point to the end of a function. It (and in fact the
|
|
; entire body) could be optimized out because of the unreachable, but we
|
|
; don't do it right now.
|
|
; LINUX-FP: func:
|
|
; LINUX-FP-NEXT: {{^}}.L[[BEGIN:.*]]:{{$}}
|
|
; LINUX-FP-NEXT: .cfi_startproc
|
|
; LINUX-FP-NEXT: {{^}}#
|
|
; LINUX-FP-NEXT: stwu 1, -16(1)
|
|
; LINUX-FP-NEXT: stw 31, 12(1)
|
|
; LINUX-FP-NEXT: {{^}}.L{{.*}}:{{$}}
|
|
; LINUX-FP-NEXT: .cfi_def_cfa_offset 16
|
|
; LINUX-FP-NEXT: {{^}}.L{{.*}}:{{$}}
|
|
; LINUX-FP-NEXT: .cfi_offset r31, -4
|
|
; LINUX-FP-NEXT: mr 31, 1
|
|
; LINUX-FP-NEXT:{{^}}.L{{.*}}:{{$}}
|
|
; LINUX-FP-NEXT: .cfi_def_cfa_register r31
|
|
; LINUX-FP-NEXT: {{^}}.L[[END:.*]]:{{$}}
|
|
; LINUX-FP-NEXT: .size func, .L[[END]]-.L[[BEGIN]]
|
|
; LINUX-FP-NEXT: .cfi_endproc
|