Files
clang-p2996/llvm/test/CodeGen/X86/pr11468.ll
Nick Desaulniers 3787ee4571 reland [IR] make -stack-alignment= into a module attr
Relands commit 433c8d950c 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
2021-06-08 10:59:46 -07:00

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}