LLVM API Documentation
Abstract base class of comparison instructions. More...
#include <InstrTypes.h>
Public Member Functions | |
void * | operator new (size_t s) |
OtherOps | getOpcode () const |
Get the opcode casted to the right type. More... | |
Predicate | getPredicate () const |
Return the predicate for this instruction. More... | |
void | setPredicate (Predicate P) |
Set the predicate for this instruction to the specified value. More... | |
bool | isFPPredicate () const |
bool | isIntPredicate () const |
Predicate | getInversePredicate () const |
Return the inverse of the instruction's predicate. More... | |
Predicate | getSwappedPredicate () const |
Return the predicate as if the operands were swapped. More... | |
DECLARE_TRANSPARENT_OPERAND_ACCESSORS (Value) | |
Provide more efficient getOperand methods. More... | |
void | swapOperands () |
Swap the operands and adjust predicate accordingly to retain the same comparison. More... | |
bool | isCommutative () const |
Determine if this CmpInst is commutative. More... | |
bool | isEquality () const |
Determine if this is an equals/not equals predicate. More... | |
bool | isSigned () const |
Determine if this instruction is using a signed comparison. More... | |
bool | isUnsigned () const |
Determine if this instruction is using an unsigned comparison. More... | |
bool | isTrueWhenEqual () const |
Determine if this is true when both operands are the same. More... | |
bool | isFalseWhenEqual () const |
Determine if this is false when both operands are the same. More... | |
![]() | |
~Instruction () | |
Instruction * | use_back () |
const Instruction * | use_back () const |
const BasicBlock * | getParent () const |
BasicBlock * | getParent () |
void | removeFromParent () |
void | eraseFromParent () |
void | insertBefore (Instruction *InsertPos) |
void | insertAfter (Instruction *InsertPos) |
void | moveBefore (Instruction *MovePos) |
unsigned | getOpcode () const |
getOpcode() returns a member of one of the enums like Instruction::Add. More... | |
const char * | getOpcodeName () const |
bool | isTerminator () const |
bool | isBinaryOp () const |
bool | isShift () |
bool | isCast () const |
bool | isLogicalShift () const |
bool | isArithmeticShift () const |
isArithmeticShift - Return true if this is an arithmetic shift right. More... | |
bool | hasMetadata () const |
bool | hasMetadataOtherThanDebugLoc () const |
MDNode * | getMetadata (unsigned KindID) const |
MDNode * | getMetadata (StringRef Kind) const |
void | getAllMetadata (SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const |
void | getAllMetadataOtherThanDebugLoc (SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const |
void | setMetadata (unsigned KindID, MDNode *Node) |
void | setMetadata (StringRef Kind, MDNode *Node) |
void | setDebugLoc (const DebugLoc &Loc) |
setDebugLoc - Set the debug location information for this instruction. More... | |
const DebugLoc & | getDebugLoc () const |
getDebugLoc - Return the debug location for this node as a DebugLoc. More... | |
void | setHasUnsafeAlgebra (bool B) |
void | setHasNoNaNs (bool B) |
void | setHasNoInfs (bool B) |
void | setHasNoSignedZeros (bool B) |
void | setHasAllowReciprocal (bool B) |
void | setFastMathFlags (FastMathFlags FMF) |
bool | hasUnsafeAlgebra () const |
Determine whether the unsafe-algebra flag is set. More... | |
bool | hasNoNaNs () const |
Determine whether the no-NaNs flag is set. More... | |
bool | hasNoInfs () const |
Determine whether the no-infs flag is set. More... | |
bool | hasNoSignedZeros () const |
Determine whether the no-signed-zeros flag is set. More... | |
bool | hasAllowReciprocal () const |
Determine whether the allow-reciprocal flag is set. More... | |
FastMathFlags | getFastMathFlags () const |
void | copyFastMathFlags (const Instruction *I) |
Copy I's fast-math flags. More... | |
bool | isAssociative () const |
bool | isCommutative () const |
bool | isIdempotent () const |
bool | isNilpotent () const |
bool | mayWriteToMemory () const |
bool | mayReadFromMemory () const |
bool | mayReadOrWriteMemory () const |
bool | mayThrow () const |
bool | mayReturn () const |
bool | mayHaveSideEffects () const |
Instruction * | clone () const |
bool | isIdenticalTo (const Instruction *I) const |
bool | isIdenticalToWhenDefined (const Instruction *I) const |
bool | isSameOperationAs (const Instruction *I, unsigned flags=0) const |
Determine if one instruction is the same operation as another. More... | |
bool | isUsedOutsideOfBlock (const BasicBlock *BB) const |
![]() | |
~User () | |
void | operator delete (void *Usr) |
operator delete - free memory allocated for User and Use objects More... | |
void | operator delete (void *, unsigned) |
placement delete - required by std, but never called. More... | |
void | operator delete (void *, unsigned, bool) |
placement delete - required by std, but never called. More... | |
Value * | getOperand (unsigned i) const |
void | setOperand (unsigned i, Value *Val) |
const Use & | getOperandUse (unsigned i) const |
Use & | getOperandUse (unsigned i) |
unsigned | getNumOperands () const |
op_iterator | op_begin () |
const_op_iterator | op_begin () const |
op_iterator | op_end () |
const_op_iterator | op_end () const |
value_op_iterator | value_op_begin () |
value_op_iterator | value_op_end () |
void | dropAllReferences () |
void | replaceUsesOfWith (Value *From, Value *To) |
![]() | |
virtual | ~Value () |
void | dump () const |
dump - Support for debugging, callable in GDB: V->dump() More... | |
void | print (raw_ostream &O, AssemblyAnnotationWriter *AAW=0) const |
Type * | getType () const |
LLVMContext & | getContext () const |
All values hold a context through their type. More... | |
bool | hasName () const |
ValueName * | getValueName () const |
void | setValueName (ValueName *VN) |
StringRef | getName () const |
void | setName (const Twine &Name) |
void | takeName (Value *V) |
void | replaceAllUsesWith (Value *V) |
bool | use_empty () const |
use_iterator | use_begin () |
const_use_iterator | use_begin () const |
use_iterator | use_end () |
const_use_iterator | use_end () const |
User * | use_back () |
const User * | use_back () const |
bool | hasOneUse () const |
bool | hasNUses (unsigned N) const |
bool | hasNUsesOrMore (unsigned N) const |
bool | isUsedInBasicBlock (const BasicBlock *BB) const |
unsigned | getNumUses () const |
void | addUse (Use &U) |
unsigned | getValueID () const |
unsigned | getRawSubclassOptionalData () const |
void | clearSubclassOptionalData () |
bool | hasSameSubclassOptionalData (const Value *V) const |
void | intersectOptionalDataWith (const Value *V) |
bool | hasValueHandle () const |
Value * | stripPointerCasts () |
Strips off any unneeded pointer casts, all-zero GEPs and aliases from the specified value, returning the original uncasted value. More... | |
const Value * | stripPointerCasts () const |
Value * | stripPointerCastsNoFollowAliases () |
Strips off any unneeded pointer casts and all-zero GEPs from the specified value, returning the original uncasted value. More... | |
const Value * | stripPointerCastsNoFollowAliases () const |
Value * | stripInBoundsConstantOffsets () |
Strips off unneeded pointer casts and all-constant GEPs from the specified value, returning the original pointer value. More... | |
const Value * | stripInBoundsConstantOffsets () const |
Value * | stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) |
Strips like stripInBoundsConstantOffsets but also accumulates the constant offset stripped. More... | |
const Value * | stripAndAccumulateInBoundsConstantOffsets (const DataLayout &DL, APInt &Offset) const |
Value * | stripInBoundsOffsets () |
Strips off unneeded pointer casts and any in-bounds offsets from the specified value, returning the original pointer value. More... | |
const Value * | stripInBoundsOffsets () const |
bool | isDereferenceablePointer () const |
Value * | DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) |
const Value * | DoPHITranslation (const BasicBlock *CurBB, const BasicBlock *PredBB) const |
void | mutateType (Type *Ty) |
![]() | |
Instruction * | getPrevNode () |
Get the previous node, or 0 for the list head. More... | |
const Instruction * | getPrevNode () const |
Get the previous node, or 0 for the list head. More... | |
Instruction * | getNextNode () |
Get the next node, or 0 for the list tail. More... | |
const Instruction * | getNextNode () const |
Get the next node, or 0 for the list tail. More... | |
Static Public Member Functions | |
static CmpInst * | Create (OtherOps Op, unsigned short predicate, Value *S1, Value *S2, const Twine &Name="", Instruction *InsertBefore=0) |
Create a CmpInst. More... | |
static CmpInst * | Create (OtherOps Op, unsigned short predicate, Value *S1, Value *S2, const Twine &Name, BasicBlock *InsertAtEnd) |
Create a CmpInst. More... | |
static bool | isFPPredicate (Predicate P) |
static bool | isIntPredicate (Predicate P) |
static Predicate | getInversePredicate (Predicate pred) |
Return the inverse of a given predicate. More... | |
static Predicate | getSwappedPredicate (Predicate pred) |
Return the predicate as if the operands were swapped. More... | |
static bool | isUnsigned (unsigned short predicate) |
Determine if the predicate is an unsigned operation. More... | |
static bool | isSigned (unsigned short predicate) |
Determine if the predicate is an signed operation. More... | |
static bool | isOrdered (unsigned short predicate) |
Determine if the predicate is an ordered operation. More... | |
static bool | isUnordered (unsigned short predicate) |
Determine if the predicate is an unordered operation. More... | |
static bool | isTrueWhenEqual (unsigned short predicate) |
Determine if the predicate is true when comparing a value with itself. More... | |
static bool | isFalseWhenEqual (unsigned short predicate) |
Determine if the predicate is false when comparing a value with itself. More... | |
static bool | classof (const Instruction *I) |
Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
static bool | classof (const Value *V) |
static Type * | makeCmpResultType (Type *opnd_type) |
Create a result type for fcmp/icmp. More... | |
![]() | |
static const char * | getOpcodeName (unsigned OpCode) |
static bool | isTerminator (unsigned OpCode) |
static bool | isBinaryOp (unsigned Opcode) |
static bool | isShift (unsigned Opcode) |
Determine if the Opcode is one of the shift instructions. More... | |
static bool | isCast (unsigned OpCode) |
Determine if the OpCode is one of the CastInst instructions. More... | |
static bool | isAssociative (unsigned op) |
static bool | isCommutative (unsigned op) |
static bool | isIdempotent (unsigned op) |
static bool | isNilpotent (unsigned op) |
static bool | classof (const Value *V) |
Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
![]() | |
static bool | classof (const Value *V) |
Protected Member Functions | |
CmpInst (Type *ty, Instruction::OtherOps op, unsigned short pred, Value *LHS, Value *RHS, const Twine &Name="", Instruction *InsertBefore=0) | |
CmpInst (Type *ty, Instruction::OtherOps op, unsigned short pred, Value *LHS, Value *RHS, const Twine &Name, BasicBlock *InsertAtEnd) | |
virtual void | anchor () LLVM_OVERRIDE |
![]() | |
void | setInstructionSubclassData (unsigned short D) |
unsigned | getSubclassDataFromInstruction () const |
Instruction (Type *Ty, unsigned iType, Use *Ops, unsigned NumOps, Instruction *InsertBefore=0) | |
Instruction (Type *Ty, unsigned iType, Use *Ops, unsigned NumOps, BasicBlock *InsertAtEnd) | |
virtual Instruction * | clone_impl () const =0 |
![]() | |
void * | operator new (size_t s, unsigned Us) |
User (Type *ty, unsigned vty, Use *OpList, unsigned NumOps) | |
Use * | allocHungoffUses (unsigned) const |
void | dropHungoffUses () |
template<int Idx> | |
Use & | Op () |
template<int Idx> | |
const Use & | Op () const |
![]() | |
virtual void | printCustom (raw_ostream &O) const |
Value (Type *Ty, unsigned scid) | |
unsigned short | getSubclassDataFromValue () const |
void | setValueSubclassData (unsigned short D) |
![]() | |
ilist_node () | |
Additional Inherited Members | |
![]() | |
static const unsigned | MaximumAlignment = 1u << 29 |
![]() | |
template<int Idx, typename U > | |
static Use & | OpFrom (const U *that) |
![]() | |
Use * | OperandList |
unsigned | NumOperands |
![]() | |
unsigned char | SubclassOptionalData: 7 |
Abstract base class of comparison instructions.
This class is the base class for the comparison instructions.
Definition at line 633 of file InstrTypes.h.
This enumeration lists the possible predicates for CmpInst subclasses. Values in the range 0-31 are reserved for FCmpInst, while values in the range 32-64 are reserved for ICmpInst. This is necessary to ensure the predicate values are not overlapping between the classes.
Definition at line 651 of file InstrTypes.h.
|
protected |
Definition at line 3008 of file Instructions.cpp.
References llvm::Value::setName(), and setPredicate().
|
protected |
Definition at line 3021 of file Instructions.cpp.
References llvm::Value::setName(), and setPredicate().
|
protectedvirtual |
Reimplemented from llvm::User.
Definition at line 3006 of file Instructions.cpp.
|
inlinestatic |
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition at line 823 of file InstrTypes.h.
References llvm::Instruction::getOpcode().
Referenced by classof().
Definition at line 827 of file InstrTypes.h.
References classof().
|
static |
Create a CmpInst.
Construct a compare instruction, given the opcode, the predicate and the two operands. Optionally (if InstBefore is specified) insert the instruction into a BasicBlock right before the specified instruction. The specified Instruction is allowed to be a dereferenced end iterator.
Definition at line 3035 of file Instructions.cpp.
Referenced by llvm::ConstantExpr::getAsInstruction(), OptimizeCmpExpression(), llvm::InstCombiner::visitICmpInst(), and llvm::InstCombiner::visitXor().
|
static |
Create a CmpInst.
Construct a compare instruction, given the opcode, the predicate and the two operands. Also automatically insert this instruction to the end of the BasicBlock specified.
Definition at line 3056 of file Instructions.cpp.
llvm::CmpInst::DECLARE_TRANSPARENT_OPERAND_ACCESSORS | ( | Value | ) |
Provide more efficient getOperand methods.
|
inline |
Return the inverse of the instruction's predicate.
For example, EQ -> NE, UGT -> ULE, SLT -> SGE, OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
Definition at line 737 of file InstrTypes.h.
References getPredicate().
Referenced by llvm::ConstantFoldBinaryInstruction(), llvm::FoldBranchToCommonDest(), llvm::getICmpCode(), SimplifyICmpInst(), llvm::InstCombiner::visitBranchInst(), and llvm::InstCombiner::visitICmpInst().
|
static |
Return the inverse of a given predicate.
For example, EQ -> NE, UGT -> ULE, SLT -> SGE, OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
pred
. Definition at line 3086 of file Instructions.cpp.
References FCMP_FALSE, FCMP_OEQ, FCMP_OGE, FCMP_OGT, FCMP_OLE, FCMP_OLT, FCMP_ONE, FCMP_ORD, FCMP_TRUE, FCMP_UEQ, FCMP_UGE, FCMP_UGT, FCMP_ULE, FCMP_ULT, FCMP_UNE, FCMP_UNO, ICMP_EQ, ICMP_NE, ICMP_SGE, ICMP_SGT, ICMP_SLE, ICMP_SLT, ICMP_UGE, ICMP_UGT, ICMP_ULE, ICMP_ULT, and llvm_unreachable.
|
inline |
Get the opcode casted to the right type.
Definition at line 709 of file InstrTypes.h.
References llvm::Instruction::getOpcode().
Referenced by OptimizeCmpExpression(), and llvm::InstCombiner::visitXor().
|
inline |
Return the predicate for this instruction.
Definition at line 714 of file InstrTypes.h.
References llvm::Instruction::getSubclassDataFromInstruction().
Referenced by llvm::ICmpInst::clone_impl(), llvm::FCmpInst::clone_impl(), decomposeBitTestICmp(), DemandedBitsLHSMask(), ExtractEquivalentCondition(), llvm::InstCombiner::FoldAndOfFCmps(), llvm::InstCombiner::FoldAndOfICmps(), llvm::InstCombiner::FoldCmpLoadFromIndexedGlobal(), llvm::InstCombiner::FoldFCmp_IntToFP_Cst(), llvm::InstCombiner::FoldICmpDivCst(), llvm::InstCombiner::FoldICmpShrCst(), foldLogOpOfMaskedICmps(), llvm::InstCombiner::FoldOrOfFCmps(), llvm::InstCombiner::FoldOrOfICmps(), foldSelectICmpAnd(), foldSelectICmpAndOr(), getEdgeValueLocal(), llvm::getICmpCode(), getInversePredicate(), getSwappedPredicate(), llvm::FCmpInst::isCommutative(), llvm::FCmpInst::isEquality(), isFalseWhenEqual(), isFPPredicate(), isIntPredicate(), isSameCompare(), isSigned(), isTrueWhenEqual(), isUnsigned(), MatchSelectPattern(), needsLFTR(), OptimizeCmpExpression(), OptimizeGlobalAddressOfMalloc(), TryToSimplifyUncondBranchWithICmpInIt(), llvm::Interpreter::visitFCmpInst(), llvm::InstCombiner::visitFCmpInst(), llvm::Interpreter::visitICmpInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithCastAndCast(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), and llvm::InstCombiner::visitSelectInstWithICmp().
|
inline |
Return the predicate as if the operands were swapped.
For example, EQ->EQ, SLE->SGE, ULT->UGT, OEQ->OEQ, ULE->UGE, OLT->OGT, etc.
Definition at line 753 of file InstrTypes.h.
References getPredicate().
Referenced by llvm::ConstantFoldCompareInstruction(), evaluateFCmpRelation(), evaluateICmpRelation(), ExtractEquivalentCondition(), llvm::InstCombiner::FoldAndOfFCmps(), llvm::InstCombiner::FoldGEPICmp(), llvm::InstCombiner::FoldICmpDivCst(), llvm::InstCombiner::FoldOrOfFCmps(), isSameCompare(), SimplifyFCmpInst(), SimplifyICmpInst(), llvm::ScalarEvolution::SimplifyICmpOperands(), llvm::FCmpInst::swapOperands(), ThreadCmpOverPHI(), ThreadCmpOverSelect(), llvm::InstCombiner::visitFCmpInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), and llvm::InstCombiner::visitSelectInstWithICmp().
|
static |
Return the predicate as if the operands were swapped.
This is a static version that you can use without an instruction available.
Definition at line 3208 of file Instructions.cpp.
References FCMP_FALSE, FCMP_OEQ, FCMP_OGE, FCMP_OGT, FCMP_OLE, FCMP_OLT, FCMP_ONE, FCMP_ORD, FCMP_TRUE, FCMP_UEQ, FCMP_UGE, FCMP_UGT, FCMP_ULE, FCMP_ULT, FCMP_UNE, FCMP_UNO, ICMP_EQ, ICMP_NE, ICMP_SGE, ICMP_SGT, ICMP_SLE, ICMP_SLT, ICMP_UGE, ICMP_UGT, ICMP_ULE, ICMP_ULT, and llvm_unreachable.
bool CmpInst::isCommutative | ( | ) | const |
Determine if this CmpInst is commutative.
This is just a convenience that dispatches to the subclasses.
Definition at line 3073 of file Instructions.cpp.
bool CmpInst::isEquality | ( | ) | const |
Determine if this is an equals/not equals predicate.
This is just a convenience that dispatches to the subclasses.
Definition at line 3079 of file Instructions.cpp.
|
inline |
Determine if this is false when both operands are the same.
This is just a convenience.
Definition at line 798 of file InstrTypes.h.
References getPredicate().
Referenced by SimplifyFCmpInst(), and llvm::ScalarEvolution::SimplifyICmpOperands().
Definition at line 721 of file InstrTypes.h.
References FIRST_FCMP_PREDICATE, and LAST_FCMP_PREDICATE.
|
inline |
Definition at line 729 of file InstrTypes.h.
References getPredicate(), and isFPPredicate().
Referenced by isFPPredicate(), and SimplifyFCmpInst().
Definition at line 725 of file InstrTypes.h.
References FIRST_ICMP_PREDICATE, and LAST_ICMP_PREDICATE.
|
inline |
Definition at line 730 of file InstrTypes.h.
References getPredicate(), and isIntPredicate().
Referenced by isIntPredicate(), SimplifyCmpInst(), and SimplifyICmpInst().
Determine if the predicate is an ordered operation.
Definition at line 3254 of file Instructions.cpp.
References FCMP_OEQ, FCMP_OGE, FCMP_OGT, FCMP_OLE, FCMP_OLT, FCMP_ONE, and FCMP_ORD.
Referenced by SimplifyFCmpInst().
|
inline |
Determine if this instruction is using a signed comparison.
Definition at line 780 of file InstrTypes.h.
References getPredicate().
Referenced by llvm::ConstantFoldCompareInstruction(), llvm::InstCombiner::FoldAndOfICmps(), llvm::InstCombiner::FoldGEPICmp(), llvm::InstCombiner::FoldICmpDivCst(), llvm::InstCombiner::FoldICmpShrCst(), llvm::InstCombiner::FoldOrOfICmps(), isSignTest(), llvm::PredicatesFoldable(), SimplifyICmpInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithCastAndCast(), and llvm::InstCombiner::visitICmpInstWithInstAndIntCst().
|
inline |
Determine if this is true when both operands are the same.
This is just a convenience.
Definition at line 792 of file InstrTypes.h.
References getPredicate().
Referenced by computePointerICmp(), llvm::ConstantFoldCompareInstruction(), llvm::InstCombiner::FoldGEPICmp(), llvm::InstCombiner::FoldICmpAddOpCst(), SimplifyFCmpInst(), SimplifyICmpInst(), and llvm::ScalarEvolution::SimplifyICmpOperands().
Determine if the predicate is an unordered operation.
Definition at line 3263 of file Instructions.cpp.
References FCMP_UEQ, FCMP_UGE, FCMP_UGT, FCMP_ULE, FCMP_ULT, FCMP_UNE, and FCMP_UNO.
Referenced by SimplifyFCmpInst().
|
inline |
Determine if this instruction is using an unsigned comparison.
Definition at line 786 of file InstrTypes.h.
References getPredicate().
Referenced by SimplifyICmpInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), and llvm::InstCombiner::visitSelectInstWithICmp().
Create a result type for fcmp/icmp.
Definition at line 832 of file InstrTypes.h.
References llvm::VectorType::get(), llvm::Type::getContext(), and llvm::Type::getInt1Ty().
Referenced by llvm::InstCombiner::FoldAndOfFCmps(), llvm::InstCombiner::FoldAndOfICmps(), llvm::InstCombiner::FoldOrOfFCmps(), GetCompareTy(), and llvm::getICmpValue().
|
inline |
Definition at line 688 of file InstrTypes.h.
|
inline |
Set the predicate for this instruction to the specified value.
Definition at line 719 of file InstrTypes.h.
References llvm::Instruction::setInstructionSubclassData().
Referenced by CmpInst(), llvm::FoldBranchToCommonDest(), llvm::FCmpInst::swapOperands(), llvm::InstCombiner::visitBranchInst(), llvm::InstCombiner::visitFCmpInst(), and llvm::InstCombiner::visitSelectInstWithICmp().
void CmpInst::swapOperands | ( | ) |
Swap the operands and adjust predicate accordingly to retain the same comparison.
This is just a convenience that dispatches to the subclasses.
Definition at line 3066 of file Instructions.cpp.