[X86] Preserve volatile ATOMIC_LOAD_OR nodes
[llvm-project.git] / llvm / lib / Target / X86 / X86InstrFoldTables.h
blob28db61d9a3f83468fbb7fe4114a2844314bcbfc3
1 //===-- X86InstrFoldTables.h - X86 Instruction Folding Tables ---*- C++ -*-===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 //
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
16 #include <cstdint>
17 #include "llvm/Support/X86FoldTablesUtils.h"
19 namespace llvm {
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 {
24 unsigned KeyOp;
25 unsigned DstOp;
26 uint16_t Flags;
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
40 // operand 0.
41 const X86MemoryFoldTableEntry *lookupTwoAddrFoldTable(unsigned RegOp);
43 // Look up the memory folding table entry for folding a load or store with
44 // operand OpNum.
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);
55 } // namespace llvm
57 #endif