44 "jump-is-expensive",
cl::init(
false),
45 cl::desc(
"Do not create extra branches to split comparison logic."),
50 cl::desc(
"Set minimum number of entries to use a jump table."));
54 cl::desc(
"Set maximum size of jump tables; zero for no limit."));
62 "min-predictable-branch",
cl::init(99),
63 cl::desc(
"Minimum percentage (0-100) that a condition must be either true "
64 "or false to assume that the condition is predictable"),
734 #define OP_TO_LIBCALL(Name, Enum) \
736 switch (VT.SimpleTy) { \
738 return UNKNOWN_LIBCALL; \
772 switch (ElementSize) {
835 UseUnderscoreSetJmp =
false;
836 UseUnderscoreLongJmp =
false;
837 HasMultipleConditionRegisters =
false;
838 HasExtractBitsInsn =
false;
843 HasFloatingPointExceptions =
true;
844 StackPointerRegisterToSaveRestore = 0;
850 JumpBufAlignment = 0;
851 MinFunctionAlignment = 0;
852 PrefFunctionAlignment = 0;
853 PrefLoopAlignment = 0;
855 MinStackArgumentAlignment = 1;
858 MaxAtomicSizeInBitsSupported = 1024;
860 MinCmpXchgSizeInBits = 0;
871 memset(OpActions, 0,
sizeof(OpActions));
872 memset(LoadExtActions, 0,
sizeof(LoadExtActions));
873 memset(TruncStoreActions, 0,
sizeof(TruncStoreActions));
874 memset(IndexedModeActions, 0,
sizeof(IndexedModeActions));
875 memset(CondCodeActions, 0,
sizeof(CondCodeActions));
878 std::end(TargetDAGCombineArray), 0);
1002 JumpIsExpensive = isExpensive;
1016 "Promote may not follow Expand or Promote");
1034 assert(NVT != VT &&
"Unable to round integer VT");
1035 LegalizeKind NextStep = getTypeConversion(Context, NVT);
1080 EVT OldEltVT = EltVT;
1085 .getRoundIntegerType(Context);
1119 if (LargerVector ==
MVT())
1139 unsigned &NumIntermediates,
1146 unsigned NumVectorRegs = 1;
1151 NumVectorRegs = NumElts;
1159 NumVectorRegs <<= 1;
1162 NumIntermediates = NumVectorRegs;
1167 IntermediateVT = NewVT;
1176 RegisterVT = DestVT;
1177 if (
EVT(DestVT).bitsLT(NewVT))
1182 return NumVectorRegs;
1218 for(
unsigned OperIdx = 0; OperIdx != MI->
getNumOperands(); ++OperIdx) {
1229 for (
unsigned i = 0;
i < OperIdx; ++
i)
1255 assert(MIB->
mayLoad() &&
"Folded a stackmap use to a non-load!");
1261 if (MI->
getOpcode() == TargetOpcode::STATEPOINT) {
1285 std::pair<const TargetRegisterClass *, uint8_t>
1290 return std::make_pair(RC, 0);
1299 for (
int i = SuperRegRC.find_first();
i >= 0;
i = SuperRegRC.find_next(
i)) {
1308 return std::make_pair(BestRC, 1);
1316 "Too many value types for ValueTypeActions to hold!");
1320 NumRegistersForVT[
i] = 1;
1328 for (; RegClassForVT[LargestIntReg] ==
nullptr; --LargestIntReg)
1329 assert(LargestIntReg !=
MVT::i1 &&
"No integer registers defined!");
1333 for (
unsigned ExpandedReg = LargestIntReg + 1;
1335 NumRegistersForVT[ExpandedReg] = 2*NumRegistersForVT[ExpandedReg-1];
1344 unsigned LegalIntReg = LargestIntReg;
1345 for (
unsigned IntReg = LargestIntReg - 1;
1349 LegalIntReg = IntReg;
1351 RegisterTypeForVT[IntReg] = TransformToType[IntReg] =
1418 bool IsLegalWiderType =
false;
1420 switch (PreferredAction) {
1430 TransformToType[
i] = SVT;
1431 RegisterTypeForVT[
i] = SVT;
1432 NumRegistersForVT[
i] = 1;
1434 IsLegalWiderType =
true;
1438 if (IsLegalWiderType)
1447 TransformToType[
i] = SVT;
1448 RegisterTypeForVT[
i] = SVT;
1449 NumRegistersForVT[
i] = 1;
1451 IsLegalWiderType =
true;
1455 if (IsLegalWiderType)
1462 unsigned NumIntermediates;
1464 NumIntermediates, RegisterVT,
this);
1465 RegisterTypeForVT[
i] = RegisterVT;
1480 TransformToType[
i] = NVT;
1499 RepRegClassForVT[
i] =
RRC;
1500 RepRegClassCostForVT[
i] = Cost;
1524 EVT &IntermediateVT,
1525 unsigned &NumIntermediates,
1526 MVT &RegisterVT)
const {
1538 IntermediateVT = RegisterEVT;
1540 NumIntermediates = 1;
1548 unsigned NumVectorRegs = 1;
1553 NumVectorRegs = NumElts;
1562 NumVectorRegs <<= 1;
1565 NumIntermediates = NumVectorRegs;
1570 IntermediateVT = NewVT;
1573 RegisterVT = DestVT;
1580 if (
EVT(DestVT).bitsLT(NewVT))
1585 return NumVectorRegs;
1597 unsigned NumValues = ValueVTs.
size();
1598 if (NumValues == 0)
return;
1600 for (
unsigned j = 0, f = NumValues; j != f; ++j) {
1601 EVT VT = ValueVTs[j];
1633 for (
unsigned i = 0;
i < NumParts; ++
i)
1659 if (Fast !=
nullptr)
1677 enum InstructionOpcodes {
1678 #define HANDLE_INST(NUM, OPCODE, CLASS) OPCODE = NUM,
1679 #define LAST_OTHER_INST(NUM) InstructionOpcodesCount = NUM
1680 #include "llvm/IR/Instruction.def"
1682 switch (static_cast<InstructionOpcodes>(Opcode)) {
1686 case IndirectBr:
return 0;
1687 case Invoke:
return 0;
1688 case Resume:
return 0;
1689 case Unreachable:
return 0;
1690 case CleanupRet:
return 0;
1691 case CatchRet:
return 0;
1692 case CatchPad:
return 0;
1693 case CatchSwitch:
return 0;
1694 case CleanupPad:
return 0;
1713 case Alloca:
return 0;
1716 case GetElementPtr:
return 0;
1717 case Fence:
return 0;
1718 case AtomicCmpXchg:
return 0;
1719 case AtomicRMW:
return 0;
1736 case Call:
return 0;
1738 case UserOp1:
return 0;
1739 case UserOp2:
return 0;
1740 case VAArg:
return 0;
1746 case LandingPad:
return 0;
1772 if (MTy == LK.second)
1781 bool UseTLS)
const {
1785 const char *UnsafeStackPtrVar =
"__safestack_unsafe_stack_ptr";
1786 auto UnsafeStackPtr =
1787 dyn_cast_or_null<GlobalVariable>(M->
getNamedValue(UnsafeStackPtrVar));
1791 if (!UnsafeStackPtr) {
1792 auto TLSModel = UseTLS ?
1800 UnsafeStackPtrVar,
nullptr, TLSModel);
1803 if (UnsafeStackPtr->getValueType() != StackPtrTy)
1805 if (UseTLS != UnsafeStackPtr->isThreadLocal())
1807 (UseTLS ?
"" :
"not ") +
"be thread-local");
1809 return UnsafeStackPtr;
1833 unsigned AS)
const {
1921 StringRef RecipAttrName =
"reciprocal-estimates";
1935 Name += IsSqrt ?
"sqrt" :
"div";
1942 "Unexpected FP type for reciprocal estimate");
1954 const char RefStepToken =
':';
1955 Position = In.
find(RefStepToken);
1962 if (RefStepString.
size() == 1) {
1963 char RefStepChar = RefStepString[0];
1964 if (RefStepChar >=
'0' && RefStepChar <=
'9') {
1965 Value = RefStepChar -
'0';
1976 if (Override.
empty())
1977 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
1981 unsigned NumArgs = OverrideVector.
size();
1991 Override = Override.
substr(0, RefPos);
1995 if (Override ==
"all")
1999 if (Override ==
"none")
2000 return TargetLoweringBase::ReciprocalEstimate::Disabled;
2003 if (Override ==
"default")
2004 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
2009 std::string VTNameNoSize = VTName;
2010 VTNameNoSize.pop_back();
2011 static const char DisabledPrefix =
'!';
2013 for (
StringRef RecipType : OverrideVector) {
2017 RecipType = RecipType.substr(0, RefPos);
2020 bool IsDisabled = RecipType[0] == DisabledPrefix;
2022 RecipType = RecipType.substr(1);
2024 if (RecipType.equals(VTName) || RecipType.equals(VTNameNoSize))
2025 return IsDisabled ? TargetLoweringBase::ReciprocalEstimate::Disabled
2029 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
2036 if (Override.
empty())
2037 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
2041 unsigned NumArgs = OverrideVector.
size();
2050 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
2053 Override = Override.
substr(0, RefPos);
2054 assert(Override !=
"none" &&
2055 "Disabled reciprocals, but specifed refinement steps?");
2058 if (Override ==
"all" || Override ==
"default")
2064 std::string VTNameNoSize = VTName;
2065 VTNameNoSize.pop_back();
2067 for (
StringRef RecipType : OverrideVector) {
2073 RecipType = RecipType.substr(0, RefPos);
2074 if (RecipType.equals(VTName) || RecipType.equals(VTNameNoSize))
2078 return TargetLoweringBase::ReciprocalEstimate::Unspecified;
EVT getRoundIntegerType(LLVMContext &Context) const
getRoundIntegerType - Rounds the bit-width of the given integer EVT up to the nearest power of two (a...
BITCAST - This operator converts between integer, vector and FP values, as if the value was stored to...
X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type down to the precision of the ...
static MVT getIntegerVT(unsigned BitWidth)
void push_back(const T &Elt)
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
A parsed version of the target data layout string in and methods for querying it. ...
const_iterator end(StringRef path)
Get end iterator over path.
FMINNUM/FMAXNUM - Perform floating-point minimum or maximum on two values.
This represents an addressing mode of: BaseGV + BaseOffs + BaseReg + Scale*ScaleReg If BaseGV is null...
vt_iterator vt_end() const
static void InitLibcallCallingConvs(CallingConv::ID *CCs)
Set default libcall CallingConvs.
void setMinimumJumpTableEntries(unsigned Val)
Indicate the minimum number of blocks to generate jump tables.
LegalizeTypeAction getTypeAction(LLVMContext &Context, EVT VT) const
Return how we should legalize values of this type, either it is already legal (return 'Legal') or we ...
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
unsigned getNumRegisters(LLVMContext &Context, EVT VT) const
Return the number of registers that this ValueType will eventually require.
static MVT getVectorVT(MVT VT, unsigned NumElements)
VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as VEC1/VEC2.
A Module instance is used to store all the information related to an LLVM module. ...
const TargetMachine & getTargetMachine() const
ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register zero-extension of the low ...
static void InitLibcallNames(const char **Names, const Triple &TT)
InitLibcallNames - Set default libcall names.
Libcall getSYNC(unsigned Opc, MVT VT)
Return the SYNC_FETCH_AND_* value for the given opcode and type, or UNKNOWN_LIBCALL if there is none...
unsigned getScalarSizeInBits() const
Y = RRC X, rotate right via carry.
static cl::opt< bool > JumpIsExpensiveOverride("jump-is-expensive", cl::init(false), cl::desc("Do not create extra branches to split comparison logic."), cl::Hidden)
static cl::opt< unsigned > MinimumJumpTableEntries("min-jump-table-entries", cl::init(4), cl::Hidden, cl::desc("Set minimum number of entries to use a jump table."))
Libcall
RTLIB::Libcall enum - This enum defines all of the runtime library calls the backend can emit...
RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.
static int getOpEnabled(bool IsSqrt, EVT VT, StringRef Override)
For the input attribute string, return one of the ReciprocalEstimate enum status values (enabled...
Type * getTypeForEVT(LLVMContext &Context) const
getTypeForEVT - This method returns an LLVM type corresponding to the specified EVT.
unsigned getSizeInBits() const
Externally visible function.
const MCInstrDesc & getDesc() const
Returns the target instruction descriptor of this MachineInstr.
const_iterator begin(StringRef path)
Get begin iterator over path.
Val, Success, OUTCHAIN = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap) N.b.
const Function * getParent() const
Return the enclosing method, or null if none.
Attribute getFnAttribute(Attribute::AttrKind Kind) const
Return the attribute for the given attribute kind.
const Function * getFunction() const
getFunction - Return the LLVM function that this machine code represents
virtual bool allowsMisalignedMemoryAccesses(EVT, unsigned AddrSpace=0, unsigned Align=1, bool *=nullptr) const
Determine if the target supports unaligned memory accesses.
SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register sign-extension of the low ...
[US]{MIN/MAX} - Binary minimum or maximum or signed or unsigned integers.
std::pair< LegalizeTypeAction, EVT > LegalizeKind
LegalizeKind holds the legalization kind that needs to happen to EVT in order to type-legalize it...
bool hasAttribute(unsigned Index, Attribute::AttrKind Kind) const
Return true if the attribute exists at the given index.
NodeType
ISD::NodeType enum - This enum defines the target-independent operators for a SelectionDAG.
Libcall getFPROUND(EVT OpVT, EVT RetVT)
getFPROUND - Return the FPROUND_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
bool bitsLT(EVT VT) const
bitsLT - Return true if this has less bits than VT.
INT = FGETSIGN(FP) - Return the sign bit of the specified floating point value as an integer 0/1 valu...
bool isAndroid() const
Tests whether the target is Android.
Libcall getUINTTOFP(EVT OpVT, EVT RetVT)
getUINTTOFP - Return the UINTTOFP_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
const Triple & getTargetTriple() const
bool isVector() const
isVector - Return true if this is a vector value type.
unsigned getSize() const
Return the size of the register in bytes, which is also the size of a stack slot allocated to hold a ...
virtual bool canOpTrap(unsigned Op, EVT VT) const
Returns true if the operation can trap for the value type.
A description of a memory reference used in the backend.
unsigned getNumRegClasses() const
struct fuzzer::@269 Flags
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Shift and rotation operations.
const TargetRegisterClass * getRegClass(unsigned i) const
Returns the register class associated with the enumeration value.
void eraseFromParent()
Unlink 'this' from the containing basic block and delete it.
bool mayLoad(QueryType Type=AnyInBundle) const
Return true if this instruction could possibly read memory.
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
EVT getScalarType() const
getScalarType - If this is a vector type, return the element type, otherwise return this...
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted...
Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt) Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt) For double-word atomic operations: ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amtLo, amtHi) ValLo, ValHi, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amtLo, amtHi) These correspond to the atomicrmw instruction.
void setOperationAction(unsigned Op, MVT VT, LegalizeAction Action)
Indicate that the specified operation does not work with the specified type and indicate what to do a...
void setJumpIsExpensive(bool isExpensive=true)
Tells the code generator not to expand logic operations on comparison predicates into separate sequen...
const MachineInstrBuilder & addImm(int64_t Val) const
Add a new immediate operand.
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
bool isInteger() const
isInteger - Return true if this is an integer, or a vector integer type.
int InstructionOpcodeToISD(unsigned Opcode) const
Get the ISD node that corresponds to the Instruction class opcode.
OutputArg - This struct carries flags and a value for a single outgoing (actual) argument or outgoing...
unsigned getNumOperands() const
Access to explicit operands of the instruction.
EVT getVectorElementType() const
getVectorElementType - Given a vector type, return the type of each element.
virtual Value * getIRStackGuard(IRBuilder<> &IRB) const
If the target has a standard location for the stack protector guard, returns the address of that loca...
[SU]INT_TO_FP - These operators convert integers (whose interpreted sign depends on the first letter)...
void computeRegisterProperties(const TargetRegisterInfo *TRI)
Once all of the register classes are added, this allows us to compute derived properties we expose...
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
bool isFI() const
isFI - Tests if this is a MO_FrameIndex operand.
virtual Value * getSafeStackPointerLocation(IRBuilder<> &IRB) const
Returns the target-specific address of the unsafe stack pointer.
void GetReturnInfo(Type *ReturnType, AttributeSet attr, SmallVectorImpl< ISD::OutputArg > &Outs, const TargetLowering &TLI, const DataLayout &DL)
Given an LLVM IR type and return type attributes, compute the return value EVTs and flags...
Simple integer binary arithmetic operators.
static StringRef getRecipEstimateForFunc(MachineFunction &MF)
Get the reciprocal estimate attribute string for a function that will override the target defaults...
CondCode
ISD::CondCode enum - These are ordered carefully to make the bitfields below work out...
EVT getValueType(const DataLayout &DL, Type *Ty, bool AllowUnknown=false) const
Return the EVT corresponding to this LLVM type.
Libcall getMEMCPY_ELEMENT_ATOMIC(uint64_t ElementSize)
getMEMCPY_ELEMENT_ATOMIC - Return MEMCPY_ELEMENT_ATOMIC_* value for the given element size or UNKNOW_...
READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
void addMemOperand(MachineFunction &MF, MachineMemOperand *MO)
Add a MachineMemOperand to the machine instruction.
ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register any-extension of the low la...
const DataLayout & getDataLayout() const
Return the DataLayout attached to the Module associated to this MF.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const
size - Get the string size.
void ComputeValueVTs(const TargetLowering &TLI, const DataLayout &DL, Type *Ty, SmallVectorImpl< EVT > &ValueVTs, SmallVectorImpl< uint64_t > *Offsets=nullptr, uint64_t StartingOffset=0)
ComputeValueVTs - Given an LLVM IR type, compute a sequence of EVTs that represent all the individual...
bool isLegalRC(const TargetRegisterClass *RC) const
Return true if the value types that can be represented by the specified register class are all legal...
bool isPow2VectorType() const
isPow2VectorType - Returns true if the given vector is a power of 2.
Class to represent pointers.
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
static GCRegistry::Add< CoreCLRGC > E("coreclr","CoreCLR-compatible GC")
FP_TO_[US]INT - Convert a floating point value to a signed or unsigned integer.
const MachineBasicBlock * getParent() const
mmo_iterator memoperands_end() const
The memory access is volatile.
MachineInstrBuilder BuildMI(MachineFunction &MF, const DebugLoc &DL, const MCInstrDesc &MCID)
Builder interface. Specify how to create the initial instruction itself.
static std::string getReciprocalOpName(bool IsSqrt, EVT VT)
Construct a string for the given reciprocal operation of the given type.
bool isTypeLegal(EVT VT) const
Return true if the target has native support for the specified value type.
static void InitCmpLibcallCCs(ISD::CondCode *CCs)
InitCmpLibcallCCs - Set default comparison libcall CC.
initializer< Ty > init(const Ty &Val)
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t find(char C, size_t From=0) const
Search for the first character C in the string.
unsigned getVectorNumElements() const
constexpr bool isPowerOf2_32(uint32_t Value)
isPowerOf2_32 - This function returns true if the argument is a power of two > 0. ...
Constant * getOrInsertFunction(StringRef Name, FunctionType *T, AttributeSet AttributeList)
Look up the specified function in the module symbol table.
MVT - Machine Value Type.
The instances of the Type class are immutable: once they are created, they are never changed...
This is an important class for using LLVM in a threaded context.
virtual void insertSSPDeclarations(Module &M) const
Inserts necessary declarations for SSP (stack protection) purpose.
Constant * getOrInsertGlobal(StringRef Name, Type *Ty)
Look up the specified global in the module symbol table.
Simple binary floating point operators.
C - The default llvm calling convention, compatible with C.
unsigned getMinimumJumpTableEntries() const
Return lower limit for number of blocks in a jump table.
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element at IDX replaced with VAL...
const MachineOperand & getOperand(unsigned i) const
TargetLoweringBase(const TargetMachine &TM)
NOTE: The TargetMachine owns TLOF.
APInt Or(const APInt &LHS, const APInt &RHS)
Bitwise OR function for APInt.
APInt Xor(const APInt &LHS, const APInt &RHS)
Bitwise XOR function for APInt.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Libcall getFPTOSINT(EVT OpVT, EVT RetVT)
getFPTOSINT - Return the FPTOSINT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
TRAP - Trapping instruction.
MVT getRegisterType(MVT VT) const
Return the type of registers that this ValueType will eventually require.
DEBUGTRAP - Trap intended to get the attention of a debugger.
static cl::opt< unsigned > MaximumJumpTableSize("max-jump-table-size", cl::init(0), cl::Hidden, cl::desc("Set maximum size of jump tables; zero for no limit."))
unsigned getVectorTypeBreakdown(LLVMContext &Context, EVT VT, EVT &IntermediateVT, unsigned &NumIntermediates, MVT &RegisterVT) const
Vector types are broken down into some number of legal first class types.
unsigned MaxStoresPerMemmove
Specify maximum bytes of store instructions per memmove call.
Bit counting operators with an undefined result for zero inputs.
Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap) For double-word atomic operations: ValLo...
X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
EVT - Extended Value Type.
LegalizeTypeAction getTypeAction(MVT VT) const
uint64_t NextPowerOf2(uint64_t A)
NextPowerOf2 - Returns the next power of two (in 64-bits) that is strictly greater than A...
static unsigned getVectorTypeBreakdownMVT(MVT VT, MVT &IntermediateVT, unsigned &NumIntermediates, MVT &RegisterVT, TargetLoweringBase *TLI)
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
virtual unsigned getByValTypeAlignment(Type *Ty, const DataLayout &DL) const
Return the desired alignment for ByVal or InAlloca aggregate function arguments in the caller paramet...
static PointerType * getInt8PtrTy(LLVMContext &C, unsigned AS=0)
static EVT getVectorVT(LLVMContext &Context, EVT VT, unsigned NumElements)
getVectorVT - Returns the EVT that represents a vector NumElements in length, where each element is o...
bool isStatepointSpillSlotObjectIndex(int ObjectIdx) const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned GatherAllAliasesMaxDepth
Depth that GatherAllAliases should should continue looking for chain dependencies when trying to find...
Triple - Helper class for working with autoconf configuration names.
int64_t getObjectOffset(int ObjectIdx) const
Return the assigned stack offset of the specified object from the incoming stack pointer.
This base class for TargetLowering contains the SelectionDAG-independent parts that can be used from ...
The memory access writes data.
virtual Value * getSSPStackGuardCheck(const Module &M) const
If the target has a standard stack protection check function that performs validation and error handl...
void SplitString(StringRef Source, SmallVectorImpl< StringRef > &OutFragments, StringRef Delimiters=" \t\n\v\f\r")
SplitString - Split up the specified string according to the specified delimiters, appending the result fragments to the output list.
bool isOSDarwin() const
isOSDarwin - Is this a "Darwin" OS (OS X, iOS, or watchOS).
Libcall getFPEXT(EVT OpVT, EVT RetVT)
getFPEXT - Return the FPEXT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
void initActions()
Initialize all of the actions to default values.
unsigned getABITypeAlignment(Type *Ty) const
Returns the minimum ABI-required alignment for the specified type.
int getRecipEstimateDivEnabled(EVT VT, MachineFunction &MF) const
Return a ReciprocalEstimate enum value for a division of the given type based on the function's attri...
bool MaskAndBranchFoldingIsLegal
MaskAndBranchFoldingIsLegal - Indicates if the target supports folding a mask of a single bit...
EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR identified by the (potentially...
ADDRSPACECAST - This operator converts between pointers of different address spaces.
MachineOperand class - Representation of each machine instruction operand.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
unsigned getObjectAlignment(int ObjectIdx) const
Return the alignment of the specified stack object.
bool isValid() const
Returns true if this iterator is still pointing at a valid entry.
virtual EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context, EVT VT) const
Return the ValueType of the result of SETCC operations.
constexpr size_t array_lengthof(T(&)[N])
Find the length of an array.
BasicBlock * GetInsertBlock() const
int getSqrtRefinementSteps(EVT VT, MachineFunction &MF) const
Return the refinement step count for a square root of the given type based on the function's attribut...
static GCRegistry::Add< ShadowStackGC > C("shadow-stack","Very portable GC for uncooperative code generators")
MachineMemOperand * getMachineMemOperand(MachinePointerInfo PtrInfo, MachineMemOperand::Flags f, uint64_t s, unsigned base_alignment, const AAMDNodes &AAInfo=AAMDNodes(), const MDNode *Ranges=nullptr, SynchronizationScope SynchScope=CrossThread, AtomicOrdering Ordering=AtomicOrdering::NotAtomic, AtomicOrdering FailureOrdering=AtomicOrdering::NotAtomic)
getMachineMemOperand - Allocate a new MachineMemOperand.
void setIndexedLoadAction(unsigned IdxMode, MVT VT, LegalizeAction Action)
Indicate that the specified indexed load does or does not work with the specified type and indicate w...
Select(COND, TRUEVAL, FALSEVAL).
std::pair< int, MVT > getTypeLegalizationCost(const DataLayout &DL, Type *Ty) const
Estimate the cost of type-legalization and the legalized type.
void setMaximumJumpTableSize(unsigned)
Indicate the maximum number of entries in jump tables.
ZERO_EXTEND - Used for integer types, zeroing the new bits.
ANY_EXTEND - Used for integer types. The high bits are undefined.
ValueTypeActionImpl ValueTypeActions
bool isGNUEnvironment() const
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE bool empty() const
empty - Check if the string is empty.
const DebugLoc & getDebugLoc() const
Returns the debug location id of this MachineInstr.
#define OP_TO_LIBCALL(Name, Enum)
FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.
FMINNAN/FMAXNAN - Behave identically to FMINNUM/FMAXNUM, except that when a single input is NaN...
virtual TargetLoweringBase::LegalizeTypeAction getPreferredVectorAction(EVT VT) const
Return the preferred vector type legalization action.
APInt And(const APInt &LHS, const APInt &RHS)
Bitwise AND function for APInt.
The memory access reads data.
static bool parseRefinementStep(StringRef In, size_t &Position, uint8_t &Value)
Return the character position and value (a single numeric character) of a customized refinement opera...
GET_DYNAMIC_AREA_OFFSET - get offset from native SP to the address of the most recent dynamic alloca...
virtual MVT::SimpleValueType getCmpLibcallReturnType() const
Return the ValueType for comparison libcalls.
static MachinePointerInfo getFixedStack(MachineFunction &MF, int FI, int64_t Offset=0)
Return a MachinePointerInfo record that refers to the specified FrameIndex.
static mvt_range all_valuetypes()
SimpleValueType Iteration.
Representation of each machine instruction.
Libcall getFPTOUINT(EVT OpVT, EVT RetVT)
getFPTOUINT - Return the FPTOUINT_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
Bitwise operators - logical and, logical or, logical xor.
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
MachineBasicBlock * emitPatchPoint(MachineInstr &MI, MachineBasicBlock *MBB) const
Replace/modify any TargetFrameIndex operands with a targte-dependent sequence of memory operands that...
void setTypeAction(MVT VT, LegalizeTypeAction Action)
virtual bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty, unsigned AddrSpace) const
Return true if the addressing mode represented by AM is legal for this target, for a load/store of th...
virtual MVT getScalarShiftAmountTy(const DataLayout &, EVT) const
EVT is not used in-tree, but is used by out-of-tree target.
LOAD and STORE have token chains as their first operand, then the same operands as an LLVM load/store...
unsigned getSizeInBits() const
getSizeInBits - Return the size of the specified value type in bits.
virtual std::pair< const TargetRegisterClass *, uint8_t > findRepresentativeClass(const TargetRegisterInfo *TRI, MVT VT) const
Return the largest legal super-reg register class of the register class for the specified type and it...
LLVM_ATTRIBUTE_ALWAYS_INLINE size_type size() const
CallInst * CreateCall(Value *Callee, ArrayRef< Value * > Args=None, const Twine &Name="", MDNode *FPMathTag=nullptr)
unsigned MaxStoresPerMemmoveOptSize
Maximum number of store instructions that may be substituted for a call to memmove, used for functions with OptSize attribute.
unsigned MaxStoresPerMemcpyOptSize
Maximum number of store operations that may be substituted for a call to memcpy, used for functions w...
instr_iterator insert(instr_iterator I, MachineInstr *M)
Insert MI into the instruction list before I, possibly inside a bundle.
unsigned MaxStoresPerMemcpy
Specify maximum bytes of store instructions per memcpy call.
Value * getDefaultSafeStackPointerLocation(IRBuilder<> &IRB, bool UseTLS) const
EVT getPow2VectorType(LLVMContext &Context) const
getPow2VectorType - Widens the length of the given vector EVT up to the nearest power of 2 and return...
Libcall getSINTTOFP(EVT OpVT, EVT RetVT)
getSINTTOFP - Return the SINTTOFP_*_* value for the given types, or UNKNOWN_LIBCALL if there is none...
int getDivRefinementSteps(EVT VT, MachineFunction &MF) const
Return the refinement step count for a division of the given type based on the function's attributes...
CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of vector type with the same length ...
StringRef getValueAsString() const
Return the attribute's value as a string.
bool EnableExtLdPromotion
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
virtual BranchProbability getPredictableBranchThreshold() const
If a branch or a select condition is skewed in one direction by more than this factor, it is very likely to be predicted correctly.
LegalizeTypeAction
This enum indicates whether a types are legal for a target, and if not, what action should be used to...
bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT, unsigned AddrSpace=0, unsigned Alignment=1, bool *Fast=nullptr) const
Return true if the target supports a memory access of this type for the given address space and align...
bool isSimple() const
isSimple - Test if the given EVT is simple (as opposed to being extended).
MVT getPointerTy(const DataLayout &DL, uint32_t AS=0) const
Return the pointer type for the given address space, defaults to the pointer type from the data layou...
EVT getTypeToTransformTo(LLVMContext &Context, EVT VT) const
For types supported by the target, this is an identity function.
Module * getParent()
Get the module that this global value is contained inside of...
LLVM Value Representation.
unsigned getMaximumJumpTableSize() const
Return upper limit for number of entries in a jump table.
static cl::opt< int > MinPercentageForPredictableBranch("min-predictable-branch", cl::init(99), cl::desc("Minimum percentage (0-100) that a condition must be either true ""or false to assume that the condition is predictable"), cl::Hidden)
PREFETCH - This corresponds to a prefetch intrinsic.
MVT getPow2VectorType() const
getPow2VectorType - Widens the length of the given vector MVT up to the nearest power of 2 and return...
const MachineInstrBuilder & addOperand(const MachineOperand &MO) const
Primary interface to the complete machine description for the target machine.
virtual Value * getSDagStackGuard(const Module &M) const
Return the variable that's previously inserted by insertSSPDeclarations, if any, otherwise return nul...
PointerType * getPointerTo(unsigned AddrSpace=0) const
Return a pointer to the current type.
StringRef - Represent a constant reference to a string, i.e.
vt_iterator vt_begin() const
vt_begin / vt_end - Loop over all of the value types that can be represented by values in this regist...
FMAD - Perform a * b + c, while getting the same result as the separately rounded operations...
SetCC operator - This evaluates to a true value iff the condition is true.
unsigned MaxStoresPerMemset
Specify maximum number of store instructions per memset call.
unsigned MaxStoresPerMemsetOptSize
Maximum number of stores operations that may be substituted for the call to memset, used for functions with OptSize attribute.
MERGE_VALUES - This node takes multiple discrete operands and returns them all as its individual resu...
MVT getVectorElementType() const
static int getOpRefinementSteps(bool IsSqrt, EVT VT, StringRef Override)
For the input attribute string, return the customized refinement step count for this operation on the...
TRUNCATE - Completely drop the high bits.
unsigned getPointerSize(unsigned AS=0) const
Layout pointer size FIXME: The defaults need to be removed once all of the backends/clients are updat...
EVT getShiftAmountTy(EVT LHSTy, const DataLayout &DL) const
static EVT getIntegerVT(LLVMContext &Context, unsigned BitWidth)
getIntegerVT - Returns the EVT that represents an integer with the given number of bits...
Fast - This calling convention attempts to make calls as fast as possible (e.g.
void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd)
Assign this MachineInstr's memory reference descriptor list.
GlobalValue * getNamedValue(StringRef Name) const
Return the global value in the module with the specified name, of arbitrary type. ...
void setBitsInMask(const uint32_t *Mask, unsigned MaskWords=~0u)
setBitsInMask - Add '1' bits from Mask to this vector.
int64_t getObjectSize(int ObjectIdx) const
Return the size of the specified object.
bool PredictableSelectIsExpensive
Tells the code generator that select is more expensive than a branch if the branch is usually predict...
GlobalVariable * getGlobalVariable(StringRef Name) const
Look up the specified global variable in the module symbol table.
MVT getSimpleVT() const
getSimpleVT - Return the SimpleValueType held in the specified simple EVT.
LLVMContext & getContext() const
Get the global data context.
This file describes how to lower LLVM code to machine code.
void setIndexedStoreAction(unsigned IdxMode, MVT VT, LegalizeAction Action)
Indicate that the specified indexed store does or does not work with the specified type and indicate ...
int getRecipEstimateSqrtEnabled(EVT VT, MachineFunction &MF) const
Return a ReciprocalEstimate enum value for a square root of the given type based on the function's at...
mmo_iterator memoperands_begin() const
Access to memory operands of the instruction.
unsigned getVectorNumElements() const
getVectorNumElements - Given a vector type, return the number of elements it contains.