Update dependencies (#546)

* Update shufflevector code generation
  * mask is no longer an operand
diff --git a/lib/SPIRVProducerPass.cpp b/lib/SPIRVProducerPass.cpp
index fbb0091..f00fbad 100644
--- a/lib/SPIRVProducerPass.cpp
+++ b/lib/SPIRVProducerPass.cpp
@@ -4587,42 +4587,19 @@
     Ops << MkId(lookupType(I.getType())) << MkId(VMap[I.getOperand(0)])
         << MkId(VMap[I.getOperand(1)]);
 
-    uint64_t NumElements = 0;
-    if (Constant *Cst = dyn_cast<Constant>(I.getOperand(2))) {
-      NumElements = cast<VectorType>(Cst->getType())->getNumElements();
-
-      if (Cst->isNullValue()) {
-        for (unsigned i = 0; i < NumElements; i++) {
+    auto shuffle = cast<ShuffleVectorInst>(&I);
+    SmallVector<int, 4> mask;
+    shuffle->getShuffleMask(mask);
+    for (auto i : mask) {
+      if (i == UndefMaskElem) {
+        if (clspv::Option::HackUndef())
+          // Use 0 instead of undef.
           Ops << MkNum(0);
-        }
-      } else if (const ConstantDataSequential *CDS =
-                     dyn_cast<ConstantDataSequential>(Cst)) {
-        for (unsigned i = 0; i < CDS->getNumElements(); i++) {
-          std::vector<uint32_t> LiteralNum;
-          const auto value = CDS->getElementAsInteger(i);
-          assert(value <= UINT32_MAX);
-          Ops << MkNum(static_cast<uint32_t>(value));
-        }
-      } else if (const ConstantVector *CV = dyn_cast<ConstantVector>(Cst)) {
-        for (unsigned i = 0; i < CV->getNumOperands(); i++) {
-          auto Op = CV->getOperand(i);
-
-          uint32_t literal = 0;
-
-          if (auto CI = dyn_cast<ConstantInt>(Op)) {
-            literal = static_cast<uint32_t>(CI->getZExtValue());
-          } else if (auto UI = dyn_cast<UndefValue>(Op)) {
-            literal = 0xFFFFFFFFu;
-          } else {
-            Op->print(errs());
-            llvm_unreachable("Unsupported element in ConstantVector!");
-          }
-
-          Ops << MkNum(literal);
-        }
+        else
+          // Undef for shuffle in SPIR-V.
+          Ops << MkNum(0xffffffff);
       } else {
-        Cst->print(errs());
-        llvm_unreachable("Unsupported constant mask in ShuffleVector!");
+        Ops << MkNum(i);
       }
     }