Semantically revert r236031, which is not a good idea for in-order targets.
[oota-llvm.git] / lib / CodeGen / SelectionDAG / DAGCombiner.cpp
index 2a9f8e1d304dcf83f4fc10f124e79fa7dd84e299..a5f558fb79c5a29d0a99684244eab08bb08b05aa 100644 (file)
@@ -7647,33 +7647,6 @@ SDValue DAGCombiner::visitFSUBForFMACombine(SDNode *N) {
   return SDValue();
 }
 
-static SDValue ReassociateBinops(SDNode *N, SelectionDAG &DAG) {
-  assert(N->getNumOperands() == 2 && "Invalid node for binop reassociation");
-  SDValue N0 = N->getOperand(0);
-  SDValue N1 = N->getOperand(1);
-  EVT VT = N->getValueType(0);
-  SDLoc DL(N);
-  unsigned Opcode = N->getOpcode();
-
-  // Canonicalize chains of this operation to LHS to allow the following fold.
-  if (N0.getOpcode() != Opcode && N1.getOpcode() == Opcode)
-    return DAG.getNode(Opcode, DL, VT, N1, N0);
-  
-  // Convert a chain of 3 dependent operations into 2 independent operations
-  // and 1 dependent operation:
-  //  (op N0: (op N00: (op z, w), N01: y), N1: x) ->
-  //  (op N00: (op z, w), (op N1: x, N01: y))
-  if (N0.getOpcode() == Opcode && N0.hasOneUse() && N1.getOpcode() != Opcode) {
-    SDValue N00 = N0.getOperand(0);
-    if (N00.getOpcode() == Opcode) {
-      SDValue N01 = N0.getOperand(1);
-      SDValue NewOp = DAG.getNode(Opcode, DL, VT, N1, N01);
-      return DAG.getNode(Opcode, DL, VT, N00, NewOp);
-    }
-  }
-  return SDValue();
-}
-
 SDValue DAGCombiner::visitFADD(SDNode *N) {
   SDValue N0 = N->getOperand(0);
   SDValue N1 = N->getOperand(1);
@@ -7808,10 +7781,6 @@ SDValue DAGCombiner::visitFADD(SDNode *N) {
                            N0.getOperand(0), DAG.getConstantFP(4.0, DL, VT));
       }
     }
-    
-    if (SDValue Reassociated = ReassociateBinops(N, DAG))
-      return Reassociated;
-
   } // enable-unsafe-fp-math
 
   // FADD -> FMA combines: