From 877aa02c97a6c14bd440a5930fe15d842a38fdbe Mon Sep 17 00:00:00 2001 From: Fabian Sommer Date: Tue, 18 May 2021 15:06:08 -0700 Subject: [PATCH] Default stack alignment of x86 NaCl to 16 bytes X86 NaCl generally requires the stack to be aligned to 16 bytes. This change was already implemented in two downstream NaCl compilers based on llvm. Reviewed By: dschuff Differential Revision: https://reviews.llvm.org/D102610 --- lib/Target/X86/X86Subtarget.cpp | 4 ++-- test/CodeGen/X86/stack-align2.ll | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index c95213c3539..4af0ac238f5 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -265,13 +265,13 @@ void X86Subtarget::initSubtargetFeatures(StringRef CPU, StringRef TuneCPU, report_fatal_error("64-bit code requested on a subtarget that doesn't " "support it!"); - // Stack alignment is 16 bytes on Darwin, Linux, kFreeBSD and for all + // Stack alignment is 16 bytes on Darwin, Linux, kFreeBSD, NaCl, and for all // 64-bit targets. On Solaris (32-bit), stack alignment is 4 bytes // following the i386 psABI, while on Illumos it is always 16 bytes. if (StackAlignOverride) stackAlignment = *StackAlignOverride; else if (isTargetDarwin() || isTargetLinux() || isTargetKFreeBSD() || - In64BitMode) + isTargetNaCl() || In64BitMode) stackAlignment = Align(16); // Consume the vector width attribute or apply any target specific limit. diff --git a/test/CodeGen/X86/stack-align2.ll b/test/CodeGen/X86/stack-align2.ll index 095a9090ed0..99f36d2ca8b 100644 --- a/test/CodeGen/X86/stack-align2.ll +++ b/test/CodeGen/X86/stack-align2.ll @@ -3,11 +3,13 @@ ; RUN: llc < %s -mcpu=generic -mtriple=i386-netbsd | FileCheck %s -check-prefix=NETBSD-I386 ; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin8 | FileCheck %s -check-prefix=DARWIN-I386 ; RUN: llc < %s -mcpu=generic -mtriple=i386-pc-solaris2.11 | FileCheck %s -check-prefix=SOLARIS-I386 +; RUN: llc < %s -mcpu=generic -mtriple=i386-nacl | FileCheck %s -check-prefix=NACL-I386 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s -check-prefix=LINUX-X86_64 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-kfreebsd | FileCheck %s -check-prefix=KFREEBSD-X86_64 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-netbsd | FileCheck %s -check-prefix=NETBSD-X86_64 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin8 | FileCheck %s -check-prefix=DARWIN-X86_64 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-pc-solaris2.11 | FileCheck %s -check-prefix=SOLARIS-X86_64 +; RUN: llc < %s -mcpu=generic -mtriple=x86_64-nacl | FileCheck %s -check-prefix=NACL-X86_64 define i32 @test() nounwind { entry: @@ -17,6 +19,7 @@ entry: ; LINUX-I386: subl $12, %esp ; KFREEBSD-I386: subl $12, %esp ; DARWIN-I386: subl $12, %esp +; NACL-I386: subl $12, %esp ; NETBSD-I386-NOT: subl {{.*}}, %esp ; SOLARIS-I386-NOT: subl {{.*}}, %esp @@ -24,6 +27,8 @@ entry: ; LINUX-X86_64-NOT: subq {{.*}}, %rsp ; DARWIN-X86_64: pushq %{{.*}} ; DARWIN-X86_64-NOT: subq {{.*}}, %rsp +; NACL-X86_64: pushq %{{.*}} +; NACL-X86_64-NOT: subq {{.*}}, %rsp ; NETBSD-X86_64: pushq %{{.*}} ; NETBSD-X86_64-NOT: subq {{.*}}, %rsp ; SOLARIS-X86_64: pushq %{{.*}}