LLVM  8.0.0svn
Public Member Functions | Protected Attributes | Friends | List of all members
llvm::MCInstrAnalysis Class Reference

#include "llvm/MC/MCInstrAnalysis.h"

Inheritance diagram for llvm::MCInstrAnalysis:
Inheritance graph
[legend]
Collaboration diagram for llvm::MCInstrAnalysis:
Collaboration graph
[legend]

Public Member Functions

 MCInstrAnalysis (const MCInstrInfo *Info)
 
virtual ~MCInstrAnalysis ()=default
 
virtual bool isBranch (const MCInst &Inst) const
 
virtual bool isConditionalBranch (const MCInst &Inst) const
 
virtual bool isUnconditionalBranch (const MCInst &Inst) const
 
virtual bool isIndirectBranch (const MCInst &Inst) const
 
virtual bool isCall (const MCInst &Inst) const
 
virtual bool isReturn (const MCInst &Inst) const
 
virtual bool isTerminator (const MCInst &Inst) const
 
virtual bool clearsSuperRegisters (const MCRegisterInfo &MRI, const MCInst &Inst, APInt &Writes) const
 Returns true if at least one of the register writes performed by. More...
 
virtual bool isDependencyBreaking (const MCSubtargetInfo &STI, const MCInst &Inst) const
 Returns true if. More...
 
virtual bool evaluateBranch (const MCInst &Inst, uint64_t Addr, uint64_t Size, uint64_t &Target) const
 Given a branch instruction try to get the address the branch targets. More...
 

Protected Attributes

const MCInstrInfoInfo
 

Friends

class Target
 

Detailed Description

Definition at line 27 of file MCInstrAnalysis.h.

Constructor & Destructor Documentation

◆ MCInstrAnalysis()

llvm::MCInstrAnalysis::MCInstrAnalysis ( const MCInstrInfo Info)
inline

Definition at line 34 of file MCInstrAnalysis.h.

References ~MCInstrAnalysis().

◆ ~MCInstrAnalysis()

virtual llvm::MCInstrAnalysis::~MCInstrAnalysis ( )
virtualdefault

Referenced by MCInstrAnalysis().

Member Function Documentation

◆ clearsSuperRegisters()

bool MCInstrAnalysis::clearsSuperRegisters ( const MCRegisterInfo MRI,
const MCInst Inst,
APInt Writes 
) const
virtual

Returns true if at least one of the register writes performed by.

Parameters
Instimplicitly clears the upper portion of all super-registers.

Example: on X86-64, a write to EAX implicitly clears the upper half of RAX. Also (still on x86) an XMM write perfomed by an AVX 128-bit instruction implicitly clears the upper portion of the correspondent YMM register.

This method also updates an APInt which is used as mask of register writes. There is one bit for every explicit/implicit write performed by the instruction. If a write implicitly clears its super-registers, then the corresponding bit is set (vic. the corresponding bit is cleared).

The first bits in the APint are related to explicit writes. The remaining bits are related to implicit writes. The sequence of writes follows the machine operand sequence. For implicit writes, the sequence is defined by the MCInstrDesc.

The assumption is that the bit-width of the APInt is correctly set by the caller. The default implementation conservatively assumes that none of the writes clears the upper portion of a super-register.

Reimplemented in llvm::X86_MC::X86MCInstrAnalysis.

Definition at line 20 of file MCInstrAnalysis.cpp.

References llvm::APInt::clearAllBits().

Referenced by isTerminator().

◆ evaluateBranch()

bool MCInstrAnalysis::evaluateBranch ( const MCInst Inst,
uint64_t  Addr,
uint64_t  Size,
uint64_t &  Target 
) const
virtual

Given a branch instruction try to get the address the branch targets.

Return true on success, and the address in Target.

Definition at line 32 of file MCInstrAnalysis.cpp.

References llvm::MCInstrInfo::get(), llvm::MCOperand::getImm(), llvm::MCInst::getNumOperands(), llvm::MCInst::getOpcode(), llvm::MCInst::getOperand(), Info, and llvm::MCOI::OPERAND_PCREL.

Referenced by isTerminator().

◆ isBranch()

virtual bool llvm::MCInstrAnalysis::isBranch ( const MCInst Inst) const
inlinevirtual

Definition at line 37 of file MCInstrAnalysis.h.

References llvm::MCInstrInfo::get(), and llvm::MCInst::getOpcode().

◆ isCall()

virtual bool llvm::MCInstrAnalysis::isCall ( const MCInst Inst) const
inlinevirtual

Definition at line 53 of file MCInstrAnalysis.h.

References llvm::MCInstrInfo::get(), and llvm::MCInst::getOpcode().

◆ isConditionalBranch()

virtual bool llvm::MCInstrAnalysis::isConditionalBranch ( const MCInst Inst) const
inlinevirtual

◆ isDependencyBreaking()

bool MCInstrAnalysis::isDependencyBreaking ( const MCSubtargetInfo STI,
const MCInst Inst 
) const
virtual

Returns true if.

Parameters
Instis a dependency breaking instruction for the given subtarget.

The value computed by a dependency breaking instruction is not dependent on the inputs. An example of dependency breaking instruction on X86 is XOR eax, eax. TODO: In future, we could implement an alternative approach where this method returns true if the input instruction is not dependent on some/all of its input operands. An APInt mask could then be used to identify independent operands.

Reimplemented in llvm::X86_MC::X86MCInstrAnalysis.

Definition at line 27 of file MCInstrAnalysis.cpp.

Referenced by isTerminator().

◆ isIndirectBranch()

virtual bool llvm::MCInstrAnalysis::isIndirectBranch ( const MCInst Inst) const
inlinevirtual

Definition at line 49 of file MCInstrAnalysis.h.

References llvm::MCInstrInfo::get(), and llvm::MCInst::getOpcode().

◆ isReturn()

virtual bool llvm::MCInstrAnalysis::isReturn ( const MCInst Inst) const
inlinevirtual

Definition at line 57 of file MCInstrAnalysis.h.

References llvm::MCInstrInfo::get(), and llvm::MCInst::getOpcode().

◆ isTerminator()

virtual bool llvm::MCInstrAnalysis::isTerminator ( const MCInst Inst) const
inlinevirtual

◆ isUnconditionalBranch()

virtual bool llvm::MCInstrAnalysis::isUnconditionalBranch ( const MCInst Inst) const
inlinevirtual

Friends And Related Function Documentation

◆ Target

friend class Target
friend

Definition at line 29 of file MCInstrAnalysis.h.

Member Data Documentation

◆ Info

const MCInstrInfo* llvm::MCInstrAnalysis::Info
protected

The documentation for this class was generated from the following files: