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); }