diff options
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index d5577acde90..94d381a1901 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -120,6 +120,21 @@ struct X86MemoryFoldTableEntry { } }; +// These tables are sorted by their RegOp value allowing them to be binary +// 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. static const X86MemoryFoldTableEntry MemoryFoldTable2Addr[] = { { X86::ADC16ri, X86::ADC16mi, 0 }, { X86::ADC16ri8, X86::ADC16mi8, 0 }, |

