[llvm] fimxe (PR #147814)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 9 12:55:16 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-selectiondag
Author: AZero13 (AZero13)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/147814.diff
1 Files Affected:
- (modified) llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (+24-6)
``````````diff
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 9ffdda28f7899..1895614b91592 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -2524,11 +2524,10 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
// Don't do this unless the old select is going away. We want to eliminate the
// binary operator, not replace a binop with a select.
- // TODO: Handle ISD::SELECT_CC.
unsigned SelOpNo = 0;
SDValue Sel = BO->getOperand(0);
auto BinOpcode = BO->getOpcode();
- if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse()) {
+ if ((Sel.getOpcode() != ISD::SELECT && Sel.getOpcode() != ISD::SELECT_CC) || !Sel.hasOneUse()) {
SelOpNo = 1;
Sel = BO->getOperand(1);
@@ -2544,15 +2543,24 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
}
}
- if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse())
+ if ((Sel.getOpcode() != ISD::SELECT && Sel.getOpcode() != ISD::SELECT_CC) || !Sel.hasOneUse())
return SDValue();
- SDValue CT = Sel.getOperand(1);
+ // Extract true value and false value from SELECT or SELECT_CC
+ SDValue CT, CF;
+ bool IsSelectCC = (Sel.getOpcode() == ISD::SELECT_CC);
+ if (IsSelectCC) {
+ CT = Sel.getOperand(2);
+ CF = Sel.getOperand(3);
+ } else { // ISD::SELECT
+ CT = Sel.getOperand(1);
+ CF = Sel.getOperand(2);
+ }
+
if (!isConstantOrConstantVector(CT, true) &&
!DAG.isConstantFPBuildVectorOrConstantFP(CT))
return SDValue();
- SDValue CF = Sel.getOperand(2);
if (!isConstantOrConstantVector(CF, true) &&
!DAG.isConstantFPBuildVectorOrConstantFP(CF))
return SDValue();
@@ -2606,7 +2614,17 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
return SDValue();
}
- SDValue SelectOp = DAG.getSelect(DL, VT, Sel.getOperand(0), NewCT, NewCF);
+ SDValue SelectOp;
+ if (IsSelectCC) {
+ // Preserve SELECT_CC form
+ SelectOp = DAG.getNode(ISD::SELECT_CC, DL, VT,
+ Sel.getOperand(0), Sel.getOperand(1), // LHS, RHS
+ NewCT, NewCF,
+ Sel.getOperand(4)); // CC
+ } else {
+ // Use SELECT form
+ SelectOp = DAG.getSelect(DL, VT, Sel.getOperand(0), NewCT, NewCF);
+ }
SelectOp->setFlags(BO->getFlags());
return SelectOp;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/147814
More information about the llvm-commits
mailing list