TableGen/SearchableTables: Support more generic enums and tables
authorNicolai Haehnle <nhaehnle@gmail.com>
Thu, 21 Jun 2018 13:36:22 +0000 (13:36 +0000)
committerNicolai Haehnle <nhaehnle@gmail.com>
Thu, 21 Jun 2018 13:36:22 +0000 (13:36 +0000)
commit0ea4d06e474711838c9fec08bf208bc9cd0f35f0
treebca9523831798b34764f8c2b25a9ff0913339ca0
parent2367f035657b53ae327a4cfe1e5a194b41997228
TableGen/SearchableTables: Support more generic enums and tables

Summary:
This is essentially a rewrite of the backend which introduces TableGen
base classes GenericEnum, GenericTable, and SearchIndex. They allow
generating custom enums and tables with lookup functions using
separately defined records as the underlying database.

Also added as part of this change:

- Lookup functions may use indices composed of multiple fields.

- Instruction fields are supported similar to Intrinsic fields.

- When the lookup key has contiguous numeric values, the lookup
  function will directly index into the table instead of using a binary
  search.

The existing SearchableTable functionality is internally mapped to the
new primitives.

Change-Id: I444f3490fa1dbfb262d7286a1660a2c4308e9932

Reviewers: arsenm, tra, t.p.northover

Subscribers: wdng, llvm-commits

Differential Revision: https://reviews.llvm.org/D48013

llvm-svn: 335225
llvm/docs/TableGen/BackEnds.rst
llvm/include/llvm/TableGen/SearchableTable.td
llvm/test/TableGen/generic-tables-instruction.td [new file with mode: 0644]
llvm/test/TableGen/generic-tables.td [new file with mode: 0644]
llvm/test/TableGen/searchabletables-intrinsic.td
llvm/utils/TableGen/SearchableTableEmitter.cpp