]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCCodeEmitter.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AMDGPU / MCTargetDesc / AMDGPUMCCodeEmitter.h
1 //===-- AMDGPUCodeEmitter.h - AMDGPU Code Emitter interface -----*- 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 /// \file
10 /// CodeEmitter interface for R600 and SI codegen.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCCODEEMITTER_H
15 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUMCCODEEMITTER_H
16
17 #include "llvm/MC/MCCodeEmitter.h"
18 #include "llvm/Support/raw_ostream.h"
19
20 namespace llvm {
21
22 class MCInst;
23 class MCInstrInfo;
24 class MCOperand;
25 class MCSubtargetInfo;
26 class FeatureBitset;
27
28 class AMDGPUMCCodeEmitter : public MCCodeEmitter {
29   virtual void anchor();
30
31 protected:
32   const MCInstrInfo &MCII;
33
34   AMDGPUMCCodeEmitter(const MCInstrInfo &mcii) : MCII(mcii) {}
35
36 public:
37
38   uint64_t getBinaryCodeForInstr(const MCInst &MI,
39                                  SmallVectorImpl<MCFixup> &Fixups,
40                                  const MCSubtargetInfo &STI) const;
41
42   virtual uint64_t getMachineOpValue(const MCInst &MI, const MCOperand &MO,
43                                      SmallVectorImpl<MCFixup> &Fixups,
44                                      const MCSubtargetInfo &STI) const {
45     return 0;
46   }
47
48   virtual unsigned getSOPPBrEncoding(const MCInst &MI, unsigned OpNo,
49                                      SmallVectorImpl<MCFixup> &Fixups,
50                                      const MCSubtargetInfo &STI) const {
51     return 0;
52   }
53
54   virtual unsigned getSDWASrcEncoding(const MCInst &MI, unsigned OpNo,
55                                       SmallVectorImpl<MCFixup> &Fixups,
56                                       const MCSubtargetInfo &STI) const {
57     return 0;
58   }
59
60   virtual unsigned getSDWAVopcDstEncoding(const MCInst &MI, unsigned OpNo,
61                                           SmallVectorImpl<MCFixup> &Fixups,
62                                           const MCSubtargetInfo &STI) const {
63     return 0;
64   }
65
66   virtual unsigned getAVOperandEncoding(const MCInst &MI, unsigned OpNo,
67                                         SmallVectorImpl<MCFixup> &Fixups,
68                                         const MCSubtargetInfo &STI) const {
69     return 0;
70   }
71
72 protected:
73   FeatureBitset computeAvailableFeatures(const FeatureBitset &FB) const;
74   void
75   verifyInstructionPredicates(const MCInst &MI,
76                               const FeatureBitset &AvailableFeatures) const;
77 };
78
79 } // End namespace llvm
80
81 #endif