diff --git a/llvm/lib/Target/X86/CMakeLists.txt b/llvm/lib/Target/X86/CMakeLists.txt --- a/llvm/lib/Target/X86/CMakeLists.txt +++ b/llvm/lib/Target/X86/CMakeLists.txt @@ -18,10 +18,7 @@ tablegen(LLVM X86GenRegisterBank.inc -gen-register-bank) tablegen(LLVM X86GenRegisterInfo.inc -gen-register-info) tablegen(LLVM X86GenSubtargetInfo.inc -gen-subtarget) - -if (X86_GEN_FOLD_TABLES) - tablegen(LLVM X86GenFoldTables.inc -gen-x86-fold-tables -asmwriternum=1) -endif() +tablegen(LLVM X86GenFoldTables.inc -gen-x86-fold-tables -asmwriternum=1) add_public_tablegen_target(X86CommonTableGen) diff --git a/llvm/lib/Target/X86/X86InstrFoldTables.cpp b/llvm/lib/Target/X86/X86InstrFoldTables.cpp --- a/llvm/lib/Target/X86/X86InstrFoldTables.cpp +++ b/llvm/lib/Target/X86/X86InstrFoldTables.cpp @@ -22,18 +22,7 @@ // searched at runtime without the need for additional storage. The enum values // are currently emitted in X86GenInstrInfo.inc in alphabetical order. Which // makes sorting these tables a simple matter of alphabetizing the table. -// -// We also have a tablegen emitter that tries to autogenerate these tables -// by comparing encoding information. This can be enabled by passing -// X86_GEN_FOLD_TABLES=ON to cmake which fill produce X86GenFoldTables.inc -// in the build area. There are currently some bugs in the autogenerated table -// that require a manual review to copy them from the autogenerated table into -// this table. It is unclear if we will ever be able to fully automate this -// because as new instruction are added into holes in the X86 opcode map they -// potentially pair up with old instructions and create new entries in the -// tables that would be incorrect. The manual review process allows us a chance -// to catch these before they become observable bugs. -#include "X86MemFoldTables.inc" +#include "X86GenFoldTables.inc" static const X86MemoryFoldTableEntry BroadcastFoldTable2[] = { { X86::VADDPDZ128rr, X86::VADDPDZ128rmb, TB_BCAST_SD }, { X86::VADDPDZ256rr, X86::VADDPDZ256rmb, TB_BCAST_SD }, diff --git a/llvm/lib/Target/X86/X86MemFoldTables.inc b/llvm/test/TableGen/x86-fold-tables.inc rename from llvm/lib/Target/X86/X86MemFoldTables.inc rename to llvm/test/TableGen/x86-fold-tables.inc diff --git a/llvm/test/TableGen/x86-fold-tables.td b/llvm/test/TableGen/x86-fold-tables.td new file mode 100644 --- /dev/null +++ b/llvm/test/TableGen/x86-fold-tables.td @@ -0,0 +1,8 @@ +// NOTE: When this test fails, try lookling at the output diff +// 1. If the diff is reasonable, then replace x86-fold-tables.inc with the generated file +// 2. If the diff is unexpected, +// a) you can update X86ManualFoldTables.def to directly correct the entries in fold tables, +// b) or fix the vulnerable rules in X86FoldTablesEmitter.cpp. +// 1 and 2 can be used together if the diff is partially expected. +// RUN: llvm-tblgen -gen-x86-fold-tables -asmwriternum=1 %p/../../lib/Target/X86/X86.td -I %p/../../lib/Target/X86 -I %p/../../include -o %t +// RUN: diff %p/x86-fold-tables.inc %t diff --git a/llvm/test/TableGen/x86-memory-folding.td b/llvm/test/TableGen/x86-memory-folding.td deleted file mode 100644 --- a/llvm/test/TableGen/x86-memory-folding.td +++ /dev/null @@ -1,2 +0,0 @@ -// RUN: llvm-tblgen -gen-x86-fold-tables -asmwriternum=1 %p/../../lib/Target/X86/X86.td -I %p/../../lib/Target/X86 -I %p/../../include -o %t1 -// RUN: cmp %p/../../lib/Target/X86/X86MemFoldTables.inc %t1