// 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;
  static final int DEX_RECORD_FIELD_VALUES_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;
    DEX_RECORD_FIELD_VALUES_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;
  }
}
