[llvm] [X86] LowerAsmOperandForConstraint - ensure we treat L constraint immediates as signed constants (PR #171098)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 8 01:46:02 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Simon Pilgrim (RKSimon)
<details>
<summary>Changes</summary>
getTargetConstant no longer tolerates sign-extended values that can't be represented by the appropriate APInt bitwidth, which now defaults to unsigned behaviour.
Fixes #<!-- -->166058
---
Full diff: https://github.com/llvm/llvm-project/pull/171098.diff
2 Files Affected:
- (modified) llvm/lib/Target/X86/X86ISelLowering.cpp (+2-2)
- (added) llvm/test/CodeGen/X86/pr166058.ll (+15)
``````````diff
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index d0ae75b2e6785..8f22f8c3618a6 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -61928,8 +61928,8 @@ void X86TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
if (auto *C = dyn_cast<ConstantSDNode>(Op)) {
if (C->getZExtValue() == 0xff || C->getZExtValue() == 0xffff ||
(Subtarget.is64Bit() && C->getZExtValue() == 0xffffffff)) {
- Result = DAG.getTargetConstant(C->getSExtValue(), SDLoc(Op),
- Op.getValueType());
+ Result = DAG.getSignedTargetConstant(C->getSExtValue(), SDLoc(Op),
+ Op.getValueType());
break;
}
}
diff --git a/llvm/test/CodeGen/X86/pr166058.ll b/llvm/test/CodeGen/X86/pr166058.ll
new file mode 100644
index 0000000000000..2e0bb6036820f
--- /dev/null
+++ b/llvm/test/CodeGen/X86/pr166058.ll
@@ -0,0 +1,15 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=x86_64-- | FileCheck %s
+
+ at out = global i32 0, align 4
+define void @bar() {
+; CHECK-LABEL: bar:
+; CHECK: # %bb.0:
+; CHECK-NEXT: movq out at GOTPCREL(%rip), %rax
+; CHECK-NEXT: #APP
+; CHECK-NEXT: addq $-1, (%rax)
+; CHECK-NEXT: #NO_APP
+; CHECK-NEXT: retq
+ call void asm "addq $1,$0", "=*m,L,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) @out, i32 -1)
+ ret void
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/171098
More information about the llvm-commits
mailing list