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 #include "llvm/MC/MCInst.h"
16 #include "llvm/MC/MCInstrDesc.h"
17 #include "llvm/MC/MCInstrInfo.h"
21 class MCInstrAnalysis {
24 const MCInstrInfo *Info;
27 MCInstrAnalysis(const MCInstrInfo *Info) : Info(Info) {}
29 virtual ~MCInstrAnalysis() {}
31 virtual bool isBranch(const MCInst &Inst) const {
32 return Info->get(Inst.getOpcode()).isBranch();
35 virtual bool isConditionalBranch(const MCInst &Inst) const {
36 return Info->get(Inst.getOpcode()).isConditionalBranch();
39 virtual bool isUnconditionalBranch(const MCInst &Inst) const {
40 return Info->get(Inst.getOpcode()).isUnconditionalBranch();
43 virtual bool isIndirectBranch(const MCInst &Inst) const {
44 return Info->get(Inst.getOpcode()).isIndirectBranch();
47 virtual bool isCall(const MCInst &Inst) const {
48 return Info->get(Inst.getOpcode()).isCall();
51 virtual bool isReturn(const MCInst &Inst) const {
52 return Info->get(Inst.getOpcode()).isReturn();
55 virtual bool isTerminator(const MCInst &Inst) const {
56 return Info->get(Inst.getOpcode()).isTerminator();
59 /// evaluateBranch - Given a branch instruction try to get the address the
60 /// branch targets. Return true on success, and the address in Target.
62 evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size,
63 uint64_t &Target) const;