implement passing/returning vector regs to calls, at least non-varargs calls.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28341 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp
index b22f081..b6a0e072 100644
--- a/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -920,7 +920,8 @@
     unsigned ArgOffset = 24;
     unsigned GPR_remaining = 8;
     unsigned FPR_remaining = 13;
-    
+    unsigned VR_remaining  = 12;
+
     std::vector<SDOperand> MemOps;
     for (unsigned i = 5, e = Op.getNumOperands(); i != e; ++i) {
       SDOperand Arg = Op.getOperand(i);
@@ -987,6 +988,16 @@
         }
         ArgOffset += (Arg.getValueType() == MVT::f32) ? 4 : 8;
         break;
+      case MVT::v4f32:
+      case MVT::v4i32:
+      case MVT::v8i16:
+      case MVT::v16i8:
+        assert(!isVarArg && "Don't support passing vectors to varargs yet!");
+        assert(VR_remaining &&
+               "Don't support passing more than 12 vector args yet!");
+        args_to_use.push_back(Arg);
+        --VR_remaining;
+        break;
       }
     }
     if (!MemOps.empty())