1 //===-- X86InstrFoldTables.h - X86 Instruction Folding Tables ---*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains the interface to query the X86 memory folding tables.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_X86_X86INSTRFOLDTABLES_H
14 #define LLVM_LIB_TARGET_X86_X86INSTRFOLDTABLES_H
17 #include "llvm/Support/X86FoldTablesUtils.h"
21 // This struct is used for both the folding and unfold tables. They KeyOp
22 // is used to determine the sorting order.
23 struct X86MemoryFoldTableEntry
{
28 bool operator<(const X86MemoryFoldTableEntry
&RHS
) const {
29 return KeyOp
< RHS
.KeyOp
;
31 bool operator==(const X86MemoryFoldTableEntry
&RHS
) const {
32 return KeyOp
== RHS
.KeyOp
;
34 friend bool operator<(const X86MemoryFoldTableEntry
&TE
, unsigned Opcode
) {
35 return TE
.KeyOp
< Opcode
;
39 // Look up the memory folding table entry for folding a load and a store into
41 const X86MemoryFoldTableEntry
*lookupTwoAddrFoldTable(unsigned RegOp
);
43 // Look up the memory folding table entry for folding a load or store with
45 const X86MemoryFoldTableEntry
*lookupFoldTable(unsigned RegOp
, unsigned OpNum
);
47 // Look up the memory unfolding table entry for this instruction.
48 const X86MemoryFoldTableEntry
*lookupUnfoldTable(unsigned MemOp
);
50 // Look up the broadcast memory folding table entry for this instruction from
51 // the regular memory instruction.
52 const X86MemoryFoldTableEntry
*lookupBroadcastFoldTable(unsigned MemOp
,
53 unsigned BroadcastBits
);