diff --git a/src/IceInst.cpp b/src/IceInst.cpp
index 2ffb0cc..a40d234 100644
--- a/src/IceInst.cpp
+++ b/src/IceInst.cpp
@@ -583,8 +583,8 @@
 InstFakeKill::InstFakeKill(Cfg *Func, const Inst *Linked)
     : InstHighLevel(Func, Inst::FakeKill, 0, nullptr), Linked(Linked) {}
 
-InstShuffleVector::InstShuffleVector(Cfg *Func, Variable *Dest, Variable *Src0,
-                                     Variable *Src1)
+InstShuffleVector::InstShuffleVector(Cfg *Func, Variable *Dest, Operand *Src0,
+                                     Operand *Src1)
     : InstHighLevel(Func, Inst::ShuffleVector, 2, Dest),
       NumIndexes(typeNumElements(Dest->getType())) {
   addSource(Src0);
diff --git a/src/IceInst.h b/src/IceInst.h
index 26119ea..889ead5 100644
--- a/src/IceInst.h
+++ b/src/IceInst.h
@@ -979,8 +979,8 @@
   InstShuffleVector &operator=(const InstShuffleVector &) = delete;
 
 public:
-  static InstShuffleVector *create(Cfg *Func, Variable *Dest, Variable *Src0,
-                                   Variable *Src1) {
+  static InstShuffleVector *create(Cfg *Func, Variable *Dest, Operand *Src0,
+                                   Operand *Src1) {
     return new (Func->allocate<InstShuffleVector>())
         InstShuffleVector(Func, Dest, Src0, Src1);
   }
@@ -1035,7 +1035,7 @@
   }
 
 private:
-  InstShuffleVector(Cfg *Func, Variable *Dest, Variable *Src0, Variable *Src1);
+  InstShuffleVector(Cfg *Func, Variable *Dest, Operand *Src0, Operand *Src1);
 
   void destroy(Cfg *Func) override {
     Func->deallocateArrayOf<ConstantInteger32 *>(Indexes);
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
index 45cab9d..6cc225c 100644
--- a/src/IceTargetLoweringARM32.cpp
+++ b/src/IceTargetLoweringARM32.cpp
@@ -5842,8 +5842,8 @@
 
   // Unoptimized shuffle. Perform a series of inserts and extracts.
   Context.insert<InstFakeDef>(T);
-  auto *Src0 = llvm::cast<Variable>(Instr->getSrc(0));
-  auto *Src1 = llvm::cast<Variable>(Instr->getSrc(1));
+  auto *Src0 = Instr->getSrc(0);
+  auto *Src1 = Instr->getSrc(1);
   const SizeT NumElements = typeNumElements(DestTy);
   const Type ElementType = typeElementType(DestTy);
   for (SizeT I = 0; I < Instr->getNumIndexes(); ++I) {
diff --git a/src/IceTargetLoweringX86Base.h b/src/IceTargetLoweringX86Base.h
index 8e0ce83..0b22701 100644
--- a/src/IceTargetLoweringX86Base.h
+++ b/src/IceTargetLoweringX86Base.h
@@ -1159,18 +1159,18 @@
 
   /// Helpers for lowering ShuffleVector
   /// @{
-  Variable *lowerShuffleVector_AllFromSameSrc(Variable *Src, SizeT Index0,
+  Variable *lowerShuffleVector_AllFromSameSrc(Operand *Src, SizeT Index0,
                                               SizeT Index1, SizeT Index2,
                                               SizeT Index3);
   static constexpr SizeT IGNORE_INDEX = 0x80000000u;
-  Variable *lowerShuffleVector_TwoFromSameSrc(Variable *Src0, SizeT Index0,
-                                              SizeT Index1, Variable *Src1,
+  Variable *lowerShuffleVector_TwoFromSameSrc(Operand *Src0, SizeT Index0,
+                                              SizeT Index1, Operand *Src1,
                                               SizeT Index2, SizeT Index3);
   static constexpr SizeT UNIFIED_INDEX_0 = 0;
   static constexpr SizeT UNIFIED_INDEX_1 = 2;
-  Variable *lowerShuffleVector_UnifyFromDifferentSrcs(Variable *Src0,
+  Variable *lowerShuffleVector_UnifyFromDifferentSrcs(Operand *Src0,
                                                       SizeT Index0,
-                                                      Variable *Src1,
+                                                      Operand *Src1,
                                                       SizeT Index1);
   static constexpr SizeT CLEAR_ALL_BITS = 0x80;
   SizeT PshufbMaskCount = 0;
diff --git a/src/IceTargetLoweringX86BaseImpl.h b/src/IceTargetLoweringX86BaseImpl.h
index 796aa13..4e7cbc8 100644
--- a/src/IceTargetLoweringX86BaseImpl.h
+++ b/src/IceTargetLoweringX86BaseImpl.h
@@ -5993,7 +5993,7 @@
 
 template <typename TraitsType>
 Variable *TargetX86Base<TraitsType>::lowerShuffleVector_AllFromSameSrc(
-    Variable *Src, SizeT Index0, SizeT Index1, SizeT Index2, SizeT Index3) {
+    Operand *Src, SizeT Index0, SizeT Index1, SizeT Index2, SizeT Index3) {
   constexpr SizeT SrcBit = 1 << 2;
   assert((Index0 & SrcBit) == (Index1 & SrcBit));
   assert((Index0 & SrcBit) == (Index2 & SrcBit));
@@ -6011,7 +6011,7 @@
 
 template <typename TraitsType>
 Variable *TargetX86Base<TraitsType>::lowerShuffleVector_TwoFromSameSrc(
-    Variable *Src0, SizeT Index0, SizeT Index1, Variable *Src1, SizeT Index2,
+    Operand *Src0, SizeT Index0, SizeT Index1, Operand *Src1, SizeT Index2,
     SizeT Index3) {
   constexpr SizeT SrcBit = 1 << 2;
   assert((Index0 & SrcBit) == (Index1 & SrcBit) || (Index1 == IGNORE_INDEX));
@@ -6032,7 +6032,7 @@
 
 template <typename TraitsType>
 Variable *TargetX86Base<TraitsType>::lowerShuffleVector_UnifyFromDifferentSrcs(
-    Variable *Src0, SizeT Index0, Variable *Src1, SizeT Index1) {
+    Operand *Src0, SizeT Index0, Operand *Src1, SizeT Index1) {
   return lowerShuffleVector_TwoFromSameSrc(Src0, Index0, IGNORE_INDEX, Src1,
                                            Index1, IGNORE_INDEX);
 }
@@ -6145,8 +6145,8 @@
     const InstShuffleVector *Instr) {
   auto *Dest = Instr->getDest();
   const Type DestTy = Dest->getType();
-  auto *Src0 = llvm::cast<Variable>(Instr->getSrc(0));
-  auto *Src1 = llvm::cast<Variable>(Instr->getSrc(1));
+  auto *Src0 = Instr->getSrc(0);
+  auto *Src1 = Instr->getSrc(1);
   const SizeT NumElements = typeNumElements(DestTy);
 
   auto *T = makeReg(DestTy);
