blob: 546da9035e2dff9c98ee81f91cee9e25c6d57794 [file] [log] [blame]
// Copyright (c) 2022, 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.lightir;
/**
* Abstract view of a LIR instruction.
*
* <p>The view should not be considered a representation of an instruction as the underlying data
* can change. The view callbacks allow interpreting the instruction at different levels of
* abstraction depending on need.
*/
public interface LirInstructionView {
/** Convenience method to forward control to a callback. */
void accept(LirInstructionCallback eventCallback);
/** Get the instruction index. */
int getInstructionIndex();
/** The opcode of the instruction (See {@link LirOpcodes} for values). */
int getOpcode();
/** The remaining size of the instruction's payload. */
int getRemainingOperandSizeInBytes();
/** True if the instruction has any operands that have not yet been parsed. */
boolean hasMoreOperands();
/** Get the next operand as an encoded integer */
int getNextIntegerOperand();
/** Get the next operand as an encoded long */
long getNextLongOperand();
/** Get the next operand as a constant-pool index. */
int getNextConstantOperand();
/** Get the next operand as an SSA value index. */
int getNextValueOperand();
/** Get the next operand as a basic-block index. */
int getNextBlockOperand();
}