LLVM  15.0.0git
MCInstrInfo.h
Go to the documentation of this file.
1 //===-- llvm/MC/MCInstrInfo.h - Target Instruction Info ---------*- 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 describes the target machine instruction set.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_MC_MCINSTRINFO_H
14 #define LLVM_MC_MCINSTRINFO_H
15 
16 #include "llvm/ADT/StringRef.h"
17 #include "llvm/MC/MCInstrDesc.h"
18 #include <cassert>
19 
20 namespace llvm {
21 
22 class MCSubtargetInfo;
23 
24 //---------------------------------------------------------------------------
25 /// Interface to description of machine instruction set.
26 class MCInstrInfo {
27 public:
28  using ComplexDeprecationPredicate = bool (*)(MCInst &,
29  const MCSubtargetInfo &,
30  std::string &);
31 
32 private:
33  const MCInstrDesc *Desc; // Raw array to allow static init'n
34  const unsigned *InstrNameIndices; // Array for name indices in InstrNameData
35  const char *InstrNameData; // Instruction name string pool
36  // Subtarget feature that an instruction is deprecated on, if any
37  // -1 implies this is not deprecated by any single feature. It may still be
38  // deprecated due to a "complex" reason, below.
39  const uint8_t *DeprecatedFeatures;
40  // A complex method to determine if a certain instruction is deprecated or
41  // not, and return the reason for deprecation.
42  const ComplexDeprecationPredicate *ComplexDeprecationInfos;
43  unsigned NumOpcodes; // Number of entries in the desc array
44 
45 public:
46  /// Initialize MCInstrInfo, called by TableGen auto-generated routines.
47  /// *DO NOT USE*.
48  void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND,
49  const uint8_t *DF,
50  const ComplexDeprecationPredicate *CDI, unsigned NO) {
51  Desc = D;
52  InstrNameIndices = NI;
53  InstrNameData = ND;
54  DeprecatedFeatures = DF;
55  ComplexDeprecationInfos = CDI;
56  NumOpcodes = NO;
57  }
58 
59  unsigned getNumOpcodes() const { return NumOpcodes; }
60 
61  /// Return the machine instruction descriptor that corresponds to the
62  /// specified instruction opcode.
63  const MCInstrDesc &get(unsigned Opcode) const {
64  assert(Opcode < NumOpcodes && "Invalid opcode!");
65  return Desc[Opcode];
66  }
67 
68  /// Returns the name for the instructions with the given opcode.
69  StringRef getName(unsigned Opcode) const {
70  assert(Opcode < NumOpcodes && "Invalid opcode!");
71  return StringRef(&InstrNameData[InstrNameIndices[Opcode]]);
72  }
73 
74  /// Returns true if a certain instruction is deprecated and if so
75  /// returns the reason in \p Info.
76  bool getDeprecatedInfo(MCInst &MI, const MCSubtargetInfo &STI,
77  std::string &Info) const;
78 };
79 
80 } // End llvm namespace
81 
82 #endif
MI
IRTranslator LLVM IR MI
Definition: IRTranslator.cpp:104
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:17
MCInstrDesc.h
StringRef.h
llvm::MCInst
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:184
llvm::MCInstrInfo::ComplexDeprecationPredicate
bool(*)(MCInst &, const MCSubtargetInfo &, std::string &) ComplexDeprecationPredicate
Definition: MCInstrInfo.h:30
llvm::MCInstrDesc
Describe properties that are true of each instruction in the target description file.
Definition: MCInstrDesc.h:197
llvm::MCInstrInfo::getDeprecatedInfo
bool getDeprecatedInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info) const
Returns true if a certain instruction is deprecated and if so returns the reason in Info.
Definition: MCInstrInfo.cpp:15
Info
Analysis containing CSE Info
Definition: CSEInfo.cpp:27
DF
static RegisterPass< DebugifyFunctionPass > DF("debugify-function", "Attach debug info to a function")
D
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
llvm::MCInstrInfo::getName
StringRef getName(unsigned Opcode) const
Returns the name for the instructions with the given opcode.
Definition: MCInstrInfo.h:69
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
llvm::MCInstrInfo
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:26
llvm::MCInstrInfo::getNumOpcodes
unsigned getNumOpcodes() const
Definition: MCInstrInfo.h:59
llvm::MCInstrInfo::get
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode.
Definition: MCInstrInfo.h:63
llvm::MCInstrInfo::InitMCInstrInfo
void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND, const uint8_t *DF, const ComplexDeprecationPredicate *CDI, unsigned NO)
Initialize MCInstrInfo, called by TableGen auto-generated routines.
Definition: MCInstrInfo.h:48
llvm::MCSubtargetInfo
Generic base class for all target subtargets.
Definition: MCSubtargetInfo.h:76