summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index ba8f12e8d31..046c9e9520c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -1717,12 +1717,12 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
EVT VT = Sel.getValueType();
SDLoc DL(Sel);
SDValue NewCT = DAG.getNode(BinOpcode, DL, VT, CT, C1);
- assert((isConstantOrConstantVector(NewCT) ||
+ assert((NewCT.isUndef() || isConstantOrConstantVector(NewCT) ||
isConstantFPBuildVectorOrConstantFP(NewCT)) &&
"Failed to constant fold a binop with constant operands");
SDValue NewCF = DAG.getNode(BinOpcode, DL, VT, CF, C1);
- assert((isConstantOrConstantVector(NewCF) ||
+ assert((NewCF.isUndef() || isConstantOrConstantVector(NewCF) ||
isConstantFPBuildVectorOrConstantFP(NewCF)) &&
"Failed to constant fold a binop with constant operands");
@@ -2417,6 +2417,9 @@ SDValue DAGCombiner::visitSDIV(SDNode *N) {
if (N1C && N1C->isAllOnesValue())
return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), N0);
+ if (SDValue V = simplifyDivRem(N, DAG))
+ return V;
+
if (SDValue NewSel = foldBinOpIntoSelect(N))
return NewSel;
@@ -2482,9 +2485,6 @@ SDValue DAGCombiner::visitSDIV(SDNode *N) {
if (SDValue DivRem = useDivRem(N))
return DivRem;
- if (SDValue V = simplifyDivRem(N, DAG))
- return V;
-
return SDValue();
}
@@ -2508,6 +2508,9 @@ SDValue DAGCombiner::visitUDIV(SDNode *N) {
N0C, N1C))
return Folded;
+ if (SDValue V = simplifyDivRem(N, DAG))
+ return V;
+
if (SDValue NewSel = foldBinOpIntoSelect(N))
return NewSel;
@@ -2553,9 +2556,6 @@ SDValue DAGCombiner::visitUDIV(SDNode *N) {
if (SDValue DivRem = useDivRem(N))
return DivRem;
- if (SDValue V = simplifyDivRem(N, DAG))
- return V;
-
return SDValue();
}
@@ -2575,6 +2575,9 @@ SDValue DAGCombiner::visitREM(SDNode *N) {
if (SDValue Folded = DAG.FoldConstantArithmetic(Opcode, DL, VT, N0C, N1C))
return Folded;
+ if (SDValue V = simplifyDivRem(N, DAG))
+ return V;
+
if (SDValue NewSel = foldBinOpIntoSelect(N))
return NewSel;
@@ -2629,9 +2632,6 @@ SDValue DAGCombiner::visitREM(SDNode *N) {
if (SDValue DivRem = useDivRem(N))
return DivRem.getValue(1);
- if (SDValue V = simplifyDivRem(N, DAG))
- return V;
-
return SDValue();
}
OpenPOWER on IntegriCloud