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.");
101 assert(MD &&
"First operand of DbgVariableIntrinsic should be non-null.");
103 return AL->getArgs()[
OpIdx]->getValue();
108 "Attempted to get location operand from DbgVariableIntrinsic with none.");
110 assert(
OpIdx == 0 &&
"Operand Index must be 0 for a debug intrinsic with a "
111 "single location operand.");
112 return V->getValue();
126 auto ReplaceDbgAssignAddress = [
this, OldValue, NewValue]() ->
bool {
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");
157 for (
auto *VMD : Locations)
185 "NewExpr for debug variable intrinsic does not reference every "
186 "location operand.");
192 for (
auto *VMD : NewValues)
200 return Fragment->SizeInBits;
207 return V->getValue();
281 MD = MAV->getMetadata();
287std::optional<fp::ExceptionBehavior>
293 MD = MAV->getMetadata();
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);
613 if (EC.isScalable()) {
617 return VScaleFactor >= EC.getKnownMinValue();
618 return (EC.getKnownMinValue() == 1) &&
match(VLParam,
m_VScale());
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"
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:
865 assert(InvokeBB &&
"safepoints should have unique landingpads");
867 "safepoint block should be well formed");
897 M, llvm::Intrinsic::experimental_convergence_anchor);
905 M, llvm::Intrinsic::experimental_convergence_entry);
915 M, llvm::Intrinsic::experimental_convergence_loop);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
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.
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...
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.
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 * getInt64Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt32Ty(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.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
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 "ConstrainedFloating-Point Intrinsics" that take r...
LLVM_ABI bool isConstrainedFPIntrinsic(ID QID)
Returns true if the intrinsic ID is for one of the "ConstrainedFloating-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.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
static ValueAsMetadata * getAsMetadata(Value *V)
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...
OperandBundleDefT< Value * > OperandBundleDef
LLVM_ABI std::optional< fp::ExceptionBehavior > convertStrToExceptionBehavior(StringRef)
Returns a valid ExceptionBehavior enumerator when given a string valid as input in constrained intrin...
DWARFExpression::Operation Op
@ NearestTiesToEven
roundTiesToEven.
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
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.