1 | //===-- SPIRVInstrInfo.h - SPIR-V Instruction Information -------*- 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 SPIR-V implementation of the TargetInstrInfo class. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #ifndef LLVM_LIB_TARGET_SPIRV_SPIRVINSTRINFO_H |
14 | #define LLVM_LIB_TARGET_SPIRV_SPIRVINSTRINFO_H |
15 | |
16 | #include "SPIRVRegisterInfo.h" |
17 | #include "llvm/CodeGen/TargetInstrInfo.h" |
18 | |
19 | #define |
20 | #include "SPIRVGenInstrInfo.inc" |
21 | |
22 | namespace llvm { |
23 | |
24 | class SPIRVInstrInfo : public SPIRVGenInstrInfo { |
25 | const SPIRVRegisterInfo RI; |
26 | |
27 | public: |
28 | SPIRVInstrInfo(); |
29 | |
30 | const SPIRVRegisterInfo &getRegisterInfo() const { return RI; } |
31 | bool (const MachineInstr &MI) const; |
32 | bool isConstantInstr(const MachineInstr &MI) const; |
33 | bool isTypeDeclInstr(const MachineInstr &MI) const; |
34 | bool isDecorationInstr(const MachineInstr &MI) const; |
35 | bool canUseFastMathFlags(const MachineInstr &MI) const; |
36 | bool canUseNSW(const MachineInstr &MI) const; |
37 | bool canUseNUW(const MachineInstr &MI) const; |
38 | |
39 | bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, |
40 | MachineBasicBlock *&FBB, |
41 | SmallVectorImpl<MachineOperand> &Cond, |
42 | bool AllowModify = false) const override; |
43 | |
44 | unsigned removeBranch(MachineBasicBlock &MBB, |
45 | int *BytesRemoved = nullptr) const override; |
46 | |
47 | unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, |
48 | MachineBasicBlock *FBB, ArrayRef<MachineOperand> Cond, |
49 | const DebugLoc &DL, |
50 | int *BytesAdded = nullptr) const override; |
51 | void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, |
52 | const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg, |
53 | bool KillSrc) const override; |
54 | bool expandPostRAPseudo(MachineInstr &MI) const override; |
55 | }; |
56 | |
57 | namespace SPIRV { |
58 | enum { |
59 | // It is a half type |
60 | ASM_PRINTER_WIDTH16 = MachineInstr::TAsmComments |
61 | }; |
62 | } // namespace SPIRV |
63 | |
64 | } // namespace llvm |
65 | |
66 | #endif // LLVM_LIB_TARGET_SPIRV_SPIRVINSTRINFO_H |
67 | |