// Copyright (c) 2017, 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.cf;

import com.android.tools.r8.ir.code.Phi;
import com.android.tools.r8.ir.code.Value;

/**
 * Value that represents a shared physical location defined by the phi value.
 *
 * <p>This value is introduced to represent the store instructions used to unify the location of
 * in-flowing values to phi's. After introducing this fixed location the graph is no longer in SSA
 * since the fixed location signifies a place that can be written to from multiple places.
 */
public class FixedLocalValue extends Value {

  private final Phi phi;

  public FixedLocalValue(Phi phi) {
    super(phi.getNumber(), phi.getType(), phi.getLocalInfo());
    this.phi = phi;
  }

  public int getRegister(CfRegisterAllocator allocator) {
    return allocator.getRegisterForValue(phi, -1);
  }

  public Phi getPhi() {
    return phi;
  }

  @Override
  public boolean needsRegister() {
    return true;
  }

  @Override
  public boolean isConstant() {
    return false;
  }

  @Override
  public String toString() {
    return "fixed:v" + phi.getNumber();
  }
}
