[llvm] 980a7e7 - [X86][AVX10] Fix assertion with strict fcmp (#139500)
via llvm-commits
llvm-commits at lists.llvm.org
Mon May 12 05:56:37 PDT 2025
Author: Feng Zou
Date: 2025-05-12T20:56:34+08:00
New Revision: 980a7e75bcc0dec7c12c3d5c50cbee9423778ea8
URL: https://github.com/llvm/llvm-project/commit/980a7e75bcc0dec7c12c3d5c50cbee9423778ea8
DIFF: https://github.com/llvm/llvm-project/commit/980a7e75bcc0dec7c12c3d5c50cbee9423778ea8.diff
LOG: [X86][AVX10] Fix assertion with strict fcmp (#139500)
Check the strict mode and return MERGE_VALUES to fix the assertion of
invalid index for values defined in Res node.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/avx10_2-cmp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index ac4fb157a6026..ee295fd83670d 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -24573,9 +24573,11 @@ SDValue X86TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
if (CC == ISD::SETOEQ || CC == ISD::SETUNE) {
auto NewCC = (CC == ISD::SETOEQ) ? X86::COND_E : (X86::COND_NE);
assert(Op0.getSimpleValueType() != MVT::bf16 && "Unsupported Type");
- if (Op0.getSimpleValueType() != MVT::f80)
- return getSETCC(
+ if (Op0.getSimpleValueType() != MVT::f80) {
+ SDValue Res = getSETCC(
NewCC, DAG.getNode(X86ISD::UCOMX, dl, MVT::i32, Op0, Op1), dl, DAG);
+ return IsStrict ? DAG.getMergeValues({Res, Chain}, dl) : Res;
+ }
}
}
// Handle floating point.
diff --git a/llvm/test/CodeGen/X86/avx10_2-cmp.ll b/llvm/test/CodeGen/X86/avx10_2-cmp.ll
index 140a20c17ea6d..0f90f1a0a3561 100644
--- a/llvm/test/CodeGen/X86/avx10_2-cmp.ll
+++ b/llvm/test/CodeGen/X86/avx10_2-cmp.ll
@@ -276,3 +276,24 @@ if.then66: ; preds = %entry
if.end70: ; preds = %entry
ret i32 0
}
+
+define i1 @constrained_fcmp() {
+; X64-LABEL: constrained_fcmp:
+; X64: # %bb.0: # %entry
+; X64-NEXT: vxorpd %xmm0, %xmm0, %xmm0
+; X64-NEXT: vucomxsd %xmm0, %xmm0
+; X64-NEXT: setne %al
+; X64-NEXT: retq
+;
+; X86-LABEL: constrained_fcmp:
+; X86: # %bb.0: # %entry
+; X86-NEXT: vxorpd %xmm0, %xmm0, %xmm0
+; X86-NEXT: vucomxsd %xmm0, %xmm0
+; X86-NEXT: setne %al
+; X86-NEXT: retl
+entry:
+ %0 = tail call i1 @llvm.experimental.constrained.fcmps.f64(double 0.000000e+00, double 0.000000e+00, metadata !"une", metadata !"fpexcept.strict")
+ ret i1 %0
+}
+
+declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
More information about the llvm-commits
mailing list