| //===- X86AsmInstrumentation.h - Instrument X86 inline assembly -*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H |
| #define LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H |
| |
| #include "llvm/ADT/SmallVector.h" |
| #include <memory> |
| |
| namespace llvm { |
| |
| class MCContext; |
| class MCInst; |
| class MCInstrInfo; |
| class MCParsedAsmOperand; |
| class MCStreamer; |
| class MCSubtargetInfo; |
| class MCTargetOptions; |
| class X86AsmInstrumentation; |
| |
| X86AsmInstrumentation * |
| CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions, |
| const MCContext &Ctx, |
| const MCSubtargetInfo *&STI); |
| |
| class X86AsmInstrumentation { |
| public: |
| virtual ~X86AsmInstrumentation(); |
| |
| // Sets frame register corresponding to a current frame. |
| void SetInitialFrameRegister(unsigned RegNo) { |
| InitialFrameReg = RegNo; |
| } |
| |
| // Tries to instrument and emit instruction. |
| virtual void InstrumentAndEmitInstruction( |
| const MCInst &Inst, |
| SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand>> &Operands, |
| MCContext &Ctx, const MCInstrInfo &MII, MCStreamer &Out); |
| |
| protected: |
| friend X86AsmInstrumentation * |
| CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions, |
| const MCContext &Ctx, |
| const MCSubtargetInfo *&STI); |
| |
| X86AsmInstrumentation(const MCSubtargetInfo *&STI); |
| |
| unsigned GetFrameRegGeneric(const MCContext &Ctx, MCStreamer &Out); |
| |
| void EmitInstruction(MCStreamer &Out, const MCInst &Inst); |
| |
| const MCSubtargetInfo *&STI; |
| |
| unsigned InitialFrameReg = 0; |
| }; |
| |
| } // end namespace llvm |
| |
| #endif // LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H |