]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.h
Import zstandard 1.1.4 in base
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / WebAssembly / WebAssemblyInstrInfo.h
1 //=- WebAssemblyInstrInfo.h - WebAssembly Instruction Information -*- C++ -*-=//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief This file contains the WebAssembly implementation of the
12 /// TargetInstrInfo class.
13 ///
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYINSTRINFO_H
17 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYINSTRINFO_H
18
19 #include "WebAssemblyRegisterInfo.h"
20 #include "llvm/Target/TargetInstrInfo.h"
21
22 #define GET_INSTRINFO_HEADER
23 #include "WebAssemblyGenInstrInfo.inc"
24
25 namespace llvm {
26
27 class WebAssemblySubtarget;
28
29 class WebAssemblyInstrInfo final : public WebAssemblyGenInstrInfo {
30   const WebAssemblyRegisterInfo RI;
31
32 public:
33   explicit WebAssemblyInstrInfo(const WebAssemblySubtarget &STI);
34
35   const WebAssemblyRegisterInfo &getRegisterInfo() const { return RI; }
36
37   bool isReallyTriviallyReMaterializable(const MachineInstr &MI,
38                                          AliasAnalysis *AA) const override;
39
40   void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
41                    const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
42                    bool KillSrc) const override;
43   MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
44                                        unsigned OpIdx1,
45                                        unsigned OpIdx2) const override;
46
47   bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
48                      MachineBasicBlock *&FBB,
49                      SmallVectorImpl<MachineOperand> &Cond,
50                      bool AllowModify = false) const override;
51   unsigned removeBranch(MachineBasicBlock &MBB,
52                         int *BytesRemoved = nullptr) const override;
53   unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
54                         MachineBasicBlock *FBB, ArrayRef<MachineOperand> Cond,
55                         const DebugLoc &DL,
56                         int *BytesAdded = nullptr) const override;
57   bool
58   reverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const override;
59 };
60
61 } // end namespace llvm
62
63 #endif