]> git.proxmox.com Git - rustc.git/blob - src/llvm/include/llvm/MC/MCInstrAnalysis.h
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / include / llvm / MC / MCInstrAnalysis.h
1 //===-- llvm/MC/MCInstrAnalysis.h - InstrDesc target hooks ------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the MCInstrAnalysis class which the MCTargetDescs can
11 // derive from to give additional information to MC.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_MC_MCINSTRANALYSIS_H
16 #define LLVM_MC_MCINSTRANALYSIS_H
17
18 #include "llvm/MC/MCInst.h"
19 #include "llvm/MC/MCInstrDesc.h"
20 #include "llvm/MC/MCInstrInfo.h"
21
22 namespace llvm {
23
24 class MCInstrAnalysis {
25 protected:
26 friend class Target;
27 const MCInstrInfo *Info;
28
29 public:
30 MCInstrAnalysis(const MCInstrInfo *Info) : Info(Info) {}
31
32 virtual ~MCInstrAnalysis() {}
33
34 virtual bool isBranch(const MCInst &Inst) const {
35 return Info->get(Inst.getOpcode()).isBranch();
36 }
37
38 virtual bool isConditionalBranch(const MCInst &Inst) const {
39 return Info->get(Inst.getOpcode()).isConditionalBranch();
40 }
41
42 virtual bool isUnconditionalBranch(const MCInst &Inst) const {
43 return Info->get(Inst.getOpcode()).isUnconditionalBranch();
44 }
45
46 virtual bool isIndirectBranch(const MCInst &Inst) const {
47 return Info->get(Inst.getOpcode()).isIndirectBranch();
48 }
49
50 virtual bool isCall(const MCInst &Inst) const {
51 return Info->get(Inst.getOpcode()).isCall();
52 }
53
54 virtual bool isReturn(const MCInst &Inst) const {
55 return Info->get(Inst.getOpcode()).isReturn();
56 }
57
58 virtual bool isTerminator(const MCInst &Inst) const {
59 return Info->get(Inst.getOpcode()).isTerminator();
60 }
61
62 /// evaluateBranch - Given a branch instruction try to get the address the
63 /// branch targets. Return true on success, and the address in Target.
64 virtual bool
65 evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size,
66 uint64_t &Target) const;
67 };
68
69 } // End llvm namespace
70
71 #endif