MCInstrAnalysis.h revision 9ca9acfaff3c5e9f9dc86b830ef0255610e254e7
1c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant//===-- llvm/MC/MCInstrAnalysis.h - InstrDesc target hooks ------*- C++ -*-===// 2c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 3c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// The LLVM Compiler Infrastructure 4c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 5c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// This file is distributed under the University of Illinois Open Source 6c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// License. See LICENSE.TXT for details. 7c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 8c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant//===----------------------------------------------------------------------===// 9c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 10c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// This file defines the MCInstrAnalysis class which the MCTargetDescs can 11c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// derive from to give additional information to MC. 12c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 13c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant//===----------------------------------------------------------------------===// 14c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 15c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include "llvm/MC/MCInst.h" 16c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include "llvm/MC/MCInstrDesc.h" 17c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include "llvm/MC/MCInstrInfo.h" 18c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 19c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantnamespace llvm { 20c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 211b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clowclass MCInstrAnalysis { 22c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantprotected: 23c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant friend class Target; 24c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant const MCInstrInfo *Info; 25c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 26c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantpublic: 27c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant MCInstrAnalysis(const MCInstrInfo *Info) : Info(Info) {} 28c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 29c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual ~MCInstrAnalysis() {} 30c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 31c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual bool isBranch(const MCInst &Inst) const { 32c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant return Info->get(Inst.getOpcode()).isBranch(); 33c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 34c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 35c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual bool isConditionalBranch(const MCInst &Inst) const { 36c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant return Info->get(Inst.getOpcode()).isConditionalBranch(); 37c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 38c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 39c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual bool isUnconditionalBranch(const MCInst &Inst) const { 40c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant return Info->get(Inst.getOpcode()).isUnconditionalBranch(); 41c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 42c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 43c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual bool isIndirectBranch(const MCInst &Inst) const { 44c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant return Info->get(Inst.getOpcode()).isIndirectBranch(); 45c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 46c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 47c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant virtual bool isCall(const MCInst &Inst) const { 48c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant return Info->get(Inst.getOpcode()).isCall(); 49c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 50c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 51 virtual bool isReturn(const MCInst &Inst) const { 52 return Info->get(Inst.getOpcode()).isReturn(); 53 } 54 55 /// evaluateBranch - Given a branch instruction try to get the address the 56 /// branch targets. Otherwise return -1. 57 virtual uint64_t 58 evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size) const; 59}; 60 61} 62