package com.android.tools.r8.ir.desugar.backports;

import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.ir.code.Add;
import com.android.tools.r8.ir.code.InstructionListIterator;
import com.android.tools.r8.ir.code.InvokeMethod;
import com.android.tools.r8.ir.code.InvokeStatic;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.Value;
import java.util.List;
import java.util.Set;

public final class NumericMethodRewrites {
  public static void rewriteToInvokeMath(
      InvokeMethod invoke,
      InstructionListIterator iterator,
      DexItemFactory factory,
      Set<Value> affectedValues) {
    InvokeStatic mathInvoke =
        new InvokeStatic(
            factory.createMethod(
                factory.mathType, invoke.getInvokedMethod().proto, invoke.getInvokedMethod().name),
            invoke.outValue(),
            invoke.inValues(),
            false);
    iterator.replaceCurrentInstruction(mathInvoke);
  }

  public static void rewriteToAddInstruction(
      InvokeMethod invoke,
      InstructionListIterator iterator,
      DexItemFactory factory,
      Set<Value> affectedValues) {
    List<Value> values = invoke.inValues();
    assert values.size() == 2;

    NumericType numericType = NumericType.fromDexType(invoke.getReturnType());
    Add add = new Add(numericType, invoke.outValue(), values.get(0), values.get(1));
    iterator.replaceCurrentInstruction(add);
  }

  public static void rewriteAsIdentity(
      InvokeMethod invoke,
      InstructionListIterator iterator,
      DexItemFactory factory,
      Set<Value> affectedValues) {
    List<Value> values = invoke.inValues();
    assert values.size() == 1;
    if (invoke.hasOutValue()) {
      invoke.outValue().replaceUsers(values.get(0));
    }
    // TODO(b/152853271): Debugging information is lost here (DebugLocalWrite may be required).
    iterator.removeOrReplaceByDebugLocalRead();
  }

  private NumericMethodRewrites() {
  }
}
