commit 8323ff0c59739e4735fd896fad4be05e54432815
Author: Brad Smith <brad@comstyle.com>
Date:   Mon Sep 22 03:11:54 2025 -0400

    Default stack alignment of X86 Hurd to 16 bytes (#158454)
    
    https://sourceware.org/bugzilla/show_bug.cgi?id=21120

Index: llvm-toolchain-21-21.1.8/llvm/lib/Target/X86/X86Subtarget.cpp
===================================================================
--- llvm-toolchain-21-21.1.8.orig/llvm/lib/Target/X86/X86Subtarget.cpp
+++ llvm-toolchain-21-21.1.8/llvm/lib/Target/X86/X86Subtarget.cpp
@@ -302,13 +302,13 @@ void X86Subtarget::initSubtargetFeatures
     reportFatalUsageError("64-bit code requested on a subtarget that doesn't "
                           "support it!");
 
-  // Stack alignment is 16 bytes on Darwin, Linux, kFreeBSD, NaCl, and for all
+  // Stack alignment is 16 bytes on Darwin, Linux, kFreeBSD, NaCl, Hurd 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() ||
-           isTargetNaCl() || Is64Bit)
+           isTargetNaCl() || isTargetHurd() Is64Bit)
     stackAlignment = Align(16);
 
   // Consume the vector width attribute or apply any target specific limit.
Index: llvm-toolchain-21-21.1.8/llvm/lib/Target/X86/X86Subtarget.h
===================================================================
--- llvm-toolchain-21-21.1.8.orig/llvm/lib/Target/X86/X86Subtarget.h
+++ llvm-toolchain-21-21.1.8/llvm/lib/Target/X86/X86Subtarget.h
@@ -297,6 +297,7 @@ public:
 
   bool isTargetLinux() const { return TargetTriple.isOSLinux(); }
   bool isTargetKFreeBSD() const { return TargetTriple.isOSKFreeBSD(); }
+  bool isTargetHurd() const { return TargetTriple.isOSHurd(); }
   bool isTargetGlibc() const { return TargetTriple.isOSGlibc(); }
   bool isTargetAndroid() const { return TargetTriple.isAndroid(); }
   bool isTargetNaCl() const { return TargetTriple.isOSNaCl(); }
Index: llvm-toolchain-21-21.1.8/llvm/test/CodeGen/X86/stack-align2.ll
===================================================================
--- llvm-toolchain-21-21.1.8.orig/llvm/test/CodeGen/X86/stack-align2.ll
+++ llvm-toolchain-21-21.1.8/llvm/test/CodeGen/X86/stack-align2.ll
@@ -1,11 +1,13 @@
 ; RUN: llc < %s -mcpu=generic -mtriple=i386-linux | FileCheck %s -check-prefix=LINUX-I386
 ; RUN: llc < %s -mcpu=generic -mtriple=i386-kfreebsd | FileCheck %s -check-prefix=KFREEBSD-I386
+; RUN: llc < %s -mcpu=generic -mtriple=i386-hurd | FileCheck %s -check-prefix=HURD-I386
 ; 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-hurd | FileCheck %s -check-prefix=HURD-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
@@ -19,6 +21,7 @@ entry:
 ; LINUX-I386:     subl	$12, %esp
 ; KFREEBSD-I386:  subl	$12, %esp
 ; DARWIN-I386:    subl	$12, %esp
+; HURD-I386:      subl	$12, %esp
 ; NACL-I386:      subl	$12, %esp
 ; NETBSD-I386-NOT:  subl	{{.*}}, %esp
 ; SOLARIS-I386-NOT: subl	{{.*}}, %esp
@@ -35,6 +38,8 @@ entry:
 ; SOLARIS-X86_64-NOT: subq	{{.*}}, %rsp
 ; KFREEBSD-X86_64:     pushq %{{.*}}
 ; KFREEBSD-X86_64-NOT: subq	{{.*}}, %rsp
+; HURD-X86_64:       pushq %{{.*}}
+; HURD-X86_64-NOT:   subq	{{.*}}, %rsp
 }
 
 declare void @test2()
