[llvm] 49d77d8 - [X86][GlobalISel] Enable nest arguments (#165173)

via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 18 02:53:13 PST 2025


Author: Evgenii Kudriashov
Date: 2025-11-18T11:53:08+01:00
New Revision: 49d77d87d418e6e8e1a41e5ddefe74b1848da2af

URL: https://github.com/llvm/llvm-project/commit/49d77d87d418e6e8e1a41e5ddefe74b1848da2af
DIFF: https://github.com/llvm/llvm-project/commit/49d77d87d418e6e8e1a41e5ddefe74b1848da2af.diff

LOG: [X86][GlobalISel] Enable nest arguments (#165173)

Nest arguments are supported by CC in X86CallingConv.td. Nothing special
is required in GlobalISel as we reuse the code.

Nest attribute is mostly generated by fortran frontend.

Added: 
    llvm/test/CodeGen/X86/isel-arg-attrs.ll

Modified: 
    llvm/lib/Target/X86/GISel/X86CallLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/GISel/X86CallLowering.cpp b/llvm/lib/Target/X86/GISel/X86CallLowering.cpp
index c0b9339e9bc34..b07ce2b958fa0 100644
--- a/llvm/lib/Target/X86/GISel/X86CallLowering.cpp
+++ b/llvm/lib/Target/X86/GISel/X86CallLowering.cpp
@@ -280,8 +280,7 @@ bool X86CallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
     if (Arg.hasAttribute(Attribute::ByVal) ||
         Arg.hasAttribute(Attribute::InReg) ||
         Arg.hasAttribute(Attribute::SwiftSelf) ||
-        Arg.hasAttribute(Attribute::SwiftError) ||
-        Arg.hasAttribute(Attribute::Nest) || VRegs[Idx].size() > 1)
+        Arg.hasAttribute(Attribute::SwiftError) || VRegs[Idx].size() > 1)
       return false;
 
     if (Arg.hasAttribute(Attribute::StructRet)) {

diff  --git a/llvm/test/CodeGen/X86/isel-arg-attrs.ll b/llvm/test/CodeGen/X86/isel-arg-attrs.ll
new file mode 100644
index 0000000000000..3afee76715d6d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-arg-attrs.ll
@@ -0,0 +1,23 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=X64
+
+; The src array should be in R10 or ECX register due to nest attribute
+define i32 @nest_arg(ptr nest %src) {
+; X86-LABEL: nest_arg:
+; X86:       # %bb.0:
+; X86-NEXT:    movl 8(%ecx), %eax
+; X86-NEXT:    retl
+;
+; X64-LABEL: nest_arg:
+; X64:       # %bb.0:
+; X64-NEXT:    movl 8(%r10), %eax
+; X64-NEXT:    retq
+  %off = getelementptr [3 x i32], ptr %src, i32 0, i32 2
+  %ret = load i32, ptr %off
+  ret i32 %ret
+}


        


More information about the llvm-commits mailing list