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);
241 assert(
Name.starts_with(
"llvm.") &&
"Unexpected intrinsic prefix");
251 const char *
const *
Low = NameTable.
begin();
252 const char *
const *
High = NameTable.
end();
253 const char *
const *LastLow =
Low;
255 size_t CmpStart = CmpEnd;
256 CmpEnd =
Name.find(
'.', CmpStart + 1);
258 auto Cmp = [CmpStart, CmpEnd](
const char *
LHS,
const char *
RHS) {
259 return strncmp(
LHS + CmpStart,
RHS + CmpStart, CmpEnd - CmpStart) < 0;
267 if (LastLow == NameTable.
end())
270 if (
Name == NameFound ||
271 (
Name.starts_with(NameFound) &&
Name[NameFound.
size()] ==
'.'))
272 return LastLow - NameTable.
begin();
298 if (isa<InstrProfCallsite>(
this))
306 auto *MAV = dyn_cast<MetadataAsValue>(
getArgOperand(NumOperands - 2));
308 MD = MAV->getMetadata();
309 if (!MD || !isa<MDString>(MD))
314std::optional<fp::ExceptionBehavior>
318 auto *MAV = dyn_cast<MetadataAsValue>(
getArgOperand(NumOperands - 1));
320 MD = MAV->getMetadata();
321 if (!MD || !isa<MDString>(MD))
343 Metadata *MD = cast<MetadataAsValue>(
Op)->getMetadata();
344 if (!MD || !isa<MDString>(MD))
372#define INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC) \
373 case Intrinsic::INTRINSIC: \
375#include "llvm/IR/ConstrainedOps.def"
383#define INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC) \
384 case Intrinsic::INTRINSIC: \
386#include "llvm/IR/ConstrainedOps.def"
391 switch (
I->getIntrinsicID()) {
392#define INSTRUCTION(NAME, NARGS, ROUND_MODE, INTRINSIC) \
393 case Intrinsic::INTRINSIC:
394#include "llvm/IR/ConstrainedOps.def"
403 const auto *VT = cast<VectorType>(
T);
404 auto ElemCount = VT->getElementCount();
412 "Unexpected VP intrinsic without mask operand");
413 return GetVectorLengthOfType(
getType());
415 return GetVectorLengthOfType(VPMask->
getType());
440std::optional<unsigned>
442 switch (IntrinsicID) {
446#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
447 case Intrinsic::VPID: \
449#include "llvm/IR/VPIntrinsics.def"
453std::optional<unsigned>
455 switch (IntrinsicID) {
459#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
460 case Intrinsic::VPID: \
462#include "llvm/IR/VPIntrinsics.def"
469 std::optional<unsigned> PtrParamOpt =
471 assert(PtrParamOpt &&
"no pointer argument!");
482std::optional<unsigned>
487#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
488#define VP_PROPERTY_MEMOP(POINTERPOS, ...) return POINTERPOS;
489#define END_REGISTER_VP_INTRINSIC(VPID) break;
490#include "llvm/IR/VPIntrinsics.def"
507#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
508#define VP_PROPERTY_MEMOP(POINTERPOS, DATAPOS) return DATAPOS;
509#define END_REGISTER_VP_INTRINSIC(VPID) break;
510#include "llvm/IR/VPIntrinsics.def"
519#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \
520 case Intrinsic::VPID: \
522#include "llvm/IR/VPIntrinsics.def"
528 return ::isVPIntrinsic(
ID);
532constexpr static std::optional<unsigned>
537#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
538#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) return Instruction::OPC;
539#define END_REGISTER_VP_INTRINSIC(VPID) break;
540#include "llvm/IR/VPIntrinsics.def"
545std::optional<unsigned>
547 return ::getFunctionalOpcodeForVP(
ID);
551constexpr static std::optional<Intrinsic::ID>
556#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
557#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) return Intrinsic::INTRIN;
558#define END_REGISTER_VP_INTRINSIC(VPID) break;
559#include "llvm/IR/VPIntrinsics.def"
564std::optional<Intrinsic::ID>
566 return ::getFunctionalIntrinsicIDForVP(
ID);
573#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
574#define VP_PROPERTY_NO_FUNCTIONAL return true;
575#define END_REGISTER_VP_INTRINSIC(VPID) break;
576#include "llvm/IR/VPIntrinsics.def"
583#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) \
584 static_assert(doesVPHaveNoFunctionalEquivalent(Intrinsic::VPID) || \
585 getFunctionalOpcodeForVP(Intrinsic::VPID) || \
586 getFunctionalIntrinsicIDForVP(Intrinsic::VPID));
587#include "llvm/IR/VPIntrinsics.def"
590std::optional<Intrinsic::ID>
595#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
596#define VP_PROPERTY_CONSTRAINEDFP(HASRND, HASEXCEPT, CID) return Intrinsic::CID;
597#define END_REGISTER_VP_INTRINSIC(VPID) break;
598#include "llvm/IR/VPIntrinsics.def"
608#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) break;
609#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) case Instruction::OPC:
610#define END_REGISTER_VP_INTRINSIC(VPID) return Intrinsic::VPID;
611#include "llvm/IR/VPIntrinsics.def"
617 using namespace PatternMatch;
632 if (EC.isScalable()) {
636 return VScaleFactor >= EC.getKnownMinValue();
637 return (EC.getKnownMinValue() == 1) &&
match(VLParam,
m_VScale());
641 const auto *VLConst = dyn_cast<ConstantInt>(VLParam);
645 uint64_t VLNum = VLConst->getZExtValue();
646 if (VLNum >= EC.getKnownMinValue())
659 Type *OverloadTy = Params[0]->getType();
667 case Intrinsic::vp_trunc:
668 case Intrinsic::vp_sext:
669 case Intrinsic::vp_zext:
670 case Intrinsic::vp_fptoui:
671 case Intrinsic::vp_fptosi:
672 case Intrinsic::vp_uitofp:
673 case Intrinsic::vp_sitofp:
674 case Intrinsic::vp_fptrunc:
675 case Intrinsic::vp_fpext:
676 case Intrinsic::vp_ptrtoint:
677 case Intrinsic::vp_inttoptr:
678 case Intrinsic::vp_lrint:
679 case Intrinsic::vp_llrint:
683 case Intrinsic::vp_is_fpclass:
686 case Intrinsic::vp_merge:
687 case Intrinsic::vp_select:
690 case Intrinsic::vp_load:
692 M, VPID, {ReturnType, Params[0]->getType()});
694 case Intrinsic::experimental_vp_strided_load:
696 M, VPID, {ReturnType, Params[0]->getType(), Params[1]->
getType()});
698 case Intrinsic::vp_gather:
700 M, VPID, {ReturnType, Params[0]->getType()});
702 case Intrinsic::vp_store:
704 M, VPID, {Params[0]->getType(), Params[1]->
getType()});
706 case Intrinsic::experimental_vp_strided_store:
709 {Params[0]->getType(), Params[1]->
getType(), Params[2]->
getType()});
711 case Intrinsic::vp_scatter:
713 M, VPID, {Params[0]->getType(), Params[1]->
getType()});
716 assert(VPFunc &&
"Could not declare VP intrinsic");
724#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
725#define VP_PROPERTY_REDUCTION(STARTPOS, ...) return true;
726#define END_REGISTER_VP_INTRINSIC(VPID) break;
727#include "llvm/IR/VPIntrinsics.def"
736#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
737#define VP_PROPERTY_CASTOP return true;
738#define END_REGISTER_VP_INTRINSIC(VPID) break;
739#include "llvm/IR/VPIntrinsics.def"
748#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
749#define VP_PROPERTY_CMP(CCPOS, ...) return true;
750#define END_REGISTER_VP_INTRINSIC(VPID) break;
751#include "llvm/IR/VPIntrinsics.def"
760#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
761#define VP_PROPERTY_BINARYOP return true;
762#define END_REGISTER_VP_INTRINSIC(VPID) break;
763#include "llvm/IR/VPIntrinsics.def"
769 Metadata *MD = cast<MetadataAsValue>(
Op)->getMetadata();
770 if (!MD || !isa<MDString>(MD))
788 std::optional<unsigned> CCArgIdx;
792#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
793#define VP_PROPERTY_CMP(CCPOS, ISFP) \
797#define END_REGISTER_VP_INTRINSIC(VPID) break;
798#include "llvm/IR/VPIntrinsics.def"
800 assert(CCArgIdx &&
"Unexpected vector-predicated comparison");
813std::optional<unsigned>
816#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
817#define VP_PROPERTY_REDUCTION(STARTPOS, VECTORPOS) return VECTORPOS;
818#define END_REGISTER_VP_INTRINSIC(VPID) break;
819#include "llvm/IR/VPIntrinsics.def"
826std::optional<unsigned>
829#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:
830#define VP_PROPERTY_REDUCTION(STARTPOS, VECTORPOS) return STARTPOS;
831#define END_REGISTER_VP_INTRINSIC(VPID) break;
832#include "llvm/IR/VPIntrinsics.def"
841 case Intrinsic::uadd_with_overflow:
842 case Intrinsic::sadd_with_overflow:
843 case Intrinsic::uadd_sat:
844 case Intrinsic::sadd_sat:
845 return Instruction::Add;
846 case Intrinsic::usub_with_overflow:
847 case Intrinsic::ssub_with_overflow:
848 case Intrinsic::usub_sat:
849 case Intrinsic::ssub_sat:
850 return Instruction::Sub;
851 case Intrinsic::umul_with_overflow:
852 case Intrinsic::smul_with_overflow:
853 return Instruction::Mul;
861 case Intrinsic::sadd_with_overflow:
862 case Intrinsic::ssub_with_overflow:
863 case Intrinsic::smul_with_overflow:
864 case Intrinsic::sadd_sat:
865 case Intrinsic::ssub_sat:
881 if (isa<UndefValue>(Token))
885 if (isa<ConstantTokenNone>(Token))
890 if (!isa<LandingPadInst>(Token))
891 return cast<GCStatepointInst>(Token);
895 cast<Instruction>(Token)->
getParent()->getUniquePredecessor();
897 assert(InvokeBB &&
"safepoints should have unique landingpads");
899 "safepoint block should be well formed");
906 if (isa<UndefValue>(Statepoint))
909 auto *GCInst = cast<GCStatepointInst>(Statepoint);
917 if (isa<UndefValue>(Statepoint))
920 auto *GCInst = cast<GCStatepointInst>(Statepoint);
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
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 FCmpInst::Predicate getFPPredicateFromMD(const Value *Op)
Module.h This file contains the declarations for the Module class.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
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.
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...
unsigned getNoWrapKind() const
Returns one of OBO::NoSignedWrap or OBO::NoUnsignedWrap.
bool isSigned() const
Whether the intrinsic is signed or unsigned.
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
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.
FCmpInst::Predicate getPredicate() const
std::optional< fp::ExceptionBehavior > getExceptionBehavior() const
std::optional< RoundingMode > getRoundingMode() const
static bool classof(const IntrinsicInst *I)
bool isDefaultFPEnvironment() const
static DIArgList * get(LLVMContext &Context, ArrayRef< ValueAsMetadata * > Args)
std::optional< uint64_t > getSizeInBits() const
Determines the size of the variable's type.
This class represents an Operation in the Expression.
void setAssignId(DIAssignID *New)
void setKillAddress()
Kill the address component.
bool isKillAddress() const
Check whether this kills the address component.
Metadata * getRawAddress() const
Value * getAddress() const
void setAddress(Value *V)
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,...
void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)
Value * getVariableLocationOp(unsigned OpIdx) const
DILocalVariable * getVariable() const
unsigned getNumVariableLocationOps() const
void setOperand(unsigned i, Value *v)
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
const Value * getStatepoint() const
The statepoint with which this gc.relocate is associated.
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...
Value * getCallee() const
ConstantInt * getIndex() const
ConstantInt * getNumCounters() const
static bool classof(const IntrinsicInst *I)
static bool classof(const IntrinsicInst *I)
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 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.
Metadata * getRawLocation() const
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
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
constexpr size_t size() const
size - Get the string size.
static constexpr size_t npos
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 IntegerType * getInt64Ty(LLVMContext &C)
static UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
unsigned getNumOperands() const
static bool isVPBinOp(Intrinsic::ID ID)
static bool isVPCast(Intrinsic::ID ID)
static bool isVPCmp(Intrinsic::ID ID)
CmpInst::Predicate getPredicate() const
static Function * getDeclarationForParams(Module *M, Intrinsic::ID, Type *ReturnType, ArrayRef< Value * > Params)
Declares a llvm.vp.
static std::optional< unsigned > getMaskParamPos(Intrinsic::ID IntrinsicID)
bool canIgnoreVectorLengthParam() const
void setMaskParam(Value *)
static std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)
static std::optional< unsigned > getMemoryDataParamPos(Intrinsic::ID)
Value * getVectorLengthParam() const
static 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 std::optional< unsigned > getMemoryPointerParamPos(Intrinsic::ID)
static bool isVPIntrinsic(Intrinsic::ID)
Value * getMemoryDataParam() const
Value * getMemoryPointerParam() const
MaybeAlign getPointerAlignment() const
Value * getMaskParam() const
ElementCount getStaticVectorLength() const
static std::optional< Intrinsic::ID > getConstrainedIntrinsicIDForVP(Intrinsic::ID ID)
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.
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.
int lookupLLVMIntrinsicByName(ArrayRef< const char * > NameTable, StringRef Name)
Looks up Name in NameTable via binary search.
Function * getDeclaration(Module *M, ID id, ArrayRef< Type * > Tys=std::nullopt)
Create or insert an LLVM Function declaration for an intrinsic, and return it.
bool match(Val *V, const Pattern &P)
class_match< ConstantInt > m_ConstantInt()
Match an arbitrary ConstantInt and ignore it.
BinaryOp_match< LHS, RHS, Instruction::Mul > m_Mul(const LHS &L, const RHS &R)
VScaleVal_match m_VScale()
@ ebIgnore
This corresponds to "fpexcept.ignore".
This is an optimization pass for GlobalISel generic memory operations.
@ Low
Lower the current thread's priority such that it does not affect foreground tasks significantly.
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)
std::optional< fp::ExceptionBehavior > convertStrToExceptionBehavior(StringRef)
Returns a valid ExceptionBehavior enumerator when given a string valid as input in constrained intrin...
@ NearestTiesToEven
roundTiesToEven.
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.