23#ifndef LLVM_IR_INTRINSICINST_H
24#define LLVM_IR_INTRINSICINST_H
75 case Intrinsic::maxnum:
76 case Intrinsic::minnum:
77 case Intrinsic::maximum:
78 case Intrinsic::minimum:
79 case Intrinsic::maximumnum:
80 case Intrinsic::minimumnum:
85 case Intrinsic::sadd_sat:
86 case Intrinsic::uadd_sat:
87 case Intrinsic::sadd_with_overflow:
88 case Intrinsic::uadd_with_overflow:
89 case Intrinsic::smul_with_overflow:
90 case Intrinsic::umul_with_overflow:
91 case Intrinsic::smul_fix:
92 case Intrinsic::umul_fix:
93 case Intrinsic::smul_fix_sat:
94 case Intrinsic::umul_fix_sat:
96 case Intrinsic::fmuladd:
107 case Intrinsic::assume:
108 case Intrinsic::sideeffect:
109 case Intrinsic::pseudoprobe:
110 case Intrinsic::dbg_assign:
111 case Intrinsic::dbg_declare:
112 case Intrinsic::dbg_value:
113 case Intrinsic::dbg_label:
114 case Intrinsic::invariant_start:
115 case Intrinsic::invariant_end:
116 case Intrinsic::lifetime_start:
117 case Intrinsic::lifetime_end:
118 case Intrinsic::experimental_noalias_scope_decl:
119 case Intrinsic::objectsize:
120 case Intrinsic::ptr_annotation:
121 case Intrinsic::var_annotation:
133 if (
const Function *CF =
I->getCalledFunction())
134 return CF->isIntrinsic();
138 return isa<CallInst>(V) &&
classof(cast<CallInst>(V));
145 case Intrinsic::lifetime_start:
146 case Intrinsic::lifetime_end:
162 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
170 case Intrinsic::dbg_declare:
171 case Intrinsic::dbg_value:
172 case Intrinsic::dbg_label:
173 case Intrinsic::dbg_assign:
189 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
199 std::bidirectional_iterator_tag, Value *> {
214 ? cast<ValueAsMetadata *>(
I)
215 : *cast<ValueAsMetadata **>(
I);
220 ? cast<ValueAsMetadata *>(
I)
221 : *cast<ValueAsMetadata **>(
I);
225 if (isa<ValueAsMetadata *>(
I))
226 I = cast<ValueAsMetadata *>(
I) + 1;
228 I = cast<ValueAsMetadata **>(
I) + 1;
232 if (isa<ValueAsMetadata *>(
I))
233 I = cast<ValueAsMetadata *>(
I) - 1;
235 I = cast<ValueAsMetadata **>(
I) - 1;
249 : RawLocation(RawLocation) {
251 assert(RawLocation &&
"unexpected null RawLocation");
252 assert(isa<ValueAsMetadata>(RawLocation) || isa<DIArgList>(RawLocation) ||
253 (isa<MDNode>(RawLocation) &&
254 !cast<MDNode>(RawLocation)->getNumOperands()));
283 return A.RawLocation ==
B.RawLocation;
291 return A.RawLocation >
B.RawLocation;
295 return A.RawLocation >=
B.RawLocation;
299 return A.RawLocation <
B.RawLocation;
303 return A.RawLocation <=
B.RawLocation;
318 bool AllowEmpty =
false);
360 if (!RemovedValues.
insert(OldValue).second)
380 return cast<MetadataAsValue>(
getArgOperand(0))->getMetadata();
388 return cast<MetadataAsValue>(
getArgOperand(1))->getMetadata();
392 return cast<MetadataAsValue>(
getArgOperand(2))->getMetadata();
421 return VariableSlice;
427 switch (
I->getIntrinsicID()) {
428 case Intrinsic::dbg_declare:
429 case Intrinsic::dbg_value:
430 case Intrinsic::dbg_assign:
437 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
452 "dbg.declare must have exactly 1 location operand.");
459 return I->getIntrinsicID() == Intrinsic::dbg_declare;
462 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
482 return I->getIntrinsicID() == Intrinsic::dbg_value ||
483 I->getIntrinsicID() == Intrinsic::dbg_assign;
486 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
505 return cast<MetadataAsValue>(
getArgOperand(OpAddress))->getMetadata();
508 return cast<MetadataAsValue>(
getArgOperand(OpAssignID))->getMetadata();
512 return cast<MetadataAsValue>(
getArgOperand(OpAddressExpr))->getMetadata();
534 return I->getIntrinsicID() == Intrinsic::dbg_assign;
537 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
551 return cast<MetadataAsValue>(
getArgOperand(0))->getMetadata();
557 return I->getIntrinsicID() == Intrinsic::dbg_label;
560 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
622 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
644 static std::optional<Intrinsic::ID>
648 static std::optional<Intrinsic::ID>
669 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
684 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
701 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
716 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
733 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
742 return getIntrinsicID() == Intrinsic::experimental_constrained_fcmps;
747 switch (
I->getIntrinsicID()) {
748 case Intrinsic::experimental_constrained_fcmp:
749 case Intrinsic::experimental_constrained_fcmps:
756 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
764 switch (
I->getIntrinsicID()) {
765 case Intrinsic::umin:
766 case Intrinsic::umax:
767 case Intrinsic::smin:
768 case Intrinsic::smax:
775 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
784 case Intrinsic::umin:
786 case Intrinsic::umax:
788 case Intrinsic::smin:
790 case Intrinsic::smax:
815 case Intrinsic::umin:
817 case Intrinsic::umax:
819 case Intrinsic::smin:
821 case Intrinsic::smax:
855 switch (
I->getIntrinsicID()) {
856 case Intrinsic::scmp:
857 case Intrinsic::ucmp:
864 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
893 switch (
I->getIntrinsicID()) {
894 case Intrinsic::uadd_with_overflow:
895 case Intrinsic::sadd_with_overflow:
896 case Intrinsic::usub_with_overflow:
897 case Intrinsic::ssub_with_overflow:
898 case Intrinsic::umul_with_overflow:
899 case Intrinsic::smul_with_overflow:
900 case Intrinsic::uadd_sat:
901 case Intrinsic::sadd_sat:
902 case Intrinsic::usub_sat:
903 case Intrinsic::ssub_sat:
910 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
930 switch (
I->getIntrinsicID()) {
931 case Intrinsic::uadd_with_overflow:
932 case Intrinsic::sadd_with_overflow:
933 case Intrinsic::usub_with_overflow:
934 case Intrinsic::ssub_with_overflow:
935 case Intrinsic::umul_with_overflow:
936 case Intrinsic::smul_with_overflow:
943 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
951 switch (
I->getIntrinsicID()) {
952 case Intrinsic::uadd_sat:
953 case Intrinsic::sadd_sat:
954 case Intrinsic::usub_sat:
955 case Intrinsic::ssub_sat:
962 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
972 enum { ARG_DEST = 0, ARG_LENGTH = 2 };
1009 "setDest called with pointer of wrong type!");
1027 "setLength called with value of wrong type!");
1036 enum { ARG_SOURCE = 1 };
1041 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_SOURCE));
1044 return BaseCL::getArgOperandUse(ARG_SOURCE);
1061 if (
auto MA = BaseCL::getParamAlign(ARG_SOURCE))
1067 return BaseCL::getParamAlign(ARG_SOURCE);
1072 "setSource called with pointer of wrong type!");
1073 BaseCL::setArgOperand(ARG_SOURCE,
Ptr);
1077 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
1080 BaseCL::getContext(), *Alignment));
1084 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
1086 BaseCL::getContext(), Alignment));
1094 enum { ARG_VALUE = 1 };
1098 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_VALUE));
1105 "setValue called with value of wrong type!");
1106 BaseCL::setArgOperand(ARG_VALUE, Val);
1114 enum { ARG_ELEMENTSIZE = 3 };
1131 "setElementSizeInBytes called with value of wrong type!");
1136 switch (
I->getIntrinsicID()) {
1137 case Intrinsic::memcpy_element_unordered_atomic:
1138 case Intrinsic::memmove_element_unordered_atomic:
1139 case Intrinsic::memset_element_unordered_atomic:
1146 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1155 return I->getIntrinsicID() == Intrinsic::memset_element_unordered_atomic;
1158 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1167 switch (
I->getIntrinsicID()) {
1168 case Intrinsic::memcpy_element_unordered_atomic:
1169 case Intrinsic::memmove_element_unordered_atomic:
1176 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1185 return I->getIntrinsicID() == Intrinsic::memcpy_element_unordered_atomic;
1188 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1197 return I->getIntrinsicID() == Intrinsic::memmove_element_unordered_atomic;
1200 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1207 enum { ARG_VOLATILE = 3 };
1220 switch (
I->getIntrinsicID()) {
1221 case Intrinsic::memcpy:
1222 case Intrinsic::memmove:
1223 case Intrinsic::memset:
1224 case Intrinsic::memset_inline:
1225 case Intrinsic::memcpy_inline:
1232 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1241 switch (
I->getIntrinsicID()) {
1242 case Intrinsic::memset:
1243 case Intrinsic::memset_inline:
1250 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1259 return I->getIntrinsicID() == Intrinsic::memset_inline;
1262 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1269 enum { ARG_VOLATILE = 3 };
1282 return I->getIntrinsicID() == Intrinsic::experimental_memset_pattern;
1285 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1294 return I->getIntrinsicID() == Intrinsic::experimental_memset_pattern;
1297 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1306 switch (
I->getIntrinsicID()) {
1307 case Intrinsic::memcpy:
1308 case Intrinsic::memmove:
1309 case Intrinsic::memcpy_inline:
1316 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1325 return I->getIntrinsicID() == Intrinsic::memcpy ||
1326 I->getIntrinsicID() == Intrinsic::memcpy_inline;
1329 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1338 return I->getIntrinsicID() == Intrinsic::memmove;
1341 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1350 return I->getIntrinsicID() == Intrinsic::memcpy_inline;
1353 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1365 if (
auto *
MI = dyn_cast<MemIntrinsic>(
this))
1366 return MI->isVolatile();
1371 switch (
I->getIntrinsicID()) {
1372 case Intrinsic::memcpy:
1373 case Intrinsic::memcpy_inline:
1374 case Intrinsic::memmove:
1375 case Intrinsic::memset:
1376 case Intrinsic::memset_inline:
1377 case Intrinsic::memcpy_element_unordered_atomic:
1378 case Intrinsic::memmove_element_unordered_atomic:
1379 case Intrinsic::memset_element_unordered_atomic:
1386 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1396 switch (
I->getIntrinsicID()) {
1397 case Intrinsic::memset:
1398 case Intrinsic::memset_inline:
1399 case Intrinsic::memset_element_unordered_atomic:
1406 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1416 switch (
I->getIntrinsicID()) {
1417 case Intrinsic::memcpy:
1418 case Intrinsic::memcpy_inline:
1419 case Intrinsic::memmove:
1420 case Intrinsic::memcpy_element_unordered_atomic:
1421 case Intrinsic::memmove_element_unordered_atomic:
1428 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1438 switch (
I->getIntrinsicID()) {
1439 case Intrinsic::memcpy:
1440 case Intrinsic::memcpy_inline:
1441 case Intrinsic::memcpy_element_unordered_atomic:
1448 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1458 switch (
I->getIntrinsicID()) {
1459 case Intrinsic::memmove:
1460 case Intrinsic::memmove_element_unordered_atomic:
1467 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1475 return I->getIntrinsicID() == Intrinsic::vastart;
1478 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1488 return I->getIntrinsicID() == Intrinsic::vaend;
1491 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1501 return I->getIntrinsicID() == Intrinsic::vacopy;
1504 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1515 switch (
I.getIntrinsicID()) {
1516 case Intrinsic::instrprof_cover:
1517 case Intrinsic::instrprof_increment:
1518 case Intrinsic::instrprof_increment_step:
1519 case Intrinsic::instrprof_callsite:
1520 case Intrinsic::instrprof_timestamp:
1521 case Intrinsic::instrprof_value_profile:
1527 switch (
I.getIntrinsicID()) {
1528 case Intrinsic::instrprof_mcdc_parameters:
1529 case Intrinsic::instrprof_mcdc_tvbitmap_update:
1537 if (
const auto *Instr = dyn_cast<IntrinsicInst>(V))
1566 if (
const auto *Instr = dyn_cast<IntrinsicInst>(V))
1582 return I->getIntrinsicID() == Intrinsic::instrprof_cover;
1585 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1593 return I->getIntrinsicID() == Intrinsic::instrprof_increment ||
1594 I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1597 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1606 return I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1609 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1620 return I->getIntrinsicID() == Intrinsic::instrprof_callsite;
1623 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1639 return I->getIntrinsicID() == Intrinsic::instrprof_timestamp;
1642 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1650 return I->getIntrinsicID() == Intrinsic::instrprof_value_profile;
1653 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1677 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1697 return I->getIntrinsicID() == Intrinsic::instrprof_mcdc_parameters;
1700 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1708 return I->getIntrinsicID() == Intrinsic::instrprof_mcdc_tvbitmap_update;
1711 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1730 return I->getIntrinsicID() == Intrinsic::pseudoprobe;
1734 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1757 return I->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl;
1761 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1767 return cast<MDNode>(MV->getMetadata());
1781 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate ||
1782 I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1786 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1794 return isa<LandingPadInst>(Token) || isa<InvokeInst>(Token);
1805 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate;
1809 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1833 return I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1837 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1846 return I->getIntrinsicID() == Intrinsic::assume;
1849 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1855 switch (IntrinsicID) {
1858 case Intrinsic::experimental_convergence_anchor:
1859 case Intrinsic::experimental_convergence_entry:
1860 case Intrinsic::experimental_convergence_loop:
1873 return isa<IntrinsicInst>(V) &&
classof(cast<IntrinsicInst>(V));
1877 return getIntrinsicID() == Intrinsic::experimental_convergence_anchor;
1880 return getIntrinsicID() == Intrinsic::experimental_convergence_entry;
1883 return getIntrinsicID() == Intrinsic::experimental_convergence_loop;
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
#define LLVM_DEPRECATED(MSG, FIX)
This file contains the declarations for the subclasses of Constant, which represent the different fla...
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file contains the declarations of entities that describe floating point environment and related ...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
static SymbolRef::Type getType(const Symbol *Sym)
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.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
bool isInlineAsm() const
Check if this call is an inline asm statement.
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...
bool isIndirectCall() const
Return true if the callsite is an indirect call.
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 class represents a ucmp/scmp intrinsic.
static CmpInst::Predicate getGTPredicate(Intrinsic::ID ID)
CmpInst::Predicate getLTPredicate() const
static CmpInst::Predicate getLTPredicate(Intrinsic::ID ID)
static bool classof(const IntrinsicInst *I)
static bool isSigned(Intrinsic::ID ID)
CmpInst::Predicate getGTPredicate() const
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
unsigned getNonMetadataArgCount() const
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
bool isDefaultFPEnvironment() const
Represents calls to the llvm.experimintal.convergence.* intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
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.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)
void setLabel(DILabel *NewLabel)
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
This is the common base class for debug info intrinsics for variables.
DIExpression::FragmentInfo getFragmentOrEntireVariable() const
Get the FragmentInfo for the variable if it exists, otherwise return a FragmentInfo that covers the e...
void setVariable(DILocalVariable *NewVar)
iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
void addVariableLocationOps(ArrayRef< Value * > NewValues, DIExpression *NewExpr)
Adding a new location operand will always result in this intrinsic using an ArgList,...
bool isValueOfVariable() const
Determine if this describes the value of a local variable.
void setRawLocation(Metadata *Location)
Use of this should generally be avoided; instead, replaceVariableLocationOp and addVariableLocationOp...
void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)
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.
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
RawLocationWrapper getWrappedLocation() const
bool isKillLocation() const
Class representing an expression and its matching format.
Intrinsic::ID getIntrinsicID() const LLVM_READONLY
getIntrinsicID - This method returns the ID number of the specified function, or Intrinsic::not_intri...
bool isIntrinsic() const
isIntrinsic - Returns true if the function's name starts with "llvm.".
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.callsite intrinsic.
void setCallee(Value *Callee)
Value * getCallee() const
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
static bool canInstrumentCallsite(const CallBase &CB)
A base class for all instrprof counter intrinsics.
static bool classof(const Value *V)
ConstantInt * getIndex() const
void setIndex(uint32_t Idx)
ConstantInt * getNumCounters() const
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.
static bool classof(const Value *V)
void setNameValue(Value *V)
GlobalVariable * getName() const
ConstantInt * getHash() const
Value * getNameValue() const
static bool isCounterBase(const IntrinsicInst &I)
static bool isMCDCBitmapBase(const IntrinsicInst &I)
A base class for instrprof mcdc intrinsics that require global bitmap bytes.
ConstantInt * getNumBitmapBits() const
static bool classof(const IntrinsicInst *I)
auto getNumBitmapBytes() const
static bool classof(const Value *V)
This represents the llvm.instrprof.mcdc.parameters intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This represents the llvm.instrprof.mcdc.tvbitmap.update intrinsic.
Value * getMCDCCondBitmapAddr() const
ConstantInt * getBitmapIndex() const
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This represents the llvm.instrprof.timestamp intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
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:
bool isAssociative() const
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)
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)
This class wraps the llvm.memset and llvm.memset.inline intrinsics.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
This class wraps the llvm.experimental.memset.pattern intrinsic.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
This is the base class for llvm.experimental.memset.pattern.
void setVolatile(Constant *V)
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
ConstantInt * getVolatileCst() const
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
Lightweight class that wraps the location operand metadata of a debug intrinsic.
friend bool operator<=(const RawLocationWrapper &A, const RawLocationWrapper &B)
Metadata * getRawLocation() const
friend bool operator>(const RawLocationWrapper &A, const RawLocationWrapper &B)
RawLocationWrapper(Metadata *RawLocation)
RawLocationWrapper()=default
friend bool operator<(const RawLocationWrapper &A, const RawLocationWrapper &B)
friend bool operator==(const RawLocationWrapper &A, const RawLocationWrapper &B)
iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
Value * getVariableLocationOp(unsigned OpIdx) const
bool isKillLocation(const DIExpression *Expression) const
friend bool operator!=(const RawLocationWrapper &A, const RawLocationWrapper &B)
unsigned getNumVariableLocationOps() const
friend bool operator>=(const RawLocationWrapper &A, const RawLocationWrapper &B)
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 isVPBinOp(Intrinsic::ID ID)
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 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.
std::optional< unsigned > getFunctionalIntrinsicID() const
static bool classof(const Value *V)
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)
static std::optional< Intrinsic::ID > getFunctionalIntrinsicIDForVP(Intrinsic::ID ID)
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 Function * getOrInsertDeclarationForParams(Module *M, Intrinsic::ID, Type *ReturnType, ArrayRef< Value * > Params)
Declares a llvm.vp.
static std::optional< unsigned > getMemoryPointerParamPos(Intrinsic::ID)
static bool isVPIntrinsic(Intrinsic::ID)
Value * getMemoryDataParam() const
static Intrinsic::ID getForIntrinsic(Intrinsic::ID Id)
The llvm.vp.
Value * getMemoryPointerParam() const
std::optional< unsigned > getConstrainedIntrinsicID() const
MaybeAlign getPointerAlignment() const
Value * getMaskParam() const
ElementCount getStaticVectorLength() const
static std::optional< Intrinsic::ID > getConstrainedIntrinsicIDForVP(Intrinsic::ID ID)
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.
bool operator==(const location_op_iterator &RHS) const
location_op_iterator & operator=(const location_op_iterator &R)
location_op_iterator(ValueAsMetadata **MultiIter)
location_op_iterator(const location_op_iterator &R)
location_op_iterator & operator++()
location_op_iterator(ValueAsMetadata *SingleIter)
location_op_iterator & operator--()
const Value * operator*() const
#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.
uint64_t alignTo(uint64_t Size, Align A)
Returns a multiple of A needed to store Size bytes.
static bool isConvergenceControlIntrinsic(unsigned IntrinsicID)
Check if ID corresponds to a convergence control 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.