47 const char *
Features,
void *DisInfo,
int TagType,
84 std::unique_ptr<MCRelocationInfo> RelInfo(
90 TT, GetOpInfo, SymbolLookUp, DisInfo, Ctx, std::move(RelInfo)));
96 Triple(TT), AsmPrinterVariant, *MAI, *MII, *MRI);
102 TheTarget, MAI, MRI, STI, MII, Ctx, DisAsm, IP);
144 while (!Comments.
empty()) {
150 FormattedOS << CommentBegin <<
' ' << Comments.
substr(0, Position);
152 Comments = Comments.
substr(Position+1);
166 const int NoInformationAvailable = -1;
170 return NoInformationAvailable;
180 for (
unsigned OpIdx = 0, OpIdxEnd = Inst.
getNumOperands(); OpIdx != OpIdxEnd;
194 const int NoInformationAvailable = -1;
209 return NoInformationAvailable;
214 DefIdx != DefEnd; ++DefIdx) {
249 uint64_t BytesSize, uint64_t PC,
char *OutString,
250 size_t OutStringSize){
263 nulls(), Annotations);
283 assert(OutStringSize != 0 &&
"Output buffer cannot be zero size");
284 size_t OutputSize = std::min(OutStringSize-1, InsnStr.
size());
286 OutString[OutputSize] =
'\0';
303 DC->
addOptions(LLVMDisassembler_Option_UseMarkup);
304 Options &= ~LLVMDisassembler_Option_UseMarkup;
310 DC->
addOptions(LLVMDisassembler_Option_PrintImmHex);
311 Options &= ~LLVMDisassembler_Option_PrintImmHex;
320 AsmPrinterVariant = AsmPrinterVariant == 0 ? 1 : 0;
325 DC->
addOptions(LLVMDisassembler_Option_AsmPrinterVariant);
326 Options &= ~LLVMDisassembler_Option_AsmPrinterVariant;
333 DC->
addOptions(LLVMDisassembler_Option_SetInstrComments);
334 Options &= ~LLVMDisassembler_Option_SetInstrComments;
338 DC->
addOptions(LLVMDisassembler_Option_PrintLatency);
339 Options &= ~LLVMDisassembler_Option_PrintLatency;
341 return (Options == 0);
void setIP(MCInstPrinter *NewIP)
#define LLVMDisassembler_Option_SetInstrComments
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)
This class represents lattice values for constants.
virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot, const MCSubtargetInfo &STI)=0
Print the specified MCInst to the specified raw_ostream.
LLVMDisasmContextRef LLVMCreateDisasm(const char *TT, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp)
Create a disassembler for the TripleName.
DecodeStatus
Ternary decode status.
Superclass for all disassemblers.
Describe properties that are true of each instruction in the target description file.
MCInstrInfo * createMCInstrInfo() const
createMCInstrInfo - Create a MCInstrInfo implementation.
const FeatureBitset Features
static void emitComments(LLVMDisasmContext *DC, formatted_raw_ostream &FormattedOS)
Emits the comments that are stored in DC comment stream.
void setPrintImmHex(bool Value)
A raw_ostream that writes to an SmallVector or SmallString.
MCDisassembler * createMCDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx) const
void setSymbolizer(std::unique_ptr< MCSymbolizer > Symzer)
Set Symzer as the current symbolizer.
#define LLVMDisassembler_Option_UseMarkup
const MCSchedClassDesc * getSchedClassDesc(unsigned SchedClassIdx) const
static const Target * lookupTarget(const std::string &Triple, std::string &Error)
lookupTarget - Lookup a target based on a target triple.
LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *TT, const char *CPU, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp)
Create a disassembler for the TripleName and a specific CPU.
static ManagedStatic< DebugCounter > DC
MCInstPrinter * createMCInstPrinter(const Triple &T, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI) const
static void emitLatency(LLVMDisasmContext *DC, const MCInst &Inst)
Emits latency information in DC->CommentStream for Inst, based on the information available in DC...
int(* LLVMOpInfoCallback)(void *DisInfo, uint64_t PC, uint64_t Offset, uint64_t Size, int TagType, void *TagBuf)
The type for the operand information call back function.
void * LLVMDisasmContextRef
An opaque reference to a disassembler context.
Position
Position to insert a new instruction relative to an existing instruction.
const MCRegisterInfo * getRegisterInfo() const
StringRef str() const
Explicit conversion to StringRef.
Context object for machine code objects.
raw_svector_ostream CommentStream
const MCWriteLatencyEntry * getWriteLatencyEntry(const MCSchedClassDesc *SC, unsigned DefIdx) const
InstrItineraryData getInstrItineraryForCPU(StringRef CPU) const
Get scheduling itinerary of a CPU.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE bool empty() const
empty - Check if the string is empty.
Itinerary data supplied by a subtarget to be used by a target.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
static int getLatency(LLVMDisasmContext *DC, const MCInst &Inst)
Gets latency information for Inst, based on DC information.
Instances of this class represent a single low-level machine instruction.
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This class is intended to be used as a base class for asm properties and features specific to the tar...
unsigned getSchedClass() const
Return the scheduling class for this instruction.
unsigned const MachineRegisterInfo * MRI
unsigned getAssemblerDialect() const
Summarize the scheduling resources required for an instruction of a particular scheduling class...
void setCommentStream(raw_ostream &OS)
Specify a stream to emit comments to.
#define LLVMDisassembler_Option_PrintImmHex
Interface to description of machine instruction set.
const MCSubtargetInfo * getSubtargetInfo() const
StringRef getCommentString() const
MCRegisterInfo * createMCRegInfo(StringRef TT) const
createMCRegInfo - Create a MCRegisterInfo implementation.
unsigned getNumOperands() const
static int getItineraryLatency(LLVMDisasmContext *DC, const MCInst &Inst)
Gets latency information for Inst from the itinerary scheduling model, based on DC information...
const MCInstrInfo * getInstrInfo() const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Triple - Helper class for working with autoconf configuration names.
bool hasInstrSchedModel() const
Does this machine model include instruction-level scheduling.
Specify the latency in cpu cycles for a particular scheduling class and def index.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
const MCAsmInfo * getAsmInfo() const
StringRef str()
Return a StringRef for the vector contents.
const Target * getTarget() const
LLVMDisasmContextRef LLVMCreateDisasmCPUFeatures(const char *TT, const char *CPU, const char *Features, void *DisInfo, int TagType, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp)
Create a disassembler for the TripleName, a specific CPU and specific feature string.
MCAsmInfo * createMCAsmInfo(const MCRegisterInfo &MRI, StringRef TheTriple) const
createMCAsmInfo - Create a MCAsmInfo implementation for the specified target triple.
Target - Wrapper for Target specific information.
void setUseMarkup(bool Value)
size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes, uint64_t BytesSize, uint64_t PC, char *OutString, size_t OutStringSize)
Disassemble a single instruction using the disassembler context specified in the parameter DC...
int LLVMSetDisasmOptions(LLVMDisasmContextRef DCR, uint64_t Options)
Set the disassembler's options.
MCSubtargetInfo * createMCSubtargetInfo(StringRef TheTriple, StringRef CPU, StringRef Features) const
createMCSubtargetInfo - Create a MCSubtargetInfo implementation.
#define LLVMDisassembler_Option_AsmPrinterVariant
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
pointer data()
Return a pointer to the vector's buffer, even if empty().
uint64_t getOptions() const
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode...
void LLVMDisasmDispose(LLVMDisasmContextRef DCR)
Dispose of a disassembler context.
Generic base class for all target subtargets.
MCSymbolizer * createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp, void *DisInfo, MCContext *Ctx, std::unique_ptr< MCRelocationInfo > &&RelInfo) const
createMCSymbolizer - Create a target specific MCSymbolizer.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
unsigned getCommentColumn() const
This indicates the column (zero-based) at which asm comments should be printed.
MCRelocationInfo * createMCRelocationInfo(StringRef TT, MCContext &Ctx) const
createMCRelocationInfo - Create a target specific MCRelocationInfo.
Lightweight error class with error context and mandatory checking.
raw_ostream & nulls()
This returns a reference to a raw_ostream which simply discards output.
uint16_t NumWriteLatencyEntries
int getOperandCycle(unsigned ItinClassIndx, unsigned OperandIdx) const
Return the cycle for the given class and operand.
void addOptions(uint64_t Options)
void setCPU(const char *CPU)
const std::string & getTripleName() const
StringRef - Represent a constant reference to a string, i.e.
unsigned getOpcode() const
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t find(char C, size_t From=0) const
Search for the first character C in the string.
virtual DecodeStatus getInstruction(MCInst &Instr, uint64_t &Size, ArrayRef< uint8_t > Bytes, uint64_t Address, raw_ostream &VStream, raw_ostream &CStream) const =0
Returns the disassembly of a single instruction.
const MCDisassembler * getDisAsm() const
const char *(* LLVMSymbolLookupCallback)(void *DisInfo, uint64_t ReferenceValue, uint64_t *ReferenceType, uint64_t ReferencePC, const char **ReferenceName)
The type for the symbol lookup function.
SmallString< 128 > CommentsToEmit
Machine model for scheduling, bundling, and heuristics.
const MCSchedModel & getSchedModel() const
Get the machine model for this subtarget's CPU.
#define LLVMDisassembler_Option_PrintLatency