blob: 4a413bcc390f08f8b73fa48f228f7084525f7e4c [file] [log] [blame]
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() {
}
}