Home | History | Annotate | Download | only in AsmParser
      1 //===- X86AsmInstrumentation.h - Instrument X86 inline assembly *- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H
     11 #define LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H
     12 
     13 #include "llvm/ADT/SmallVector.h"
     14 
     15 #include <memory>
     16 
     17 namespace llvm {
     18 
     19 class MCContext;
     20 class MCInst;
     21 class MCInstrInfo;
     22 class MCParsedAsmOperand;
     23 class MCStreamer;
     24 class MCSubtargetInfo;
     25 class MCTargetOptions;
     26 
     27 class X86AsmInstrumentation;
     28 
     29 X86AsmInstrumentation *
     30 CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions,
     31                             const MCContext &Ctx, const MCSubtargetInfo &STI);
     32 
     33 class X86AsmInstrumentation {
     34 public:
     35   virtual ~X86AsmInstrumentation();
     36 
     37   // Sets frame register corresponding to a current frame.
     38   void SetInitialFrameRegister(unsigned RegNo) {
     39     InitialFrameReg = RegNo;
     40   }
     41 
     42   // Tries to instrument and emit instruction.
     43   virtual void InstrumentAndEmitInstruction(
     44       const MCInst &Inst,
     45       SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand> > &Operands,
     46       MCContext &Ctx, const MCInstrInfo &MII, MCStreamer &Out);
     47 
     48 protected:
     49   friend X86AsmInstrumentation *
     50   CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions,
     51                               const MCContext &Ctx, const MCSubtargetInfo &STI);
     52 
     53   X86AsmInstrumentation(const MCSubtargetInfo &STI);
     54 
     55   unsigned GetFrameRegGeneric(const MCContext &Ctx, MCStreamer &Out);
     56 
     57   void EmitInstruction(MCStreamer &Out, const MCInst &Inst);
     58 
     59   const MCSubtargetInfo &STI;
     60 
     61   unsigned InitialFrameReg;
     62 };
     63 
     64 } // End llvm namespace
     65 
     66 #endif
     67