// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

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

import com.android.tools.r8.graph.DexItemFactory;
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.Value;
import java.util.Set;

public final class FloatMethodRewrites {

  private FloatMethodRewrites() {}

  public static void rewriteHashCode(
      InvokeMethod invoke,
      InstructionListIterator iterator,
      DexItemFactory factory,
      Set<Value> affectedValues) {
    InvokeStatic mathInvoke = new InvokeStatic(
        factory.createMethod(factory.boxedFloatType, invoke.getInvokedMethod().proto,
            "floatToIntBits"), invoke.outValue(), invoke.inValues(), false);
    iterator.replaceCurrentInstruction(mathInvoke);
  }
}
