mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
42052632ff
Relands commit 433c8d950cb3a1fa0977355ce0367e8c763a3f13 with fixes for MIPS. Similar to D102742, specifying the stack alignment via CodegenOpts means that this flag gets dropped during LTO, unless the command line is re-specified as a plugin opt. Instead, encode this information as a module level attribute so that we don't have to expose this llvm internal flag when linking the Linux kernel with LTO. Looks like external dependencies might need a fix: * https://github.com/llvm-hs/llvm-hs/issues/345 * https://github.com/halide/Halide/issues/6079 Link: https://github.com/ClangBuiltLinux/linux/issues/1377 Reviewed By: tejohnson Differential Revision: https://reviews.llvm.org/D103048
35 lines
905 B
LLVM
35 lines
905 B
LLVM
; RUN: llc < %s -stackrealign -mattr=+avx -mtriple=x86_64-apple-darwin10 | FileCheck %s
|
|
; PR11468
|
|
|
|
define void @f(i64 %sz) uwtable {
|
|
entry:
|
|
%a = alloca i32, align 32
|
|
store volatile i32 0, i32* %a, align 32
|
|
; force to push r14 on stack
|
|
call void asm sideeffect "nop", "~{r14},~{dirflag},~{fpsr},~{flags}"() nounwind, !srcloc !0
|
|
ret void
|
|
|
|
; CHECK: _f
|
|
; CHECK: pushq %rbp
|
|
; CHECK: .cfi_offset %rbp, -16
|
|
; CHECK: movq %rsp, %rbp
|
|
; CHECK: .cfi_def_cfa_register %rbp
|
|
|
|
; We first push register on stack, and then realign it, so that
|
|
; .cfi_offset value is correct
|
|
; CHECK: pushq %r14
|
|
; CHECK: andq $-32, %rsp
|
|
; CHECK: .cfi_offset %r14, -24
|
|
|
|
; Restore %rsp from %rbp and subtract the total size of saved registers.
|
|
; CHECK: leaq -8(%rbp), %rsp
|
|
|
|
; Pop saved registers.
|
|
; CHECK: popq %r14
|
|
; CHECK: popq %rbp
|
|
}
|
|
|
|
!llvm.module.flags = !{!1}
|
|
!0 = !{i32 125}
|
|
!1 = !{i32 2, !"override-stack-alignment", i32 32}
|