diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp
index 9f06446..d2acda0 100644
--- a/llvm/lib/Bytecode/Reader/Reader.cpp
+++ b/llvm/lib/Bytecode/Reader/Reader.cpp
@@ -734,6 +734,20 @@
                             getValue(Type::UIntTyID, Oprnds[2]));
     break;
   }
+  case Instruction::ShuffleVector: {
+    const PackedType *PackedTy = dyn_cast<PackedType>(InstTy);
+    if (!PackedTy || Oprnds.size() != 3)
+      throw std::string("Invalid shufflevector instruction!");
+    Value *V1 = getValue(iType, Oprnds[0]);
+    Value *V2 = getValue(iType, Oprnds[1]);
+    const PackedType *EltTy = 
+      PackedType::get(Type::UIntTy, PackedTy->getNumElements());
+    Value *V3 = getValue(getTypeSlot(EltTy), Oprnds[2]);
+    if (!ShuffleVectorInst::isValidOperands(V1, V2, V3))
+      throw std::string("Invalid shufflevector instruction!");
+    Result = new ShuffleVectorInst(V1, V2, V3);
+    break;
+  }
   case Instruction::Cast:
     Result = new CastInst(getValue(iType, Oprnds[0]),
                           getSanitizedType(Oprnds[1]));
@@ -1493,6 +1507,14 @@
         ConstantExpr::getInsertElement(ArgVec[0], ArgVec[1], ArgVec[2]);
       if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
       return Result;
+    } else if (Opcode == Instruction::ShuffleVector) {
+      if (ArgVec.size() != 3 ||
+          !ShuffleVectorInst::isValidOperands(ArgVec[0], ArgVec[1], ArgVec[2]))
+        error("shufflevector constant expr must have three arguments.");
+      Constant *Result = 
+        ConstantExpr::getShuffleVector(ArgVec[0], ArgVec[1], ArgVec[2]);
+      if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
+      return Result;
     } else {                            // All other 2-operand expressions
       Constant* Result = ConstantExpr::get(Opcode, ArgVec[0], ArgVec[1]);
       if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);
