23#ifndef LLVM_IR_INTRINSICINST_H
24#define LLVM_IR_INTRINSICINST_H
76 case Intrinsic::maxnum:
77 case Intrinsic::minnum:
78 case Intrinsic::maximum:
79 case Intrinsic::minimum:
80 case Intrinsic::maximumnum:
81 case Intrinsic::minimumnum:
86 case Intrinsic::sadd_sat:
87 case Intrinsic::uadd_sat:
88 case Intrinsic::sadd_with_overflow:
89 case Intrinsic::uadd_with_overflow:
90 case Intrinsic::smul_with_overflow:
91 case Intrinsic::umul_with_overflow:
92 case Intrinsic::smul_fix:
93 case Intrinsic::umul_fix:
94 case Intrinsic::smul_fix_sat:
95 case Intrinsic::umul_fix_sat:
96 case Intrinsic::smulh:
97 case Intrinsic::umulh:
99 case Intrinsic::fmuladd:
108 constexpr unsigned NumCommutativeOps = 2;
116 case Intrinsic::assume:
117 case Intrinsic::sideeffect:
118 case Intrinsic::pseudoprobe:
119 case Intrinsic::dbg_assign:
120 case Intrinsic::dbg_declare:
121 case Intrinsic::dbg_value:
122 case Intrinsic::dbg_label:
123 case Intrinsic::invariant_start:
124 case Intrinsic::invariant_end:
125 case Intrinsic::lifetime_start:
126 case Intrinsic::lifetime_end:
127 case Intrinsic::experimental_noalias_scope_decl:
128 case Intrinsic::objectsize:
129 case Intrinsic::ptr_annotation:
130 case Intrinsic::var_annotation:
143 return F &&
F->isIntrinsic();
153 case Intrinsic::lifetime_start:
154 case Intrinsic::lifetime_end:
178 case Intrinsic::dbg_declare:
179 case Intrinsic::dbg_value:
180 case Intrinsic::dbg_label:
181 case Intrinsic::dbg_assign:
207 std::bidirectional_iterator_tag, Value *> {
257 : RawLocation(RawLocation) {
259 assert(RawLocation &&
"unexpected null RawLocation");
291 return A.RawLocation ==
B.RawLocation;
299 return A.RawLocation >
B.RawLocation;
303 return A.RawLocation >=
B.RawLocation;
307 return A.RawLocation <
B.RawLocation;
311 return A.RawLocation <=
B.RawLocation;
326 bool AllowEmpty =
false);
393 return VariableSlice;
399 switch (
I->getIntrinsicID()) {
400 case Intrinsic::dbg_declare:
401 case Intrinsic::dbg_value:
402 case Intrinsic::dbg_assign:
424 "dbg.declare must have exactly 1 location operand.");
431 return I->getIntrinsicID() == Intrinsic::dbg_declare;
454 return I->getIntrinsicID() == Intrinsic::dbg_value ||
455 I->getIntrinsicID() == Intrinsic::dbg_assign;
495 return I->getIntrinsicID() == Intrinsic::dbg_assign;
515 return I->getIntrinsicID() == Intrinsic::dbg_label;
533 LLVM_ABI static std::optional<unsigned>
535 LLVM_ABI static std::optional<unsigned>
563 LLVM_ABI static std::optional<unsigned>
589 LLVM_ABI static std::optional<unsigned>
593 LLVM_ABI static std::optional<Intrinsic::ID>
639 return getIntrinsicID() == Intrinsic::experimental_constrained_fcmps;
644 switch (
I->getIntrinsicID()) {
645 case Intrinsic::experimental_constrained_fcmp:
646 case Intrinsic::experimental_constrained_fcmps:
661 switch (
I->getIntrinsicID()) {
662 case Intrinsic::umin:
663 case Intrinsic::umax:
664 case Intrinsic::smin:
665 case Intrinsic::smax:
681 case Intrinsic::umin:
683 case Intrinsic::umax:
685 case Intrinsic::smin:
687 case Intrinsic::smax:
710 case Intrinsic::umin:
711 case Intrinsic::smin:
713 case Intrinsic::umax:
714 case Intrinsic::smax:
731 case Intrinsic::umin:
733 case Intrinsic::umax:
735 case Intrinsic::smin:
737 case Intrinsic::smax:
755 case Intrinsic::umin:
757 case Intrinsic::umax:
759 case Intrinsic::smin:
761 case Intrinsic::smax:
795 switch (
I->getIntrinsicID()) {
796 case Intrinsic::scmp:
797 case Intrinsic::ucmp:
833 switch (
I->getIntrinsicID()) {
834 case Intrinsic::uadd_with_overflow:
835 case Intrinsic::sadd_with_overflow:
836 case Intrinsic::usub_with_overflow:
837 case Intrinsic::ssub_with_overflow:
838 case Intrinsic::umul_with_overflow:
839 case Intrinsic::smul_with_overflow:
840 case Intrinsic::uadd_sat:
841 case Intrinsic::sadd_sat:
842 case Intrinsic::usub_sat:
843 case Intrinsic::ssub_sat:
870 switch (
I->getIntrinsicID()) {
871 case Intrinsic::uadd_with_overflow:
872 case Intrinsic::sadd_with_overflow:
873 case Intrinsic::usub_with_overflow:
874 case Intrinsic::ssub_with_overflow:
875 case Intrinsic::umul_with_overflow:
876 case Intrinsic::smul_with_overflow:
891 switch (
I->getIntrinsicID()) {
892 case Intrinsic::uadd_sat:
893 case Intrinsic::sadd_sat:
894 case Intrinsic::usub_sat:
895 case Intrinsic::ssub_sat:
912 enum { ARG_DEST = 0, ARG_LENGTH = 2 };
931 return C->getValue();
948 "setDest called with pointer of wrong type!");
966 "setLength called with value of wrong type!");
979 enum { ARG_SOURCE = 1 };
984 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_SOURCE));
987 return BaseCL::getArgOperandUse(ARG_SOURCE);
1001 return BaseCL::getParamAlign(ARG_SOURCE);
1006 "setSource called with pointer of wrong type!");
1007 BaseCL::setArgOperand(ARG_SOURCE, Ptr);
1011 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
1014 BaseCL::getContext(), *Alignment));
1018 BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
1020 BaseCL::getContext(), Alignment));
1028 enum { ARG_VALUE = 1 };
1032 return const_cast<Value *
>(BaseCL::getArgOperand(ARG_VALUE));
1039 "setValue called with value of wrong type!");
1040 BaseCL::setArgOperand(ARG_VALUE, Val);
1047 enum { ARG_VOLATILE = 3 };
1060 case Intrinsic::memset_inline:
1061 case Intrinsic::memcpy_inline:
1070 switch (
I->getIntrinsicID()) {
1071 case Intrinsic::memcpy:
1072 case Intrinsic::memmove:
1073 case Intrinsic::memset:
1074 case Intrinsic::memset_inline:
1075 case Intrinsic::memcpy_inline:
1091 switch (
I->getIntrinsicID()) {
1092 case Intrinsic::memset:
1093 case Intrinsic::memset_inline:
1109 enum { ARG_VOLATILE = 3 };
1122 return I->getIntrinsicID() == Intrinsic::experimental_memset_pattern;
1134 switch (
I->getIntrinsicID()) {
1135 case Intrinsic::memcpy:
1136 case Intrinsic::memmove:
1137 case Intrinsic::memcpy_inline:
1153 return I->getIntrinsicID() == Intrinsic::memcpy ||
1154 I->getIntrinsicID() == Intrinsic::memcpy_inline;
1166 return I->getIntrinsicID() == Intrinsic::memmove;
1179 enum { ARG_ELEMENTSIZE = 3 };
1185 return MI->isVolatile();
1191 case Intrinsic::memcpy_element_unordered_atomic:
1192 case Intrinsic::memmove_element_unordered_atomic:
1193 case Intrinsic::memset_element_unordered_atomic:
1201 switch (
I->getIntrinsicID()) {
1202 case Intrinsic::memcpy:
1203 case Intrinsic::memcpy_inline:
1204 case Intrinsic::memmove:
1205 case Intrinsic::memset:
1206 case Intrinsic::memset_inline:
1207 case Intrinsic::memcpy_element_unordered_atomic:
1208 case Intrinsic::memmove_element_unordered_atomic:
1209 case Intrinsic::memset_element_unordered_atomic:
1236 switch (
I->getIntrinsicID()) {
1237 case Intrinsic::memset:
1238 case Intrinsic::memset_inline:
1239 case Intrinsic::memset_element_unordered_atomic:
1256 switch (
I->getIntrinsicID()) {
1257 case Intrinsic::memcpy:
1258 case Intrinsic::memcpy_inline:
1259 case Intrinsic::memmove:
1260 case Intrinsic::memcpy_element_unordered_atomic:
1261 case Intrinsic::memmove_element_unordered_atomic:
1278 switch (
I->getIntrinsicID()) {
1279 case Intrinsic::memcpy:
1280 case Intrinsic::memcpy_inline:
1281 case Intrinsic::memcpy_element_unordered_atomic:
1298 switch (
I->getIntrinsicID()) {
1299 case Intrinsic::memmove:
1300 case Intrinsic::memmove_element_unordered_atomic:
1315 return I->getIntrinsicID() == Intrinsic::vastart;
1328 return I->getIntrinsicID() == Intrinsic::vaend;
1341 return I->getIntrinsicID() == Intrinsic::vacopy;
1355 switch (
I.getIntrinsicID()) {
1356 case Intrinsic::instrprof_cover:
1357 case Intrinsic::instrprof_increment:
1358 case Intrinsic::instrprof_increment_step:
1359 case Intrinsic::instrprof_callsite:
1360 case Intrinsic::instrprof_timestamp:
1361 case Intrinsic::instrprof_value_profile:
1367 switch (
I.getIntrinsicID()) {
1368 case Intrinsic::instrprof_mcdc_parameters:
1369 case Intrinsic::instrprof_mcdc_tvbitmap_update:
1418 return I->getIntrinsicID() == Intrinsic::instrprof_cover;
1429 return I->getIntrinsicID() == Intrinsic::instrprof_increment ||
1430 I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1442 return I->getIntrinsicID() == Intrinsic::instrprof_increment_step;
1456 return I->getIntrinsicID() == Intrinsic::instrprof_callsite;
1475 return I->getIntrinsicID() == Intrinsic::instrprof_timestamp;
1486 return I->getIntrinsicID() == Intrinsic::instrprof_value_profile;
1529 return I->getIntrinsicID() == Intrinsic::instrprof_mcdc_parameters;
1540 return I->getIntrinsicID() == Intrinsic::instrprof_mcdc_tvbitmap_update;
1560 return I->getIntrinsicID() == Intrinsic::pseudoprobe;
1583 return I->getIntrinsicID() == Intrinsic::experimental_noalias_scope_decl;
1607 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate ||
1608 I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1631 return I->getIntrinsicID() == Intrinsic::experimental_gc_relocate;
1659 return I->getIntrinsicID() == Intrinsic::experimental_gc_result;
1672 return I->getIntrinsicID() == Intrinsic::assume;
1681 switch (IntrinsicID) {
1684 case Intrinsic::experimental_convergence_anchor:
1685 case Intrinsic::experimental_convergence_entry:
1686 case Intrinsic::experimental_convergence_loop:
1703 return getIntrinsicID() == Intrinsic::experimental_convergence_anchor;
1706 return getIntrinsicID() == Intrinsic::experimental_convergence_entry;
1709 return getIntrinsicID() == Intrinsic::experimental_convergence_loop;
1721 return I->getIntrinsicID() == Intrinsic::structured_alloca;
1736 return I->getIntrinsicID() == Intrinsic::structured_gep;
1768 CurrentType = AT->getElementType();
1770 CurrentType = VT->getElementType();
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
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 ...
Func getContext().diagnose(DiagnosticInfoUnsupported(Func
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)
Value * getRawElementSizeInBytes() const
uint32_t getElementSizeInBytes() const
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)
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Class to represent array types.
This represents the llvm.assume intrinsic.
static bool classof(const Value *V)
static bool classof(const IntrinsicInst *I)
static LLVM_ABI Attribute getWithAlignment(LLVMContext &Context, Align Alignment)
Return a uniquified Attribute object that has the specific alignment set.
LLVM_ABI Type * getValueAsType() const
Return the attribute's value as a Type.
LLVM Basic Block Representation.
This class represents an intrinsic that is based on a binary operation.
static bool classof(const Value *V)
LLVM_ABI unsigned getNoWrapKind() const
Returns one of OBO::NoSignedWrap or OBO::NoUnsignedWrap.
LLVM_ABI bool isSigned() const
Whether the intrinsic is signed or unsigned.
static bool classof(const IntrinsicInst *I)
LLVM_ABI 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.
Attribute getRetAttr(Attribute::AttrKind Kind) const
Return the attribute for the given attribute kind for the return value.
void removeParamAttr(unsigned ArgNo, Attribute::AttrKind Kind)
Removes the attribute from the given argument.
Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Get the attribute of a given kind from a given arg.
LLVM_ABI 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).
Value * getCalledOperand() const
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)
LLVM_ABI Intrinsic::ID getIntrinsicID() const
Returns the intrinsic ID of the intrinsic called or Intrinsic::not_intrinsic if the called function i...
unsigned arg_size() const
void addParamAttr(unsigned ArgNo, Attribute::AttrKind Kind)
Adds the attribute to the indicated argument.
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 LLVM_ABI 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.
LLVM_ABI 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.
LLVM_ABI std::optional< fp::ExceptionBehavior > getExceptionBehavior() const
LLVM_ABI std::optional< RoundingMode > getRoundingMode() const
LLVM_ABI unsigned getNonMetadataArgCount() const
static LLVM_ABI bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
LLVM_ABI bool isDefaultFPEnvironment() const
Represents calls to the llvm.experimintal.convergence.* intrinsics.
static bool classof(const Value *V)
static LLVM_ABI ConvergenceControlInst * CreateAnchor(BasicBlock &BB)
static LLVM_ABI ConvergenceControlInst * CreateLoop(BasicBlock &BB, ConvergenceControlInst *Parent)
static LLVM_ABI ConvergenceControlInst * CreateEntry(BasicBlock &BB)
static bool classof(const IntrinsicInst *I)
DbgVariableFragmentInfo FragmentInfo
static LLVM_ABI 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
LLVM_ABI void setValue(Value *V)
static bool classof(const Value *V)
LLVM_ABI void setAssignId(DIAssignID *New)
Metadata * getRawAddress() const
DIExpression * getAddressExpression() const
LLVM_ABI Value * getAddress() const
static bool classof(const IntrinsicInst *I)
Metadata * getRawAddressExpression() const
Metadata * getRawAssignID() const
LLVM_ABI void setAddress(Value *V)
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
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...
LLVM_ABI iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
bool isValueOfVariable() const
Determine if this describes the value of a local variable.
LLVM_ABI void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)
LLVM_ABI 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
void setOperand(unsigned i, Value *v)
Metadata * getRawVariable() const
static bool classof(const IntrinsicInst *I)
LLVM_ABI 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.
Common base class for representing values projected from a statepoint.
LLVM_ABI 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)
LLVM_ABI Value * getBasePtr() const
unsigned getBasePtrIndex() const
The index into the associate statepoint's argument list which contains the base pointer of the pointe...
LLVM_ABI 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.
LLVM_ABI void setCallee(Value *Callee)
LLVM_ABI 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)
LLVM_ABI ConstantInt * getIndex() const
LLVM_ABI void setIndex(uint32_t Idx)
LLVM_ABI 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)
LLVM_ABI Value * getStep() const
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 LLVM_ABI 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.
bool isCommutableOperand(unsigned Op) const
Return true if the operand is commutable.
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)
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 setLength(uint64_t L)
void setDest(Value *Ptr)
Set the specified arguments of the instruction.
MaybeAlign getDestAlign() const
const Use & getLengthUse() const
unsigned getDestAddressSpace() const
std::optional< APInt > getLengthInBytes() const
This is the common base class for memset/memcpy/memmove.
ConstantInt * getVolatileCst() const
void setVolatile(Constant *V)
bool isForceInlined() const
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 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)
ConstantInt * getVolatileCst() const
void setVolatile(Constant *V)
Common base class for all memory transfer intrinsics.
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...
APInt getIdentity() const
Returns the identity value for this min/max intrinsic, such that minmax(X, Identity) == X.
bool isMin() const
Whether the intrinsic is a smin or a umin.
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 isMin(Intrinsic::ID ID)
Whether the intrinsic is a smin or umin.
static bool isSigned(Intrinsic::ID ID)
Whether the intrinsic is signed or unsigned.
static APInt getIdentity(Intrinsic::ID ID, unsigned NumBits)
Returns the identity value for this min/max intrinsic, such that minmax(X, Identity) == X.
bool isMax() const
Whether the intrinsic is a smax or a umax.
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 bits of the poi...
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)
LLVM_ABI iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
LLVM_ABI 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)
Class to represent struct types.
static bool classof(const IntrinsicInst *I)
static bool classof(const Value *V)
Type * getAllocationType() const
static bool classof(const IntrinsicInst *I)
iterator_range< op_iterator > indices()
unsigned getNumIndices() const
static unsigned getPointerOperandIndex()
static bool classof(const Value *V)
Value * getPointerOperand() const
Type * getResultElementType() const
Value * getIndexOperand(size_t Index) const
Type * getBaseType() const
The instances of the Type class are immutable: once they are created, they are never changed.
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
This is the common base class for vector predication intrinsics.
std::optional< unsigned > getFunctionalIntrinsicID() const
static bool classof(const Value *V)
static LLVM_ABI std::optional< unsigned > getMaskParamPos(Intrinsic::ID IntrinsicID)
LLVM_ABI bool canIgnoreVectorLengthParam() const
LLVM_ABI void setMaskParam(Value *)
static LLVM_ABI std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)
static LLVM_ABI std::optional< unsigned > getMemoryDataParamPos(Intrinsic::ID)
LLVM_ABI Value * getVectorLengthParam() const
static bool classof(const IntrinsicInst *I)
static LLVM_ABI std::optional< Intrinsic::ID > getFunctionalIntrinsicIDForVP(Intrinsic::ID ID)
LLVM_ABI void setVectorLengthParam(Value *)
static LLVM_ABI std::optional< unsigned > getVectorLengthParamPos(Intrinsic::ID IntrinsicID)
static LLVM_ABI Function * getOrInsertDeclarationForParams(Module *M, Intrinsic::ID, Type *ReturnType, ArrayRef< Value * > Params)
Declares a llvm.vp.
static LLVM_ABI std::optional< unsigned > getMemoryPointerParamPos(Intrinsic::ID)
static LLVM_ABI bool isVPIntrinsic(Intrinsic::ID)
LLVM_ABI Value * getMemoryDataParam() const
LLVM_ABI Value * getMemoryPointerParam() const
LLVM_ABI MaybeAlign getPointerAlignment() const
LLVM_ABI Value * getMaskParam() const
LLVM_ABI 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 LLVM_ABI bool isVPReduction(Intrinsic::ID ID)
LLVM_ABI unsigned getStartParamPos() const
LLVM_ABI unsigned getVectorParamPos() const
LLVM Value Representation.
Type * getType() const
All values are typed, get the type of this value.
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
Base class of all SIMD vector types.
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.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
auto dyn_cast_or_null(const Y &Val)
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.
constexpr uint64_t alignTo(uint64_t Size, Align A)
Returns a multiple of A needed to store Size bytes.
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
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.