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

public class DexCompareHelper {

  // Integer constants to ensure that there is a well order for all DEX instructions including
  // virtual instructions represented in our internal encoding.
  static final int INIT_CLASS_COMPARE_ID;
  static final int DEX_ITEM_CONST_STRING_COMPARE_ID;

  private static int HIGHEST_DEX_OPCODE = 0xFF;

  static {
    int lastId = HIGHEST_DEX_OPCODE;
    INIT_CLASS_COMPARE_ID = ++lastId;
    DEX_ITEM_CONST_STRING_COMPARE_ID = ++lastId;
  }

  // Helper to signal that the concrete instruction is uniquely determined by its ID/opcode.
  public static int compareIdUniquelyDeterminesEquality(
      Instruction instruction1, Instruction instruction2) {
    assert instruction1.getClass() == instruction2.getClass();
    assert instruction1.getCompareToId() == instruction2.getCompareToId();
    assert instruction1.toString().equals(instruction2.toString());
    return 0;
  }
}
