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