Implement stores.
authorChris Lattner <sabre@nondot.org>
Mon, 22 Aug 2005 01:27:59 +0000 (01:27 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 22 Aug 2005 01:27:59 +0000 (01:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22963 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelDAGToDAG.cpp

index 8e3e89c757d5ab1c0e4418e631c3399b205379be..d949bce741fbe466361f4559b086ce1b3c7a981e 100644 (file)
@@ -894,6 +894,32 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) {
     break;
   }
 
+  case ISD::TRUNCSTORE:
+  case ISD::STORE: {
+    SDOperand AddrOp1, AddrOp2;
+    bool isIdx = SelectAddr(N->getOperand(2), AddrOp1, AddrOp2);
+
+    unsigned Opc;
+    if (N->getOpcode() == ISD::STORE) {
+      switch (N->getOperand(1).getValueType()) {
+      default: assert(0 && "unknown Type in store");
+      case MVT::i32: Opc = isIdx ? PPC::STWX  : PPC::STW; break;
+      case MVT::f64: Opc = isIdx ? PPC::STFDX : PPC::STFD; break;
+      case MVT::f32: Opc = isIdx ? PPC::STFSX : PPC::STFS; break;
+      }
+    } else { //ISD::TRUNCSTORE
+      switch(cast<VTSDNode>(N->getOperand(4))->getVT()) {
+      default: assert(0 && "unknown Type in store");
+      case MVT::i1:
+      case MVT::i8:  Opc = isIdx ? PPC::STBX : PPC::STB; break;
+      case MVT::i16: Opc = isIdx ? PPC::STHX : PPC::STH; break;
+      }
+    }
+
+    CurDAG->SelectNodeTo(N, MVT::Other, Opc, Select(N->getOperand(1)),
+                         AddrOp1, AddrOp2, Select(N->getOperand(0)));
+    break;
+  }
   case ISD::RET: {
     SDOperand Chain = Select(N->getOperand(0));     // Token chain.