15 #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZISELLOWERING_H 16 #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZISELLOWERING_H 24 namespace SystemZISD {
355 namespace SystemZICMP {
396 return TypeWidenVector;
401 bool isFMAFasterThanFMulAndFAdd(
EVT VT)
const override;
402 bool isFPImmLegal(
const APFloat &Imm,
EVT VT)
const override;
403 bool isLegalICmpImmediate(int64_t Imm)
const override;
404 bool isLegalAddImmediate(int64_t Imm)
const override;
408 bool allowsMisalignedMemoryAccesses(
EVT VT,
unsigned AS,
410 bool *
Fast)
const override;
411 bool isTruncateFree(
Type *,
Type *)
const override;
412 bool isTruncateFree(
EVT,
EVT)
const override;
413 const char *getTargetNodeName(
unsigned Opcode)
const override;
414 std::pair<unsigned, const TargetRegisterClass *>
418 getConstraintType(
StringRef Constraint)
const override;
421 const char *constraint)
const override;
422 void LowerAsmOperandForConstraint(
SDValue Op,
423 std::string &Constraint,
424 std::vector<SDValue> &Ops,
428 if (ConstraintCode.
size() == 1) {
429 switch(ConstraintCode[0]) {
477 bool allowTruncateForTailCall(
Type *,
Type *)
const override;
478 bool mayBeEmittedAsTailCall(
const CallInst *CI)
const override;
499 void computeKnownBitsForTargetNode(
const SDValue Op,
501 const APInt &DemandedElts,
503 unsigned Depth = 0)
const override;
506 unsigned ComputeNumSignBitsForTargetNode(
SDValue Op,
507 const APInt &DemandedElts,
509 unsigned Depth)
const override;
563 unsigned Opcode)
const;
577 unsigned UnpackHigh)
const;
580 bool canTreatAsByteVector(
EVT VT)
const;
614 unsigned StoreOpcode,
unsigned STOCOpcode,
619 bool ClearEven)
const;
622 unsigned BinOpcode,
unsigned BitSize,
623 bool Invert =
false)
const;
626 unsigned CompareOpcode,
627 unsigned KeepOldMask,
628 unsigned BitSize)
const;
632 unsigned Opcode)
const;
634 unsigned Opcode)
const;
637 unsigned Opcode,
bool NoFloat)
const;
640 unsigned Opcode)
const;
BUILTIN_OP_END - This must be the last enum value in this list.
A parsed version of the target data layout string in and methods for querying it. ...
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
This represents an addressing mode of: BaseGV + BaseOffs + BaseReg + Scale*ScaleReg If BaseGV is null...
This class represents lattice values for constants.
A Module instance is used to store all the information related to an LLVM module. ...
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const
size - Get the string size.
This class represents a function call, abstracting a target machine's calling convention.
Function Alias Analysis Results
unsigned const TargetRegisterInfo * TRI
NodeType
ISD::NodeType enum - This enum defines the target-independent operators for a SelectionDAG.
MVT getVectorIdxTy(const DataLayout &DL) const override
Returns the type to be used for the index operand of: ISD::INSERT_VECTOR_ELT, ISD::EXTRACT_VECTOR_ELT...
unsigned getExceptionSelectorRegister(const Constant *PersonalityFn) const override
If a physical register, this returns the register that receives the exception typeid on entry to a la...
bool useLoadStackGuardNode() const override
Override to support customized stack guard loading.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
Fast - This calling convention attempts to make calls as fast as possible (e.g.
This contains information for each constraint that we are lowering.
CondCode
ISD::CondCode enum - These are ordered carefully to make the bitfields below work out...
virtual unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
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.
unsigned getScalarSizeInBits() const
This is an important base class in LLVM.
bool isPCREL(unsigned Opcode)
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
This structure contains all information that is necessary for lowering calls.
unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const override
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
static const int FIRST_TARGET_MEMORY_OPCODE
FIRST_TARGET_MEMORY_OPCODE - Target-specific pre-isel operations which do not reference a specific me...
Represents one node in the SelectionDAG.
Target - Wrapper for Target specific information.
Class for arbitrary precision integers.
ANY_EXTEND - Used for integer types. The high bits are undefined.
MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override
EVT is not used in-tree, but is used by out-of-tree target.
Representation of each machine instruction.
ISD::NodeType getExtendForAtomicOps() const override
Returns how the platform's atomic operations are extended (ZERO_EXTEND, SIGN_EXTEND, or ANY_EXTEND).
void insertSSPDeclarations(Module &M) const override
Inserts necessary declarations for SSP (stack protection) purpose.
LegalizeTypeAction
This enum indicates whether a types are legal for a target, and if not, what action should be used to...
unsigned getExceptionPointerRegister(const Constant *PersonalityFn) const override
If a physical register, this returns the register that receives the exception address on entry to an ...
TargetLoweringBase::LegalizeTypeAction getPreferredVectorAction(MVT VT) const override
Return the preferred vector type legalization action.
Primary interface to the complete machine description for the target machine.
StringRef - Represent a constant reference to a string, i.e.
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation...
virtual TargetLoweringBase::LegalizeTypeAction getPreferredVectorAction(MVT VT) const
Return the preferred vector type legalization action.
This file describes how to lower LLVM code to machine code.
bool supportSwiftError() const override
Return true if the target supports swifterror attribute.