| // 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.ir.code; |
| |
| /** |
| * Instruction introducing an SSA value with attached local information. |
| * |
| * All instructions may have attached local information (defined as the local information of their |
| * outgoing value). This instruction is needed to mark a transition of an existing value (with a |
| * possible local attached) to a new value that has a local (possibly the same one). If all ingoing |
| * values end up having the same local this can be safely removed. |
| * |
| * For valid debug info, this instruction should have at least one user, namely a DebugLocalRead |
| * denoting the end of its range, and thus it should be live. |
| */ |
| public class DebugLocalWrite extends Move { |
| |
| public DebugLocalWrite(Value dest, Value src) { |
| super(dest, src); |
| assert dest.getLocalInfo() != null; |
| assert dest.getLocalInfo() != src.getLocalInfo() || src.isPhi(); |
| } |
| |
| @Override |
| public boolean isDebugLocalWrite() { |
| return true; |
| } |
| |
| @Override |
| public DebugLocalWrite asDebugLocalWrite() { |
| return this; |
| } |
| |
| @Override |
| public boolean isOutConstant() { |
| return false; |
| } |
| |
| @Override |
| public boolean identicalNonValueParts(Instruction other) { |
| assert other.isDebugLocalWrite(); |
| return true; |
| } |
| } |