[llvm-commits] [llvm] r44607 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp

Chris Lattner sabre at nondot.org
Tue Dec 4 23:36:58 PST 2007


Author: lattner
Date: Wed Dec  5 01:36:58 2007
New Revision: 44607

URL: http://llvm.org/viewvc/llvm-project?rev=44607&view=rev
Log:
scalarize vector binops

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp?rev=44607&r1=44606&r2=44607&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAGTypes.cpp Wed Dec  5 01:36:58 2007
@@ -206,6 +206,7 @@
   void ScalarizeResult(SDNode *N, unsigned OpNo);
   SDOperand ScalarizeRes_UNDEF(SDNode *N);
   SDOperand ScalarizeRes_LOAD(LoadSDNode *N);
+  SDOperand ScalarizeRes_BinOp(SDNode *N);
   
   // Operand Promotion.
   bool PromoteOperand(SDNode *N, unsigned OperandNo);
@@ -1625,11 +1626,27 @@
     cerr << "ScalarizeResult #" << ResNo << ": ";
     N->dump(&DAG); cerr << "\n";
 #endif
-    assert(0 && "Do not know how to expand the result of this operator!");
+    assert(0 && "Do not know how to scalarize the result of this operator!");
     abort();
     
   case ISD::UNDEF:       R = ScalarizeRes_UNDEF(N); break;
   case ISD::LOAD:        R = ScalarizeRes_LOAD(cast<LoadSDNode>(N)); break;
+  case ISD::ADD:
+  case ISD::FADD:
+  case ISD::SUB:
+  case ISD::FSUB:
+  case ISD::MUL:
+  case ISD::FMUL:
+  case ISD::SDIV:
+  case ISD::UDIV:
+  case ISD::FDIV:
+  case ISD::SREM:
+  case ISD::UREM:
+  case ISD::FREM:
+  case ISD::FPOW:
+  case ISD::AND:
+  case ISD::OR:
+  case ISD::XOR:         R = ScalarizeRes_BinOp(N); break;
   }
   
   // If R is null, the sub-method took care of registering the resul.
@@ -1653,6 +1670,12 @@
   return Result;
 }
 
+SDOperand DAGTypeLegalizer::ScalarizeRes_BinOp(SDNode *N) {
+  SDOperand LHS = GetScalarizedOp(N->getOperand(0));
+  SDOperand RHS = GetScalarizedOp(N->getOperand(1));
+  return DAG.getNode(N->getOpcode(), LHS.getValueType(), LHS, RHS);
+}
+
 
 //===----------------------------------------------------------------------===//
 //  Operand Promotion





More information about the llvm-commits mailing list