23#ifndef LLVM_IR_INTRINSICINST_H
24#define LLVM_IR_INTRINSICINST_H
62 case Intrinsic::maxnum:
63 case Intrinsic::minnum:
64 case Intrinsic::maximum:
65 case Intrinsic::minimum:
70 case Intrinsic::sadd_sat:
71 case Intrinsic::uadd_sat:
72 case Intrinsic::sadd_with_overflow:
73 case Intrinsic::uadd_with_overflow:
74 case Intrinsic::smul_with_overflow:
75 case Intrinsic::umul_with_overflow:
76 case Intrinsic::smul_fix:
77 case Intrinsic::umul_fix:
78 case Intrinsic::smul_fix_sat:
79 case Intrinsic::umul_fix_sat:
81 case Intrinsic::fmuladd:
92 case Intrinsic::assume:
93 case Intrinsic::sideeffect:
94 case Intrinsic::pseudoprobe:
95 case Intrinsic::dbg_assign:
96 case Intrinsic::dbg_declare:
97 case Intrinsic::dbg_value:
98 case Intrinsic::dbg_label:
99 case Intrinsic::invariant_start:
100 case Intrinsic::invariant_end:
101 case Intrinsic::lifetime_start:
102 case Intrinsic::lifetime_end:
103 case Intrinsic::experimental_noalias_scope_decl:
104 case Intrinsic::objectsize:
105 case Intrinsic::ptr_annotation:
106 case Intrinsic::var_annotation:
118 if (
const Function *CF =
I->getCalledFunction())
119 return CF->isIntrinsic();
123 return isa<CallInst>(V) &&
classof(cast<CallInst>(V));
130 case Intrinsic::lifetime_start:
131 case Intrinsic::lifetime_end:
147 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
155 case Intrinsic::dbg_declare:
156 case Intrinsic::dbg_value:
157 case Intrinsic::dbg_addr:
158 case Intrinsic::dbg_label:
159 case Intrinsic::dbg_assign:
175 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
188 std::bidirectional_iterator_tag, Value *> {
275 if (!RemovedValues.
insert(OldValue).second)
297 return cast<MetadataAsValue>(
getArgOperand(0))->getMetadata();
301 return cast<MetadataAsValue>(
getArgOperand(1))->getMetadata();
305 return cast<MetadataAsValue>(
getArgOperand(2))->getMetadata();
327 switch (
I->getIntrinsicID()) {
328 case Intrinsic::dbg_declare:
329 case Intrinsic::dbg_value:
330 case Intrinsic::dbg_addr:
331 case Intrinsic::dbg_assign:
338 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
353 "dbg.declare must have exactly 1 location operand.");
360 return I->getIntrinsicID() == Intrinsic::dbg_declare;
363 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
373 "dbg.addr must have exactly 1 location operand.");
380 return I->getIntrinsicID() == Intrinsic::dbg_addr;
383 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
402 return I->getIntrinsicID() == Intrinsic::dbg_value ||
403 I->getIntrinsicID() == Intrinsic::dbg_assign;
406 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
425 return cast<MetadataAsValue>(
getArgOperand(OpAddress))->getMetadata();
428 return cast<MetadataAsValue>(
getArgOperand(OpAssignID))->getMetadata();
432 return cast<MetadataAsValue>(
getArgOperand(OpAddressExpr))->getMetadata();
454 return I->getIntrinsicID() == Intrinsic::dbg_assign;
457 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
468 return cast<MetadataAsValue>(
getArgOperand(0))->getMetadata();
474 return I->getIntrinsicID() == Intrinsic::dbg_label;
477 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
535 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
564 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
579 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
596 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
613 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
622 return getIntrinsicID() == Intrinsic::experimental_constrained_fcmps;
627 switch (
I->getIntrinsicID()) {
628 case Intrinsic::experimental_constrained_fcmp:
629 case Intrinsic::experimental_constrained_fcmps:
636 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
644 switch (
I->getIntrinsicID()) {
645 case Intrinsic::umin:
646 case Intrinsic::umax:
647 case Intrinsic::smin:
648 case Intrinsic::smax:
655 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
664 case Intrinsic::umin:
666 case Intrinsic::umax:
668 case Intrinsic::smin:
670 case Intrinsic::smax:
695 case Intrinsic::umin:
697 case Intrinsic::umax:
699 case Intrinsic::smin:
701 case Intrinsic::smax:
736 switch (
I->getIntrinsicID()) {
737 case Intrinsic::uadd_with_overflow:
738 case Intrinsic::sadd_with_overflow:
739 case Intrinsic::usub_with_overflow:
740 case Intrinsic::ssub_with_overflow:
741 case Intrinsic::umul_with_overflow:
742 case Intrinsic::smul_with_overflow:
743 case Intrinsic::uadd_sat:
744 case Intrinsic::sadd_sat:
745 case Intrinsic::usub_sat:
746 case Intrinsic::ssub_sat:
753 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
773 switch (
I->getIntrinsicID()) {
774 case Intrinsic::uadd_with_overflow:
775 case Intrinsic::sadd_with_overflow:
776 case Intrinsic::usub_with_overflow:
777 case Intrinsic::ssub_with_overflow:
778 case Intrinsic::umul_with_overflow:
779 case Intrinsic::smul_with_overflow:
786 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
794 switch (
I->getIntrinsicID()) {
795 case Intrinsic::uadd_sat:
796 case Intrinsic::sadd_sat:
797 case Intrinsic::usub_sat:
798 case Intrinsic::ssub_sat:
805 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
815 enum { ARG_DEST = 0, ARG_LENGTH = 2 };
852 "setDest called with pointer of wrong type!");
870 "setLength called with value of wrong type!");
879 enum { ARG_SOURCE = 1 };
884 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_SOURCE));
887 return BaseCL::getArgOperandUse(ARG_SOURCE);
904 if (
auto MA = BaseCL::getParamAlign(ARG_SOURCE))
910 return BaseCL::getParamAlign(ARG_SOURCE);
915 "setSource called with pointer of wrong type!");
916 BaseCL::setArgOperand(ARG_SOURCE,
Ptr);
920 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
923 BaseCL::getContext(), *Alignment));
927 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
929 BaseCL::getContext(), Alignment));
937 enum { ARG_VALUE = 1 };
941 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_VALUE));
948 "setValue called with value of wrong type!");
949 BaseCL::setArgOperand(ARG_VALUE, Val);
957 enum { ARG_ELEMENTSIZE = 3 };
974 "setElementSizeInBytes called with value of wrong type!");
979 switch (
I->getIntrinsicID()) {
980 case Intrinsic::memcpy_element_unordered_atomic:
981 case Intrinsic::memmove_element_unordered_atomic:
982 case Intrinsic::memset_element_unordered_atomic:
989 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
998 return I->getIntrinsicID() == Intrinsic::memset_element_unordered_atomic;
1001 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1010 switch (
I->getIntrinsicID()) {
1011 case Intrinsic::memcpy_element_unordered_atomic:
1012 case Intrinsic::memmove_element_unordered_atomic:
1019 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1028 return I->getIntrinsicID() == Intrinsic::memcpy_element_unordered_atomic;
1031 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1040 return I->getIntrinsicID() == Intrinsic::memmove_element_unordered_atomic;
1043 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1050 enum { ARG_VOLATILE = 3 };
1063 switch (
I->getIntrinsicID()) {
1064 case Intrinsic::memcpy:
1065 case Intrinsic::memmove:
1066 case Intrinsic::memset:
1067 case Intrinsic::memset_inline:
1068 case Intrinsic::memcpy_inline:
1075 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1084 switch (
I->getIntrinsicID()) {
1085 case Intrinsic::memset:
1086 case Intrinsic::memset_inline:
1093 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1105 return I->getIntrinsicID() == Intrinsic::memset_inline;
1108 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1117 switch (
I->getIntrinsicID()) {
1118 case Intrinsic::memcpy:
1119 case Intrinsic::memmove:
1120 case Intrinsic::memcpy_inline:
1127 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1136 return I->getIntrinsicID() == Intrinsic::memcpy ||
1137 I->getIntrinsicID() == Intrinsic::memcpy_inline;
1140 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1149 return I->getIntrinsicID() == Intrinsic::memmove;
1152 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1164 return I->getIntrinsicID() == Intrinsic::memcpy_inline;
1167 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1179 if (
auto *
MI = dyn_cast<MemIntrinsic>(
this))
1180 return MI->isVolatile();
1185 switch (
I->getIntrinsicID()) {
1186 case Intrinsic::memcpy:
1187 case Intrinsic::memcpy_inline:
1188 case Intrinsic::memmove:
1189 case Intrinsic::memset:
1190 case Intrinsic::memset_inline:
1191 case Intrinsic::memcpy_element_unordered_atomic:
1192 case Intrinsic::memmove_element_unordered_atomic:
1193 case Intrinsic::memset_element_unordered_atomic:
1200 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1210 switch (
I->getIntrinsicID()) {
1211 case Intrinsic::memset:
1212 case Intrinsic::memset_inline:
1213 case Intrinsic::memset_element_unordered_atomic:
1220 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1230 switch (
I->getIntrinsicID()) {
1231 case Intrinsic::memcpy:
1232 case Intrinsic::memcpy_inline:
1233 case Intrinsic::memmove:
1234 case Intrinsic::memcpy_element_unordered_atomic:
1235 case Intrinsic::memmove_element_unordered_atomic:
1242 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1252 switch (
I->getIntrinsicID()) {
1253 case Intrinsic::memcpy:
1254 case Intrinsic::memcpy_inline:
1255 case Intrinsic::memcpy_element_unordered_atomic:
1262 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1272 switch (
I->getIntrinsicID()) {
1273 case Intrinsic::memmove:
1274 case Intrinsic::memmove_element_unordered_atomic:
1281 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1289 return I->getIntrinsicID() == Intrinsic::vastart;
1292 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1302 return I->getIntrinsicID() == Intrinsic::vaend;
1305 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1315 return I->getIntrinsicID() == Intrinsic::vacopy;
1318 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1330 return cast<GlobalVariable>(
1347 return I->getIntrinsicID() == Intrinsic::instrprof_cover;
1350 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1358 return I->getIntrinsicID() == Intrinsic::instrprof_increment ||
1359 I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1362 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1371 return I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1374 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1382 return I->getIntrinsicID() == Intrinsic::instrprof_value_profile;
1385 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1405 return I->getIntrinsicID() == Intrinsic::pseudoprobe;
1409 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1432 return I->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl;
1436 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1442 return cast<MDNode>(MV->getMetadata());
1456 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate ||
1457 I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1461 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1469 return isa<LandingPadInst>(Token) || isa<InvokeInst>(Token);
1480 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate;
1484 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1508 return I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1512 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1520 return I->getIntrinsicID() == Intrinsic::assume ||
1521 I->getIntrinsicID() == Intrinsic::experimental_guard;
1524 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1532 return I->getIntrinsicID() == Intrinsic::assume;
1535 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
#define LLVM_DEPRECATED(MSG, FIX)
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file contains the declarations of entities that describe floating point environment and related ...
static M68kRelType getType(unsigned Kind, MCSymbolRefExpr::VariantKind &Modifier, bool &IsPCRel)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Class for arbitrary precision integers.
static APInt getMaxValue(unsigned numBits)
Gets maximum unsigned value of APInt for specific bit width.
static APInt getSignedMaxValue(unsigned numBits)
Gets maximum signed value of APInt for a specific bit width.
static APInt getMinValue(unsigned numBits)
Gets minimum unsigned value of APInt for a specific bit width.
static APInt getSignedMinValue(unsigned numBits)
Gets minimum signed value of APInt for a specific bit width.
This class represents any memcpy intrinsic i.e.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class represents any memmove intrinsic i.e.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This class represents any memset intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
This represents the llvm.assume intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class represents the atomic memcpy intrinsic i.e.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
ConstantInt * getElementSizeInBytesCst() const
static bool classof(const IntrinsicInst *I)
Value * getRawElementSizeInBytes() const
static bool classof(const Value *V)
void setElementSizeInBytes(Constant *V)
uint32_t getElementSizeInBytes() const
This class represents the atomic memmove intrinsic i.e.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class represents atomic memset intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
static Attribute getWithAlignment(LLVMContext &Context, Align Alignment)
Return a uniquified Attribute object that has the specific alignment set.
This class represents an intrinsic that is based on a binary operation.
static bool classof(const Value *V)
unsigned getNoWrapKind() const
Returns one of OBO::NoSignedWrap or OBO::NoUnsignedWrap.
bool isSigned() const
Whether the intrinsic is signed or unsigned.
static bool classof(const IntrinsicInst *I)
Instruction::BinaryOps getBinaryOp() const
Returns the binary operation underlying the intrinsic.
void removeParamAttr(unsigned ArgNo, Attribute::AttrKind Kind)
Removes the attribute from the given argument.
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation or the function signa...
MaybeAlign getParamAlign(unsigned ArgNo) const
Extract the alignment for a call or parameter (0=unknown).
const Use & getArgOperandUse(unsigned i) const
Wrappers for getting the Use of a call argument.
Value * getArgOperand(unsigned i) const
void setArgOperand(unsigned i, Value *v)
void addParamAttr(unsigned ArgNo, Attribute::AttrKind Kind)
Adds the attribute to the indicated argument.
This class represents a function call, abstracting a target machine's calling convention.
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
@ ICMP_SLT
signed less than
@ ICMP_UGT
unsigned greater than
@ ICMP_SGT
signed greater than
@ ICMP_ULT
unsigned less than
This represents intrinsics that guard a condition.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This is the shared class of boolean and integer constants.
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
This is an important base class in LLVM.
static Constant * getIntegerValue(Type *Ty, const APInt &V)
Return the value for an integer or pointer constant, or a vector thereof, with the given scalar value...
Constrained floating point compare intrinsics.
FCmpInst::Predicate getPredicate() const
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This is the common base class for constrained floating point intrinsics.
std::optional< fp::ExceptionBehavior > getExceptionBehavior() const
std::optional< RoundingMode > getRoundingMode() const
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
bool isDefaultFPEnvironment() const
static std::optional< FragmentInfo > getFragmentInfo(expr_op_iterator Start, expr_op_iterator End)
Retrieve the details of this fragment expression.
This represents the llvm.dbg.addr instruction.
static bool classof(const IntrinsicInst *I)
Value * getAddress() const
static bool classof(const Value *V)
This represents the llvm.dbg.assign instruction.
DIAssignID * getAssignID() const
static bool classof(const Value *V)
void setAssignId(DIAssignID *New)
void setKillAddress()
Kill the address component.
bool isKillAddress() const
Check whether this kills the address component.
Metadata * getRawAddress() const
DIExpression * getAddressExpression() const
Value * getAddress() const
static bool classof(const IntrinsicInst *I)
Metadata * getRawAddressExpression() const
Metadata * getRawAssignID() const
void setAddress(Value *V)
void setAddressExpression(DIExpression *NewExpr)
This represents the llvm.dbg.declare instruction.
static bool classof(const Value *V)
Value * getAddress() const
static bool classof(const IntrinsicInst *I)
This is the common base class for debug info intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This represents the llvm.dbg.label instruction.
Metadata * getRawLabel() const
static bool classof(const IntrinsicInst *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
DILabel * getLabel() const
static bool classof(const Value *V)
This represents the llvm.dbg.value instruction.
iterator_range< location_op_iterator > getValues() const
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Value * getValue(unsigned OpIdx=0) const
location_op_iterator & operator=(const location_op_iterator &R)
bool operator==(const location_op_iterator &RHS) const
location_op_iterator(ValueAsMetadata *SingleIter)
location_op_iterator & operator--()
location_op_iterator & operator++()
const Value * operator*() const
location_op_iterator(ValueAsMetadata **MultiIter)
location_op_iterator(const location_op_iterator &R)
This is the common base class for debug info intrinsics for variables.
void setVariable(DILocalVariable *NewVar)
void addVariableLocationOps(ArrayRef< Value * > NewValues, DIExpression *NewExpr)
Adding a new location operand will always result in this intrinsic using an ArgList,...
void replaceVariableLocationOp(Value *OldValue, Value *NewValue)
void setRawLocation(Metadata *Location)
Use of this should generally be avoided; instead, replaceVariableLocationOp and addVariableLocationOp...
Value * getVariableLocationOp(unsigned OpIdx) const
std::optional< DIExpression::FragmentInfo > getFragment() const
Get the FragmentInfo for the variable.
static bool classof(const Value *V)
void setExpression(DIExpression *NewExpr)
Metadata * getRawLocation() const
DILocalVariable * getVariable() const
unsigned getNumVariableLocationOps() const
bool isAddressOfVariable() const
Does this describe the address of a local variable.
iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
void setOperand(unsigned i, Value *v)
Metadata * getRawVariable() const
static bool classof(const IntrinsicInst *I)
std::optional< uint64_t > getFragmentSizeInBits() const
Get the size (in bits) of the variable, or fragment of the variable that is described.
DIExpression * getExpression() const
void setArgOperand(unsigned i, Value *v)
Metadata * getRawExpression() const
bool isKillLocation() const
Intrinsic::ID getIntrinsicID() const LLVM_READONLY
getIntrinsicID - This method returns the ID number of the specified function, or Intrinsic::not_intri...
Common base class for representing values projected from a statepoint.
const Value * getStatepoint() const
The statepoint with which this gc.relocate is associated.
bool isTiedToInvoke() const
Return true if this relocate is tied to the invoke statepoint.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
Represents calls to the gc.relocate intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
Value * getBasePtr() const
unsigned getBasePtrIndex() const
The index into the associate statepoint's argument list which contains the base pointer of the pointe...
Value * getDerivedPtr() const
unsigned getDerivedPtrIndex() const
The index into the associate statepoint's argument list which contains the pointer whose relocation t...
Represents calls to the gc.result intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This represents the llvm.instrprof.cover intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This represents the llvm.instrprof.increment.step intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This represents the llvm.instrprof.increment intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
A base class for all instrprof intrinsics.
ConstantInt * getNumCounters() const
GlobalVariable * getName() const
ConstantInt * getHash() const
ConstantInt * getIndex() const
This represents the llvm.instrprof.value.profile intrinsic.
ConstantInt * getIndex() const
Value * getTargetValue() const
static bool classof(const IntrinsicInst *I)
ConstantInt * getValueKind() const
static bool classof(const Value *V)
A wrapper class for inspecting calls to intrinsic functions.
bool isAssumeLikeIntrinsic() const
Checks if the intrinsic is an annotation.
static bool mayLowerToFunctionCall(Intrinsic::ID IID)
Check if the intrinsic might lower into a regular function call in the course of IR transformations.
IntrinsicInst(const IntrinsicInst &)=delete
Intrinsic::ID getIntrinsicID() const
Return the intrinsic ID of this intrinsic.
bool isCommutative() const
Return true if swapping the first two arguments to the intrinsic produces the same result.
static bool classof(const Value *V)
IntrinsicInst & operator=(const IntrinsicInst &)=delete
static bool classof(const CallInst *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
This is the common base class for lifetime intrinsics.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
LLVMContext & getContext() const
This class wraps the llvm.memcpy.inline intrinsic.
static bool classof(const IntrinsicInst *I)
ConstantInt * getLength() const
static bool classof(const Value *V)
This class wraps the llvm.memcpy intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Common base class for all memory intrinsics.
const Use & getRawDestUse() const
Value * getLength() const
Value * getRawDest() const
void setDestAlignment(Align Alignment)
Value * getDest() const
This is just like getRawDest, but it strips off any cast instructions (including addrspacecast) that ...
void setDestAlignment(MaybeAlign Alignment)
void setDest(Value *Ptr)
Set the specified arguments of the instruction.
unsigned getDestAlignment() const
FIXME: Remove this function once transition to Align is over.
MaybeAlign getDestAlign() const
const Use & getLengthUse() const
unsigned getDestAddressSpace() const
This is the common base class for memset/memcpy/memmove.
ConstantInt * getVolatileCst() const
void setVolatile(Constant *V)
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class wraps the llvm.memmove intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Common base class for all memset intrinsics.
void setValue(Value *Val)
const Use & getValueUse() const
This class wraps the llvm.memset.inline intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
ConstantInt * getLength() const
This class wraps the llvm.memset and llvm.memset.inline intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Common base class for all memory transfer intrinsics.
unsigned getSourceAlignment() const
FIXME: Remove this function once transition to Align is over.
void setSource(Value *Ptr)
Value * getRawSource() const
Return the arguments to the instruction.
unsigned getSourceAddressSpace() const
MaybeAlign getSourceAlign() const
Value * getSource() const
This is just like getRawSource, but it strips off any cast instructions that feed it,...
void setSourceAlignment(MaybeAlign Alignment)
void setSourceAlignment(Align Alignment)
const Use & getRawSourceUse() const
This class wraps the llvm.memcpy/memmove intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class represents min/max intrinsics.
static bool classof(const Value *V)
static Constant * getSaturationPoint(Intrinsic::ID ID, Type *Ty)
Min/max intrinsics are monotonic, they operate on a fixed-bitwidth values, so there is a certain thre...
APInt getSaturationPoint(unsigned numBits) const
Min/max intrinsics are monotonic, they operate on a fixed-bitwidth values, so there is a certain thre...
static APInt getSaturationPoint(Intrinsic::ID ID, unsigned numBits)
Min/max intrinsics are monotonic, they operate on a fixed-bitwidth values, so there is a certain thre...
static ICmpInst::Predicate getPredicate(Intrinsic::ID ID)
Returns the comparison predicate underlying the intrinsic.
ICmpInst::Predicate getPredicate() const
Returns the comparison predicate underlying the intrinsic.
static bool isSigned(Intrinsic::ID ID)
Whether the intrinsic is signed or unsigned.
static bool classof(const IntrinsicInst *I)
bool isSigned() const
Whether the intrinsic is signed or unsigned.
Constant * getSaturationPoint(Type *Ty) const
Min/max intrinsics are monotonic, they operate on a fixed-bitwidth values, so there is a certain thre...
A Module instance is used to store all the information related to an LLVM module.
static bool classof(const IntrinsicInst *I)
void setScopeList(MDNode *ScopeList)
static bool classof(const Value *V)
MDNode * getScopeList() const
A discriminated union of two or more pointer types, with the discriminator in the low bit of the poin...
static PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
ConstantInt * getAttributes() const
ConstantInt * getIndex() const
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
ConstantInt * getFactor() const
ConstantInt * getFuncGuid() const
Represents a saturating add/sub intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
The instances of the Type class are immutable: once they are created, they are never changed.
unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
static IntegerType * getInt8Ty(LLVMContext &C)
A Use represents the edge between a Value definition and its users.
void setOperand(unsigned i, Value *Val)
Value * getOperand(unsigned i) const
This represents the llvm.va_copy intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This represents the llvm.va_end intrinsic.
Value * getArgList() const
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This represents the llvm.va_start intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
Value * getArgList() const
static bool isVPCast(Intrinsic::ID ID)
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const IntrinsicInst *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const Value *V)
static bool isVPCmp(Intrinsic::ID ID)
CmpInst::Predicate getPredicate() const
This is the common base class for vector predication intrinsics.
static bool classof(const Value *V)
static Function * getDeclarationForParams(Module *M, Intrinsic::ID, Type *ReturnType, ArrayRef< Value * > Params)
Declares a llvm.vp.
static std::optional< unsigned > getMaskParamPos(Intrinsic::ID IntrinsicID)
bool canIgnoreVectorLengthParam() const
void setMaskParam(Value *)
static std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)
static std::optional< unsigned > getMemoryDataParamPos(Intrinsic::ID)
Value * getVectorLengthParam() const
static bool classof(const IntrinsicInst *I)
void setVectorLengthParam(Value *)
static std::optional< unsigned > getVectorLengthParamPos(Intrinsic::ID IntrinsicID)
static Intrinsic::ID getForOpcode(unsigned OC)
The llvm.vp.* intrinsics for this instruction Opcode.
static std::optional< unsigned > getMemoryPointerParamPos(Intrinsic::ID)
static bool isVPIntrinsic(Intrinsic::ID)
Value * getMemoryDataParam() const
Value * getMemoryPointerParam() const
MaybeAlign getPointerAlignment() const
Value * getMaskParam() const
ElementCount getStaticVectorLength() const
std::optional< unsigned > getFunctionalOpcode() const
This represents vector predication reduction intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
Methods for support type inquiry through isa, cast, and dyn_cast:
static bool isVPReduction(Intrinsic::ID ID)
unsigned getStartParamPos() const
unsigned getVectorParamPos() const
LLVM Value Representation.
Type * getType() const
All values are typed, get the type of this value.
const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
LLVMContext & getContext() const
All values hold a context through their type.
Represents an op.with.overflow intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
A range adaptor for a pair of iterators.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
static const int NoAliasScopeDeclScopeArg
This is an optimization pass for GlobalISel generic memory operations.
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
static bool isLifetimeIntrinsic(Intrinsic::ID ID)
Check if ID corresponds to a lifetime intrinsic.
static bool isDbgInfoIntrinsic(Intrinsic::ID ID)
Check if ID corresponds to a debug info intrinsic.
This struct is a compact representation of a valid (non-zero power of two) alignment.
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.