1274955Ssvnmir//===- X86AsmInstrumentation.h - Instrument X86 inline assembly *- C++ -*-===// 2274955Ssvnmir// 3274955Ssvnmir// The LLVM Compiler Infrastructure 4274955Ssvnmir// 5274955Ssvnmir// This file is distributed under the University of Illinois Open Source 6274955Ssvnmir// License. See LICENSE.TXT for details. 7274955Ssvnmir// 8274955Ssvnmir//===----------------------------------------------------------------------===// 9274955Ssvnmir 10280031Sdim#ifndef LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H 11280031Sdim#define LLVM_LIB_TARGET_X86_ASMPARSER_X86ASMINSTRUMENTATION_H 12274955Ssvnmir 13274955Ssvnmir#include "llvm/ADT/SmallVector.h" 14274955Ssvnmir 15274955Ssvnmir#include <memory> 16274955Ssvnmir 17274955Ssvnmirnamespace llvm { 18274955Ssvnmir 19274955Ssvnmirclass MCContext; 20274955Ssvnmirclass MCInst; 21274955Ssvnmirclass MCInstrInfo; 22274955Ssvnmirclass MCParsedAsmOperand; 23274955Ssvnmirclass MCStreamer; 24274955Ssvnmirclass MCSubtargetInfo; 25274955Ssvnmirclass MCTargetOptions; 26274955Ssvnmir 27274955Ssvnmirclass X86AsmInstrumentation; 28274955Ssvnmir 29274955SsvnmirX86AsmInstrumentation * 30274955SsvnmirCreateX86AsmInstrumentation(const MCTargetOptions &MCOptions, 31296417Sdim const MCContext &Ctx, 32296417Sdim const MCSubtargetInfo *&STI); 33274955Ssvnmir 34274955Ssvnmirclass X86AsmInstrumentation { 35274955Ssvnmirpublic: 36274955Ssvnmir virtual ~X86AsmInstrumentation(); 37274955Ssvnmir 38280031Sdim // Sets frame register corresponding to a current frame. 39280031Sdim void SetInitialFrameRegister(unsigned RegNo) { 40280031Sdim InitialFrameReg = RegNo; 41280031Sdim } 42280031Sdim 43280031Sdim // Tries to instrument and emit instruction. 44280031Sdim virtual void InstrumentAndEmitInstruction( 45274955Ssvnmir const MCInst &Inst, 46280031Sdim SmallVectorImpl<std::unique_ptr<MCParsedAsmOperand> > &Operands, 47274955Ssvnmir MCContext &Ctx, const MCInstrInfo &MII, MCStreamer &Out); 48274955Ssvnmir 49274955Ssvnmirprotected: 50274955Ssvnmir friend X86AsmInstrumentation * 51274955Ssvnmir CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions, 52296417Sdim const MCContext &Ctx, 53296417Sdim const MCSubtargetInfo *&STI); 54274955Ssvnmir 55296417Sdim X86AsmInstrumentation(const MCSubtargetInfo *&STI); 56280031Sdim 57280031Sdim unsigned GetFrameRegGeneric(const MCContext &Ctx, MCStreamer &Out); 58280031Sdim 59280031Sdim void EmitInstruction(MCStreamer &Out, const MCInst &Inst); 60280031Sdim 61296417Sdim const MCSubtargetInfo *&STI; 62280031Sdim 63280031Sdim unsigned InitialFrameReg; 64274955Ssvnmir}; 65274955Ssvnmir 66274955Ssvnmir} // End llvm namespace 67274955Ssvnmir 68280031Sdim#endif 69