// RUN: llvm-tblgen -gen-searchable-tables -I %p/../../include %s | FileCheck %s
// XFAIL: vg_leak

include "llvm/TableGen/SearchableTable.td"

class IntrinsicProperty;
class SDNodeProperty;

class ValueType<int size, int value> {
  string Namespace = "MVT";
  int Size = size;
  int Value = value;
}

class LLVMType<ValueType vt> {
  ValueType VT = vt;
}

class Intrinsic<list<LLVMType> param_types = []> {
  string LLVMName = "";
  bit isTarget = 0;
  string TargetPrefix = "";
  list<LLVMType> RetTypes = [];
  list<LLVMType> ParamTypes = param_types;
  list<IntrinsicProperty> IntrProperties = [];
  list<SDNodeProperty> Properties = [];
}

def iAny : ValueType<0, 253>;
def llvm_anyint_ty : LLVMType<iAny>;

def int_abc : Intrinsic<[llvm_anyint_ty]>;
def int_xyz : Intrinsic<[llvm_anyint_ty]>;

let isTarget = 1, TargetPrefix = "gtarget" in {
  def int_gtarget_def : Intrinsic<[llvm_anyint_ty]>;
  def int_gtarget_defg : Intrinsic<[llvm_anyint_ty]>;
  def int_gtarget_uvw : Intrinsic<[llvm_anyint_ty]>;
}

let isTarget = 1, TargetPrefix = "ftarget" in {
  def int_ftarget_ghi : Intrinsic<[llvm_anyint_ty]>;
  def int_ftarget_ghi_x : Intrinsic<[llvm_anyint_ty]>;
  def int_ftarget_rst : Intrinsic<[llvm_anyint_ty]>;
}

class Table<Intrinsic intr, int payload> : SearchableTable {
  let SearchableFields = ["Intr"];
  let EnumNameField = ?;

  Intrinsic Intr = !cast<Intrinsic>(intr);
  bits<16> Payload = payload;
}

// CHECK-LABEL: TablesList[] = {
// CHECK-DAG: { Intrinsic::abc, 0x0 },
// CHECK-DAG: { Intrinsic::xyz, 0x1 },
// CHECK-DAG: { Intrinsic::gtarget_def, 0x10 },
// CHECK-DAG: { Intrinsic::gtarget_defg, 0x11 },
// CHECK-DAG: { Intrinsic::gtarget_uvw, 0x12 },
// CHECK-DAG: { Intrinsic::ftarget_ghi, 0x20 },
// CHECK-DAG: { Intrinsic::ftarget_ghi_x, 0x21 },
// CHECK-DAG: { Intrinsic::ftarget_rst, 0x22 },

// Check that the index is in the correct order, consistent with the ordering
// of enums: alphabetically, but target intrinsics after generic intrinsics
//
// CHECK-LABEL: lookupTableByIntr(unsigned Intr) {
// CHECK: Index[] = {
// CHECK-NEXT: Intrinsic::abc
// CHECK-NEXT: Intrinsic::xyz
// CHECK-NEXT: Intrinsic::ftarget_ghi
// CHECK-NEXT: Intrinsic::ftarget_ghi_x
// CHECK-NEXT: Intrinsic::ftarget_rst
// CHECK-NEXT: Intrinsic::gtarget_def
// CHECK-NEXT: Intrinsic::gtarget_defg
// CHECK-NEXT: Intrinsic::gtarget_uvw

def : Table<int_abc, 0x0>;
def : Table<int_xyz, 0x1>;
def : Table<int_gtarget_def, 0x10>;
def : Table<int_gtarget_defg, 0x11>;
def : Table<int_gtarget_uvw, 0x12>;
def : Table<int_ftarget_ghi, 0x20>;
def : Table<int_ftarget_ghi_x, 0x21>;
def : Table<int_ftarget_rst, 0x22>;
