38 case Intrinsic::objc_autorelease:
39 case Intrinsic::objc_autoreleasePoolPop:
40 case Intrinsic::objc_autoreleasePoolPush:
41 case Intrinsic::objc_autoreleaseReturnValue:
42 case Intrinsic::objc_copyWeak:
43 case Intrinsic::objc_destroyWeak:
44 case Intrinsic::objc_initWeak:
45 case Intrinsic::objc_loadWeak:
46 case Intrinsic::objc_loadWeakRetained:
47 case Intrinsic::objc_moveWeak:
48 case Intrinsic::objc_release:
49 case Intrinsic::objc_retain:
50 case Intrinsic::objc_retainAutorelease:
51 case Intrinsic::objc_retainAutoreleaseReturnValue:
52 case Intrinsic::objc_retainAutoreleasedReturnValue:
53 case Intrinsic::objc_retainBlock:
54 case Intrinsic::objc_storeStrong:
55 case Intrinsic::objc_storeWeak:
56 case Intrinsic::objc_unsafeClaimAutoreleasedReturnValue:
57 case Intrinsic::objc_retainedObject:
58 case Intrinsic::objc_unretainedObject:
59 case Intrinsic::objc_unretainedPointer:
60 case Intrinsic::objc_retain_autorelease:
61 case Intrinsic::objc_sync_enter:
62 case Intrinsic::objc_sync_exit:
76 assert(MD &&
"First operand of DbgVariableIntrinsic should be non-null.");
78 if (
auto *VAM = dyn_cast<ValueAsMetadata>(MD)) {
82 if (
auto *AL = dyn_cast<DIArgList>(MD))
101 assert(MD &&
"First operand of DbgVariableIntrinsic should be non-null.");
102 if (
auto *AL = dyn_cast<DIArgList>(MD))
103 return AL->getArgs()[
OpIdx]->getValue();
107 isa<ValueAsMetadata>(MD) &&
108 "Attempted to get location operand from DbgVariableIntrinsic with none.");
109 auto *V = cast<ValueAsMetadata>(MD);
110 assert(
OpIdx == 0 &&
"Operand Index must be 0 for a debug intrinsic with a "
111 "single location operand.");
112 return V->getValue();
116 return isa<MetadataAsValue>(V) ? dyn_cast<ValueAsMetadata>(
117 cast<MetadataAsValue>(V)->getMetadata())
126 auto ReplaceDbgAssignAddress = [
this, OldValue, NewValue]() ->
bool {
127 auto *DAI = dyn_cast<DbgAssignIntrinsic>(
this);
128 if (!DAI || OldValue != DAI->getAddress())
130 DAI->setAddress(NewValue);
133 bool DbgAssignAddrReplaced = ReplaceDbgAssignAddress();
134 (void)DbgAssignAddrReplaced;
136 assert(NewValue &&
"Values must be non-null");
138 auto OldIt =
find(Locations, OldValue);
139 if (OldIt == Locations.end()) {
140 if (AllowEmpty || DbgAssignAddrReplaced)
142 assert(DbgAssignAddrReplaced &&
143 "OldValue must be dbg.assign addr if unused in DIArgList");
147 assert(OldIt != Locations.end() &&
"OldValue must be a current location");
149 Value *NewOperand = isa<MetadataAsValue>(NewValue)
157 for (
auto *VMD : Locations)
166 Value *NewOperand = isa<MetadataAsValue>(NewValue)
185 "NewExpr for debug variable intrinsic does not reference every "
186 "location operand.");
192 for (
auto *VMD : NewValues)
200 return Fragment->SizeInBits;
206 if (
auto *V = dyn_cast<ValueAsMetadata>(MD))
207 return V->getValue();
231 return !
Addr || isa<UndefValue>(
Addr);
252 assert(isa<InstrProfCntrInstBase>(
this));
266 if (isa<InstrProfCallsite>(
this))
272 assert(isa<InstrProfCallsite>(
this));
279 auto *MAV = dyn_cast<MetadataAsValue>(
getArgOperand(NumOperands - 2));
281 MD = MAV->getMetadata();
282 if (!MD || !isa<MDString>(MD))
287std::optional<fp::ExceptionBehavior>
291 auto *MAV = dyn_cast<MetadataAsValue>(
getArgOperand(NumOperands - 1));
293 MD = MAV->getMetadata();
294 if (!MD || !isa<MDString>(MD))
316 Metadata *MD = cast<MetadataAsValue>(
Op)->getMetadata();
317 if (!MD || !isa<MDString>(MD))
350 if (isa<ConstrainedFPCmpIntrinsic>(
this))
362 const auto *VT = cast<VectorType>(
T);
363 auto ElemCount = VT->getElementCount();
371 "Unexpected VP intrinsic without mask operand");
372 return GetVectorLengthOfType(
getType());
374 return GetVectorLengthOfType(VPMask->
getType());
399std::optional<unsigned>
401 switch (IntrinsicID) {
405#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
406 case Intrinsic::VPID: \
408#include "llvm/IR/VPIntrinsics.def"
412std::optional<unsigned>
414 switch (IntrinsicID) {
418#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
419 case Intrinsic::VPID: \
421#include "llvm/IR/VPIntrinsics.def"
428 std::optional<unsigned> PtrParamOpt =
430 assert(PtrParamOpt &&
"no pointer argument!");
441std::optional<unsigned>
446 case Intrinsic::vp_store:
447 case Intrinsic::vp_scatter:
448 case Intrinsic::experimental_vp_strided_store:
450 case Intrinsic::vp_load:
451 case Intrinsic::vp_load_ff:
452 case Intrinsic::vp_gather:
453 case Intrinsic::experimental_vp_strided_load:
470 case Intrinsic::vp_store:
471 case Intrinsic::vp_scatter:
472 case Intrinsic::experimental_vp_strided_store:
481#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
482 case Intrinsic::VPID: \
484#include "llvm/IR/VPIntrinsics.def"
490 return ::isVPIntrinsic(
ID);
494constexpr static std::optional<unsigned>
499#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
500#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) return Instruction::OPC;
501#define END_REGISTER_VP_INTRINSIC(VPID) break;
502#include "llvm/IR/VPIntrinsics.def"
507std::optional<unsigned>
509 return ::getFunctionalOpcodeForVP(
ID);
513constexpr static std::optional<Intrinsic::ID>
518#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
519#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) return Intrinsic::INTRIN;
520#define END_REGISTER_VP_INTRINSIC(VPID) break;
521#include "llvm/IR/VPIntrinsics.def"
526std::optional<Intrinsic::ID>
528 return ::getFunctionalIntrinsicIDForVP(
ID);
535#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
536#define VP_PROPERTY_NO_FUNCTIONAL return true;
537#define END_REGISTER_VP_INTRINSIC(VPID) break;
538#include "llvm/IR/VPIntrinsics.def"
545#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) \
546 static_assert(doesVPHaveNoFunctionalEquivalent(Intrinsic::VPID) || \
547 getFunctionalOpcodeForVP(Intrinsic::VPID) || \
548 getFunctionalIntrinsicIDForVP(Intrinsic::VPID));
549#include "llvm/IR/VPIntrinsics.def"
552std::optional<Intrinsic::ID>
557#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
558#define VP_PROPERTY_CONSTRAINEDFP(CID) return Intrinsic::CID;
559#define END_REGISTER_VP_INTRINSIC(VPID) break;
560#include "llvm/IR/VPIntrinsics.def"
570#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) break;
571#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) case Instruction::OPC:
572#define END_REGISTER_VP_INTRINSIC(VPID) return Intrinsic::VPID;
573#include "llvm/IR/VPIntrinsics.def"
585#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) break;
586#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) case Intrinsic::INTRIN:
587#define END_REGISTER_VP_INTRINSIC(VPID) return Intrinsic::VPID;
588#include "llvm/IR/VPIntrinsics.def"
594 return ::getForIntrinsic(Id);
598 using namespace PatternMatch;
613 if (EC.isScalable()) {
617 return VScaleFactor >= EC.getKnownMinValue();
618 return (EC.getKnownMinValue() == 1) &&
match(VLParam,
m_VScale());
622 const auto *VLConst = dyn_cast<ConstantInt>(VLParam);
626 uint64_t VLNum = VLConst->getZExtValue();
627 if (VLNum >= EC.getKnownMinValue())
639 Type *OverloadTy = Params[0]->getType();
647 case Intrinsic::vp_trunc:
648 case Intrinsic::vp_sext:
649 case Intrinsic::vp_zext:
650 case Intrinsic::vp_fptoui:
651 case Intrinsic::vp_fptosi:
652 case Intrinsic::vp_uitofp:
653 case Intrinsic::vp_sitofp:
654 case Intrinsic::vp_fptrunc:
655 case Intrinsic::vp_fpext:
656 case Intrinsic::vp_ptrtoint:
657 case Intrinsic::vp_inttoptr:
658 case Intrinsic::vp_lrint:
659 case Intrinsic::vp_llrint:
660 case Intrinsic::vp_cttz_elts:
662 M, VPID, {ReturnType, Params[0]->getType()});
664 case Intrinsic::vp_is_fpclass:
667 case Intrinsic::vp_merge:
668 case Intrinsic::vp_select:
671 case Intrinsic::vp_load:
673 M, VPID, {ReturnType, Params[0]->getType()});
675 case Intrinsic::vp_load_ff:
677 M, VPID, {ReturnType->getStructElementType(0), Params[0]->
getType()});
679 case Intrinsic::experimental_vp_strided_load:
681 M, VPID, {ReturnType, Params[0]->getType(), Params[1]->
getType()});
683 case Intrinsic::vp_gather:
685 M, VPID, {ReturnType, Params[0]->getType()});
687 case Intrinsic::vp_store:
689 M, VPID, {Params[0]->getType(), Params[1]->
getType()});
691 case Intrinsic::experimental_vp_strided_store:
694 {Params[0]->getType(), Params[1]->
getType(), Params[2]->
getType()});
696 case Intrinsic::vp_scatter:
698 M, VPID, {Params[0]->getType(), Params[1]->
getType()});
700 case Intrinsic::experimental_vp_splat:
704 assert(VPFunc &&
"Could not declare VP intrinsic");
710 case Intrinsic::vp_reduce_add:
711 case Intrinsic::vp_reduce_mul:
712 case Intrinsic::vp_reduce_and:
713 case Intrinsic::vp_reduce_or:
714 case Intrinsic::vp_reduce_xor:
715 case Intrinsic::vp_reduce_smax:
716 case Intrinsic::vp_reduce_smin:
717 case Intrinsic::vp_reduce_umax:
718 case Intrinsic::vp_reduce_umin:
719 case Intrinsic::vp_reduce_fmax:
720 case Intrinsic::vp_reduce_fmin:
721 case Intrinsic::vp_reduce_fmaximum:
722 case Intrinsic::vp_reduce_fminimum:
723 case Intrinsic::vp_reduce_fadd:
724 case Intrinsic::vp_reduce_fmul:
742 case Intrinsic::vp_fcmp:
743 case Intrinsic::vp_icmp:
752#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
753#define VP_PROPERTY_BINARYOP return true;
754#define END_REGISTER_VP_INTRINSIC(VPID) break;
755#include "llvm/IR/VPIntrinsics.def"
761 Metadata *MD = cast<MetadataAsValue>(
Op)->getMetadata();
762 if (!MD || !isa<MDString>(MD))
793std::optional<unsigned>
800std::optional<unsigned>
809 case Intrinsic::uadd_with_overflow:
810 case Intrinsic::sadd_with_overflow:
811 case Intrinsic::uadd_sat:
812 case Intrinsic::sadd_sat:
813 return Instruction::Add;
814 case Intrinsic::usub_with_overflow:
815 case Intrinsic::ssub_with_overflow:
816 case Intrinsic::usub_sat:
817 case Intrinsic::ssub_sat:
818 return Instruction::Sub;
819 case Intrinsic::umul_with_overflow:
820 case Intrinsic::smul_with_overflow:
821 return Instruction::Mul;
829 case Intrinsic::sadd_with_overflow:
830 case Intrinsic::ssub_with_overflow:
831 case Intrinsic::smul_with_overflow:
832 case Intrinsic::sadd_sat:
833 case Intrinsic::ssub_sat:
849 if (isa<UndefValue>(Token))
853 if (isa<ConstantTokenNone>(Token))
858 if (!isa<LandingPadInst>(Token))
859 return cast<GCStatepointInst>(Token);
863 cast<Instruction>(Token)->
getParent()->getUniquePredecessor();
865 assert(InvokeBB &&
"safepoints should have unique landingpads");
867 "safepoint block should be well formed");
874 if (isa<UndefValue>(Statepoint))
877 auto *GCInst = cast<GCStatepointInst>(Statepoint);
885 if (isa<UndefValue>(Statepoint))
888 auto *GCInst = cast<GCStatepointInst>(Statepoint);
897 M, llvm::Intrinsic::experimental_convergence_anchor);
899 return cast<ConvergenceControlInst>(Call);
905 M, llvm::Intrinsic::experimental_convergence_entry);
907 return cast<ConvergenceControlInst>(Call);
915 M, llvm::Intrinsic::experimental_convergence_loop);
919 return cast<ConvergenceControlInst>(Call);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
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
Module.h This file contains the declarations for the Module class.
static constexpr std::optional< Intrinsic::ID > getFunctionalIntrinsicIDForVP(Intrinsic::ID ID)
static constexpr std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)
static ICmpInst::Predicate getIntPredicateFromMD(const Value *Op)
static constexpr bool doesVPHaveNoFunctionalEquivalent(Intrinsic::ID ID)
constexpr bool isVPIntrinsic(Intrinsic::ID ID)
static constexpr Intrinsic::ID getForIntrinsic(Intrinsic::ID Id)
static FCmpInst::Predicate getFPPredicateFromMD(const Value *Op)
MachineInstr unsigned OpIdx
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
LLVM Basic Block Representation.
LLVM_ABI const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
const Function * getParent() const
Return the enclosing method, or null if none.
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
LLVM_ABI const Module * getModule() const
Return the module owning the function this basic block belongs to, or nullptr if the function does no...
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.
LLVM_ABI Instruction::BinaryOps getBinaryOp() const
Returns the binary operation underlying the intrinsic.
MaybeAlign getParamAlign(unsigned ArgNo) const
Extract the alignment for a call or parameter (0=unknown).
Value * getArgOperand(unsigned i) const
void setArgOperand(unsigned i, Value *v)
unsigned arg_size() const
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
@ FCMP_OEQ
0 0 0 1 True if ordered and equal
@ ICMP_SLT
signed less than
@ ICMP_SLE
signed less or equal
@ FCMP_OLT
0 1 0 0 True if ordered and less than
@ FCMP_ULE
1 1 0 1 True if unordered, less than, or equal
@ FCMP_OGT
0 0 1 0 True if ordered and greater than
@ FCMP_OGE
0 0 1 1 True if ordered and greater than or equal
@ ICMP_UGE
unsigned greater or equal
@ ICMP_UGT
unsigned greater than
@ ICMP_SGT
signed greater than
@ FCMP_ULT
1 1 0 0 True if unordered or less than
@ FCMP_ONE
0 1 1 0 True if ordered and operands are unequal
@ FCMP_UEQ
1 0 0 1 True if unordered or equal
@ ICMP_ULT
unsigned less than
@ FCMP_UGT
1 0 1 0 True if unordered or greater than
@ FCMP_OLE
0 1 0 1 True if ordered and less than or equal
@ FCMP_ORD
0 1 1 1 True if ordered (no nans)
@ ICMP_SGE
signed greater or equal
@ FCMP_UNE
1 1 1 0 True if unordered or not equal
@ ICMP_ULE
unsigned less or equal
@ FCMP_UGE
1 0 1 1 True if unordered, greater than, or equal
@ FCMP_UNO
1 0 0 0 True if unordered: isnan(X) | isnan(Y)
This is the shared class of boolean and integer constants.
LLVM_ABI FCmpInst::Predicate getPredicate() const
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)
LLVM_ABI bool isDefaultFPEnvironment() const
Represents calls to the llvm.experimintal.convergence.* intrinsics.
static LLVM_ABI ConvergenceControlInst * CreateAnchor(BasicBlock &BB)
static LLVM_ABI ConvergenceControlInst * CreateLoop(BasicBlock &BB, ConvergenceControlInst *Parent)
static LLVM_ABI ConvergenceControlInst * CreateEntry(BasicBlock &BB)
static LLVM_ABI DIArgList * get(LLVMContext &Context, ArrayRef< ValueAsMetadata * > Args)
LLVM_ABI std::optional< uint64_t > getSizeInBits() const
Determines the size of the variable's type.
This class represents an Operation in the Expression.
LLVM_ABI void setValue(Value *V)
LLVM_ABI void setAssignId(DIAssignID *New)
LLVM_ABI void setKillAddress()
Kill the address component.
LLVM_ABI bool isKillAddress() const
Check whether this kills the address component.
Metadata * getRawAddress() const
LLVM_ABI Value * getAddress() const
LLVM_ABI void setAddress(Value *V)
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 void addVariableLocationOps(ArrayRef< Value * > NewValues, DIExpression *NewExpr)
Adding a new location operand will always result in this intrinsic using an ArgList,...
LLVM_ABI void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)
LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const
DILocalVariable * getVariable() const
unsigned getNumVariableLocationOps() const
void setOperand(unsigned i, Value *v)
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)
RawLocationWrapper getWrappedLocation() const
LLVM_ABI const Value * getStatepoint() const
The statepoint with which this gc.relocate is associated.
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...
LLVM_ABI void setCallee(Value *Callee)
LLVM_ABI Value * getCallee() const
LLVM_ABI ConstantInt * getIndex() const
LLVM_ABI void setIndex(uint32_t Idx)
LLVM_ABI ConstantInt * getNumCounters() const
static bool classof(const IntrinsicInst *I)
LLVM_ABI Value * getStep() const
static bool classof(const IntrinsicInst *I)
LLVM_ABI const Module * getModule() const
Return the module owning the function this instruction belongs to or nullptr it the function does not...
A wrapper class for inspecting calls to intrinsic functions.
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.
Intrinsic::ID getIntrinsicID() const
Return the intrinsic ID of this intrinsic.
This is an important class for using LLVM in a threaded context.
A Module instance is used to store all the information related to an LLVM module.
A container for an operand bundle being viewed as a set of values rather than a set of uses.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
Metadata * getRawLocation() const
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
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
The instances of the Type class are immutable: once they are created, they are never changed.
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
static LLVM_ABI UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
unsigned getNumOperands() const
static LLVM_ABI bool isVPBinOp(Intrinsic::ID ID)
static LLVM_ABI bool isVPCast(Intrinsic::ID ID)
static LLVM_ABI bool isVPCmp(Intrinsic::ID ID)
LLVM_ABI CmpInst::Predicate getPredicate() const
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 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 Intrinsic::ID getForOpcode(unsigned OC)
The llvm.vp.* intrinsics for this instruction Opcode.
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
static LLVM_ABI Intrinsic::ID getForIntrinsic(Intrinsic::ID Id)
The llvm.vp.
LLVM_ABI Value * getMemoryPointerParam() const
LLVM_ABI MaybeAlign getPointerAlignment() const
LLVM_ABI Value * getMaskParam() const
LLVM_ABI ElementCount getStaticVectorLength() const
static LLVM_ABI std::optional< Intrinsic::ID > getConstrainedIntrinsicIDForVP(Intrinsic::ID ID)
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 LLVMContext & getContext() const
All values hold a context through their type.
A range adaptor for a pair of iterators.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
LLVM_ABI Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > Tys={})
Look up the Function declaration of the intrinsic id in the Module M.
LLVM_ABI bool hasConstrainedFPRoundingModeOperand(ID QID)
Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics" that take ...
LLVM_ABI bool isConstrainedFPIntrinsic(ID QID)
Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics".
bool match(Val *V, const Pattern &P)
class_match< ConstantInt > m_ConstantInt()
Match an arbitrary ConstantInt and ignore it.
IntrinsicID_match m_VScale()
Matches a call to llvm.vscale().
BinaryOp_match< LHS, RHS, Instruction::Mul > m_Mul(const LHS &L, const RHS &R)
@ ebIgnore
This corresponds to "fpexcept.ignore".
This is an optimization pass for GlobalISel generic memory operations.
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
static ValueAsMetadata * getAsMetadata(Value *V)
LLVM_ABI std::optional< fp::ExceptionBehavior > convertStrToExceptionBehavior(StringRef)
Returns a valid ExceptionBehavior enumerator when given a string valid as input in constrained intrin...
@ NearestTiesToEven
roundTiesToEven.
LLVM_ABI std::optional< RoundingMode > convertStrToRoundingMode(StringRef)
Returns a valid RoundingMode enumerator when given a string that is valid as input in constrained int...
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.