1 //===- llvm/MC/MCInstrAnalysis.h - InstrDesc target hooks -------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the MCInstrAnalysis class which the MCTargetDescs can
11 // derive from to give additional information to MC.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_MC_MCINSTRANALYSIS_H
16 #define LLVM_MC_MCINSTRANALYSIS_H
18 #include "llvm/MC/MCInst.h"
19 #include "llvm/MC/MCInstrDesc.h"
20 #include "llvm/MC/MCInstrInfo.h"
25 class MCInstrAnalysis {
29 const MCInstrInfo *Info;
32 MCInstrAnalysis(const MCInstrInfo *Info) : Info(Info) {}
33 virtual ~MCInstrAnalysis() = default;
35 virtual bool isBranch(const MCInst &Inst) const {
36 return Info->get(Inst.getOpcode()).isBranch();
39 virtual bool isConditionalBranch(const MCInst &Inst) const {
40 return Info->get(Inst.getOpcode()).isConditionalBranch();
43 virtual bool isUnconditionalBranch(const MCInst &Inst) const {
44 return Info->get(Inst.getOpcode()).isUnconditionalBranch();
47 virtual bool isIndirectBranch(const MCInst &Inst) const {
48 return Info->get(Inst.getOpcode()).isIndirectBranch();
51 virtual bool isCall(const MCInst &Inst) const {
52 return Info->get(Inst.getOpcode()).isCall();
55 virtual bool isReturn(const MCInst &Inst) const {
56 return Info->get(Inst.getOpcode()).isReturn();
59 virtual bool isTerminator(const MCInst &Inst) const {
60 return Info->get(Inst.getOpcode()).isTerminator();
63 /// \brief Given a branch instruction try to get the address the branch
64 /// targets. Return true on success, and the address in Target.
66 evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size,
67 uint64_t &Target) const;
70 } // end namespace llvm
72 #endif // LLVM_MC_MCINSTRANALYSIS_H