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;
26 MCInstrAnalysis(const MCInstrInfo *Info) : Info(Info) {}
28 virtual ~MCInstrAnalysis() {}
30 virtual bool isBranch(const MCInst &Inst) const {
31 return Info->get(Inst.getOpcode()).isBranch();
34 virtual bool isConditionalBranch(const MCInst &Inst) const {
35 return Info->get(Inst.getOpcode()).isBranch();
38 virtual bool isUnconditionalBranch(const MCInst &Inst) const {
39 return Info->get(Inst.getOpcode()).isUnconditionalBranch();
42 virtual bool isIndirectBranch(const MCInst &Inst) const {
43 return Info->get(Inst.getOpcode()).isIndirectBranch();
46 virtual bool isReturn(const MCInst &Inst) const {
47 return Info->get(Inst.getOpcode()).isReturn();
50 /// evaluateBranch - Given a branch instruction try to get the address the
51 /// branch targets. Otherwise return -1.
53 evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size) const;