static void ApplyOptimization(CilMethodInterpreter midRepresentation, int i, int j)
        {
            var localOps       = midRepresentation.MidRepresentation.LocalOperations;
            var firstOperator  = localOps[i].Get <GetField>();
            var secondOperator = localOps[j].Get <GetField>();
            var newVreg        =
                midRepresentation.CreateCacheVariable(firstOperator.AssignedTo.ComputedType());
            var assignLocalOperation = PrecomputeRepeatedUtils.CreateAssignLocalOperation(firstOperator.AssignedTo,
                                                                                          newVreg);

            localOps.Insert(i + 1, assignLocalOperation);

            firstOperator.AssignedTo = newVreg;

            var destAssignment = PrecomputeRepeatedUtils.CreateAssignLocalOperation(secondOperator.AssignedTo, newVreg);

            localOps[j + 1] = destAssignment;
        }
        private static void ApplyOptimization(CilMethodInterpreter interpreter, int i, int j)
        {
            var localOps             = interpreter.MidRepresentation.LocalOperations;
            var firstOperator        = localOps[i].GetBinaryOperator();
            var secondOperator       = localOps[j].GetBinaryOperator();
            var newVreg              = interpreter.CreateCacheVariable(firstOperator.ComputedType());
            var assignLocalOperation = PrecomputeRepeatedUtils.CreateAssignLocalOperation(firstOperator.AssignedTo,
                                                                                          newVreg);

            localOps.Insert(i + 1, assignLocalOperation);

            firstOperator.AssignedTo = newVreg;

            var destAssignment = PrecomputeRepeatedUtils.CreateAssignLocalOperation(secondOperator.AssignedTo, newVreg);

            localOps.RemoveAt(j + 1);
            localOps.Insert(j + 1, destAssignment);
        }