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