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 GET_INSTRINFO_HEADER
20#include "SPIRVGenInstrInfo.inc"
21
22namespace llvm {
23
24class SPIRVInstrInfo : public SPIRVGenInstrInfo {
25 const SPIRVRegisterInfo RI;
26
27public:
28 SPIRVInstrInfo();
29
30 const SPIRVRegisterInfo &getRegisterInfo() const { return RI; }
31 bool isHeaderInstr(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
57namespace SPIRV {
58enum AsmComments {
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

source code of llvm/lib/Target/SPIRV/SPIRVInstrInfo.h