diff --git a/llvm/lib/Transforms/FuseHPVMTensorNodes/FuseHPVMTensorNodes.cpp b/llvm/lib/Transforms/FuseHPVMTensorNodes/FuseHPVMTensorNodes.cpp
index 492ba390938d2c8d9addeb3a80c1c10c153c00c1..06916b969c1c88ddf6e824dee9fcfa89baccd8aa 100644
--- a/llvm/lib/Transforms/FuseHPVMTensorNodes/FuseHPVMTensorNodes.cpp
+++ b/llvm/lib/Transforms/FuseHPVMTensorNodes/FuseHPVMTensorNodes.cpp
@@ -157,8 +157,8 @@ IntrinsicInst* FuseHPVMTensorNodes::createIdenticalBindWithDifferentPort(
 void FuseHPVMTensorNodes::createArgTypes(IntrinsicInst* II1,
                                          IntrinsicInst* II2,
                                          std::vector<Type*> &ArgTypes) {
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   // Arguments of the first node are simply added
   for(auto& arg: F1->getArgumentList()) {
@@ -193,8 +193,8 @@ void FuseHPVMTensorNodes::createArgTypes(IntrinsicInst* II1,
 /* Get the return type of the function for fused node II1-II2                 */
 StructType* FuseHPVMTensorNodes::createReturnType(IntrinsicInst* II1,
                                                   IntrinsicInst* II2) {
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   // Based on the HPVM tensor node assumptions and the patterns we want to
   // support, when two nodes are fused the result will always be the result
@@ -211,8 +211,8 @@ StructType* FuseHPVMTensorNodes::createReturnType(IntrinsicInst* II1,
 void FuseHPVMTensorNodes::copyArgumentNames(IntrinsicInst* II1,
                                             IntrinsicInst* II2,
                                             Function* F) {
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   Function::arg_iterator dest_it = F->arg_begin();
 
@@ -254,8 +254,8 @@ void FuseHPVMTensorNodes::copyArgumentNames(IntrinsicInst* II1,
 void FuseHPVMTensorNodes::copyAttrList(IntrinsicInst* II1,
                                        IntrinsicInst* II2,
                                        Function* F) {
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   Function::arg_iterator f1_ai = F1->arg_begin(), f1_ae = F1->arg_end();
   Function::arg_iterator f2_ai = F2->arg_begin(), f2_ae = F2->arg_end();
@@ -306,8 +306,8 @@ void FuseHPVMTensorNodes::copyAttrList(IntrinsicInst* II1,
 Function* FuseHPVMTensorNodes::createEmptyDFNodeFunction(IntrinsicInst* II1,
                                                          IntrinsicInst* II2,
                                                          Module &M) {
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   DEBUG(errs () << "Constructing argument list\n");
  // Construct argument list
@@ -487,8 +487,8 @@ Function* FuseHPVMTensorNodes::createLeafDFNodeFunction(IntrinsicInst* II1,
   ReturnInst::Create(M.getContext(), UndefValue::get(FfusedRetTy), BB);
 
   // Get the node functions
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   // Initially, update FusedValueMap: it is populated with the arguments of F1
   Function::arg_iterator fused_arg_it = Ffused->arg_begin();
@@ -541,8 +541,8 @@ void FuseHPVMTensorNodes::updateParentNodeFunction(IntrinsicInst* II1,
 
   // Compute the required shifting of positions for edges/binds to the second
   // fusion node. No shifting is required for the first fusion node.
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
   std::vector<unsigned> ShiftMap(F2->getFunctionType()->getNumParams(), 0);
   unsigned shiftCount = F1->getFunctionType()->getNumParams();
 
@@ -675,8 +675,8 @@ IntrinsicInst* FuseHPVMTensorNodes::FuseHPVMTensorNodesStep(IntrinsicInst* II1,
                                                             IntrinsicInst* II2,
                                                             Module &M) {
   // Get the node functions
-  Function* F1 = cast<Function>((II1->getOperand(1))->stripPointerCasts());
-  Function* F2 = cast<Function>((II2->getOperand(1))->stripPointerCasts());
+  Function* F1 = cast<Function>((II1->getOperand(0))->stripPointerCasts());
+  Function* F2 = cast<Function>((II2->getOperand(0))->stripPointerCasts());
 
   // Create fused node function
   Function *Ffused = createLeafDFNodeFunction(II1, II2, M);