[llvm] [SelectionDAGBuilder] Only check VPCmp for NaNs in fp comparisons (PR #189749)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 1 09:14:56 PDT 2026
https://github.com/zGoldthorpe updated https://github.com/llvm/llvm-project/pull/189749
>From 99cbe29c85f89306a0a5fd8276116b1c0ea90a30 Mon Sep 17 00:00:00 2001
From: Zach Goldthorpe <Zach.Goldthorpe at amd.com>
Date: Tue, 31 Mar 2026 15:49:10 -0500
Subject: [PATCH 1/2] [SelectionDAGBuilder] Only check VPCmp for NaNs in fp
comparisons
---
.../lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 69ba9721401e1..06d1203ba0926 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -8859,8 +8859,6 @@ void SelectionDAGBuilder::visitVPCmp(const VPCmpIntrinsic &VPIntrin) {
ISD::CondCode Condition;
CmpInst::Predicate CondCode = VPIntrin.getPredicate();
- bool IsFP = VPIntrin.getOperand(0)->getType()->isFPOrFPVectorTy();
- Condition = IsFP ? getFCmpCondCode(CondCode) : getICmpCondCode(CondCode);
SDValue Op1 = getValue(VPIntrin.getOperand(0));
SDValue Op2 = getValue(VPIntrin.getOperand(1));
@@ -8872,10 +8870,16 @@ void SelectionDAGBuilder::visitVPCmp(const VPCmpIntrinsic &VPIntrin) {
"Unexpected target EVL type");
EVL = DAG.getNode(ISD::ZERO_EXTEND, DL, EVLParamVT, EVL);
+ if (VPIntrin.getOperand(0)->getType()->isFPOrFPVectorTy()) {
+ Condition = getFCmpCondCode(CondCode);
+ if (DAG.isKnownNeverNaN(Op1) && DAG.isKnownNeverNaN(Op2))
+ Condition = getFCmpCodeWithoutNaN(Condition);
+ } else {
+ Condition = getICmpCondCode(CondCode);
+ }
+
EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
VPIntrin.getType());
- if (DAG.isKnownNeverNaN(Op1) && DAG.isKnownNeverNaN(Op2))
- Condition = getFCmpCodeWithoutNaN(Condition);
setValue(&VPIntrin,
DAG.getSetCCVP(DL, DestVT, Op1, Op2, Condition, MaskOp, EVL));
}
>From 6d8fbbaeec6d62b381762457845bc27c6b07aefd Mon Sep 17 00:00:00 2001
From: Zach Goldthorpe <Zach.Goldthorpe at amd.com>
Date: Wed, 1 Apr 2026 11:14:25 -0500
Subject: [PATCH 2/2] Replace `isKnownNeverNaN` with IR version.
---
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 06d1203ba0926..f58ffc3a720a8 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -8860,8 +8860,8 @@ void SelectionDAGBuilder::visitVPCmp(const VPCmpIntrinsic &VPIntrin) {
ISD::CondCode Condition;
CmpInst::Predicate CondCode = VPIntrin.getPredicate();
- SDValue Op1 = getValue(VPIntrin.getOperand(0));
- SDValue Op2 = getValue(VPIntrin.getOperand(1));
+ Value *Op1 = VPIntrin.getOperand(0);
+ Value *Op2 = VPIntrin.getOperand(1);
// #2 is the condition code
SDValue MaskOp = getValue(VPIntrin.getOperand(3));
SDValue EVL = getValue(VPIntrin.getOperand(4));
@@ -8872,7 +8872,8 @@ void SelectionDAGBuilder::visitVPCmp(const VPCmpIntrinsic &VPIntrin) {
if (VPIntrin.getOperand(0)->getType()->isFPOrFPVectorTy()) {
Condition = getFCmpCondCode(CondCode);
- if (DAG.isKnownNeverNaN(Op1) && DAG.isKnownNeverNaN(Op2))
+ SimplifyQuery SQ(DAG.getDataLayout(), &VPIntrin);
+ if (isKnownNeverNaN(Op1, SQ) && isKnownNeverNaN(Op2, SQ))
Condition = getFCmpCodeWithoutNaN(Condition);
} else {
Condition = getICmpCondCode(CondCode);
@@ -8880,8 +8881,8 @@ void SelectionDAGBuilder::visitVPCmp(const VPCmpIntrinsic &VPIntrin) {
EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
VPIntrin.getType());
- setValue(&VPIntrin,
- DAG.getSetCCVP(DL, DestVT, Op1, Op2, Condition, MaskOp, EVL));
+ setValue(&VPIntrin, DAG.getSetCCVP(DL, DestVT, getValue(Op1), getValue(Op2),
+ Condition, MaskOp, EVL));
}
void SelectionDAGBuilder::visitVectorPredicationIntrinsic(
More information about the llvm-commits
mailing list