LLVM API Documentation

Public Member Functions
llvm::SystemZTargetLowering Class Reference

#include <SystemZISelLowering.h>

Inheritance diagram for llvm::SystemZTargetLowering:
Inheritance graph
[legend]
Collaboration diagram for llvm::SystemZTargetLowering:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 SystemZTargetLowering (const TargetMachine &TM)
MVT getScalarShiftAmountTy (EVT LHSTy) const override
EVT getSetCCResultType (LLVMContext &, EVT) const override
bool isFMAFasterThanFMulAndFAdd (EVT VT) const override
bool isFPImmLegal (const APFloat &Imm, EVT VT) const override
bool isLegalAddressingMode (const AddrMode &AM, Type *Ty) const override
bool allowsMisalignedMemoryAccesses (EVT VT, unsigned AS, unsigned Align, bool *Fast) const override
 Determine if the target supports unaligned memory accesses.
bool isTruncateFree (Type *, Type *) const override
bool isTruncateFree (EVT, EVT) const override
const char * getTargetNodeName (unsigned Opcode) const override
 This method returns the name of a target specific DAG node.
std::pair< unsigned, const
TargetRegisterClass * > 
getRegForInlineAsmConstraint (const std::string &Constraint, MVT VT) const override
TargetLowering::ConstraintType getConstraintType (const std::string &Constraint) const override
 Given a constraint, return the type of constraint it is for this target.
TargetLowering::ConstraintWeight getSingleConstraintMatchWeight (AsmOperandInfo &info, const char *constraint) const override
void LowerAsmOperandForConstraint (SDValue Op, std::string &Constraint, std::vector< SDValue > &Ops, SelectionDAG &DAG) const override
MachineBasicBlockEmitInstrWithCustomInserter (MachineInstr *MI, MachineBasicBlock *BB) const override
SDValue LowerOperation (SDValue Op, SelectionDAG &DAG) const override
bool allowTruncateForTailCall (Type *, Type *) const override
bool mayBeEmittedAsTailCall (CallInst *CI) const override
SDValue LowerFormalArguments (SDValue Chain, CallingConv::ID CallConv, bool isVarArg, const SmallVectorImpl< ISD::InputArg > &Ins, SDLoc DL, SelectionDAG &DAG, SmallVectorImpl< SDValue > &InVals) const override
SDValue LowerCall (CallLoweringInfo &CLI, SmallVectorImpl< SDValue > &InVals) const override
SDValue LowerReturn (SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl< ISD::OutputArg > &Outs, const SmallVectorImpl< SDValue > &OutVals, SDLoc DL, SelectionDAG &DAG) const override
SDValue prepareVolatileOrAtomicLoad (SDValue Chain, SDLoc DL, SelectionDAG &DAG) const override
SDValue PerformDAGCombine (SDNode *N, DAGCombinerInfo &DCI) const override

Detailed Description

Definition at line 199 of file SystemZISelLowering.h.


Constructor & Destructor Documentation

Definition at line 83 of file SystemZISelLowering.cpp.

References llvm::TargetLoweringBase::addRegisterClass(), llvm::ISD::ATOMIC_CMP_SWAP, llvm::ISD::ATOMIC_LOAD, llvm::ISD::ATOMIC_LOAD_ADD, llvm::ISD::ATOMIC_LOAD_AND, llvm::ISD::ATOMIC_LOAD_MAX, llvm::ISD::ATOMIC_LOAD_MIN, llvm::ISD::ATOMIC_LOAD_NAND, llvm::ISD::ATOMIC_LOAD_OR, llvm::ISD::ATOMIC_LOAD_SUB, llvm::ISD::ATOMIC_LOAD_UMAX, llvm::ISD::ATOMIC_LOAD_UMIN, llvm::ISD::ATOMIC_LOAD_XOR, llvm::ISD::ATOMIC_STORE, llvm::ISD::ATOMIC_SWAP, llvm::ISD::BITCAST, llvm::ISD::BlockAddress, llvm::ISD::BR_CC, llvm::ISD::BR_JT, llvm::ISD::BRCOND, llvm::TargetLoweringBase::computeRegisterProperties(), llvm::ISD::ConstantPool, llvm::ISD::CTLZ, llvm::ISD::CTLZ_ZERO_UNDEF, llvm::ISD::CTPOP, llvm::ISD::CTTZ, llvm::ISD::CTTZ_ZERO_UNDEF, llvm::TargetLoweringBase::Custom, llvm::ISD::DYNAMIC_STACKALLOC, llvm::TargetLoweringBase::Expand, llvm::ISD::EXTLOAD, llvm::MVT::f128, llvm::MVT::f32, llvm::MVT::f64, llvm::MVT::f80, llvm::ISD::FCEIL, llvm::ISD::FCOS, llvm::ISD::FFLOOR, llvm::MVT::FIRST_FP_VALUETYPE, llvm::MVT::FIRST_INTEGER_VALUETYPE, llvm::ISD::FMA, llvm::ISD::FNEARBYINT, llvm::ISD::FP_TO_UINT, llvm::ISD::FREM, llvm::ISD::FRINT, llvm::ISD::FROUND, llvm::ISD::FSIN, llvm::ISD::FTRUNC, llvm::TargetLoweringBase::getPointerTy(), llvm::ISD::GlobalAddress, llvm::ISD::GlobalTLSAddress, llvm::SystemZSubtarget::hasFPExtension(), llvm::SystemZSubtarget::hasHighWord(), I, llvm::MVT::i1, llvm::MVT::i32, llvm::MVT::i64, llvm::TargetLoweringBase::isTypeLegal(), llvm::ISD::JumpTable, llvm::MVT::LAST_FP_VALUETYPE, llvm::MVT::LAST_INTEGER_VALUETYPE, llvm::TargetLoweringBase::Legal, llvm::TargetLoweringBase::MaxStoresPerMemcpy, llvm::TargetLoweringBase::MaxStoresPerMemcpyOptSize, llvm::TargetLoweringBase::MaxStoresPerMemset, llvm::TargetLoweringBase::MaxStoresPerMemsetOptSize, llvm::ISD::MULHS, llvm::ISD::MULHU, llvm::ISD::OR, llvm::MVT::Other, llvm::ISD::PREFETCH, llvm::TargetLoweringBase::Promote, llvm::Sched::RegPressure, llvm::ISD::ROTR, llvm::ISD::SDIV, llvm::ISD::SDIVREM, llvm::ISD::SELECT, llvm::ISD::SELECT_CC, llvm::TargetLoweringBase::setBooleanContents(), llvm::TargetLoweringBase::setBooleanVectorContents(), llvm::ISD::SETCC, llvm::TargetLoweringBase::setExceptionPointerRegister(), llvm::TargetLoweringBase::setExceptionSelectorRegister(), llvm::TargetLoweringBase::setLoadExtAction(), llvm::TargetLoweringBase::setMinFunctionAlignment(), llvm::TargetLoweringBase::setOperationAction(), llvm::TargetLoweringBase::setSchedulingPreference(), llvm::TargetLoweringBase::setStackPointerRegisterToSaveRestore(), llvm::TargetLoweringBase::setTargetDAGCombine(), llvm::TargetLoweringBase::setTruncStoreAction(), llvm::ISD::SEXTLOAD, llvm::ISD::SHL_PARTS, llvm::ISD::SIGN_EXTEND, llvm::ISD::SIGN_EXTEND_INREG, llvm::ISD::SMUL_LOHI, llvm::ISD::SRA_PARTS, llvm::ISD::SREM, llvm::ISD::SRL_PARTS, llvm::ISD::STACKRESTORE, llvm::ISD::STACKSAVE, llvm::ISD::UDIV, llvm::ISD::UDIVREM, llvm::ISD::UINT_TO_FP, llvm::ISD::UMUL_LOHI, llvm::ISD::UREM, llvm::ISD::VACOPY, llvm::ISD::VAEND, llvm::ISD::VASTART, llvm::TargetLoweringBase::ZeroOrOneBooleanContent, and llvm::ISD::ZEXTLOAD.


Member Function Documentation

bool SystemZTargetLowering::allowsMisalignedMemoryAccesses ( EVT  ,
unsigned  AddrSpace,
unsigned  Align,
bool  
) const [override, virtual]

Determine if the target supports unaligned memory accesses.

This function returns true if the target allows unaligned memory accesses of the specified type in the given address space. If true, it also returns whether the unaligned memory access is "fast" in the last argument by reference. This is used, for example, in situations where an array copy/move/set is converted to a sequence of store operations. Its use helps to ensure that such replacements don't generate code that causes an alignment error (trap) on the target machine.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 342 of file SystemZISelLowering.cpp.

bool SystemZTargetLowering::allowTruncateForTailCall ( Type ,
Type  
) const [override, virtual]

Return true if a truncation from Ty1 to Ty2 is permitted when deciding whether a call is in tail position. Typically this means that both results would be assigned to the same register or stack slot, but it could mean the target performs adequate checks of its own before proceeding with the tail call.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 612 of file SystemZISelLowering.cpp.

References isTruncateFree().

This method should be implemented by targets that mark instructions with the 'usesCustomInserter' flag. These instructions are special in various ways, which require special support to insert. The specified MachineInstr is created but not inserted into any basic blocks, and this method is called to expand it into a sequence of instructions, potentially also creating new basic blocks and control flow.

Reimplemented from llvm::TargetLowering.

Definition at line 3339 of file SystemZISelLowering.cpp.

References llvm::SystemZISD::ATOMIC_CMP_SWAPW, llvm::ISD::ATOMIC_LOAD_OR, llvm::SystemZISD::ATOMIC_LOADW_MAX, llvm::SystemZISD::ATOMIC_LOADW_MIN, llvm::SystemZISD::ATOMIC_LOADW_OR, llvm::SystemZISD::ATOMIC_LOADW_UMAX, llvm::SystemZISD::ATOMIC_LOADW_UMIN, llvm::SystemZISD::ATOMIC_SWAPW, llvm::SystemZ::CCMASK_CMP_GE, llvm::SystemZ::CCMASK_CMP_LE, llvm::SystemZISD::CLC, llvm::MachineInstr::getOpcode(), llvm_unreachable, llvm::SystemZISD::MVC, NC, llvm::SystemZISD::OC, OR, llvm::AArch64DB::ST, and llvm::SystemZISD::XC.

TargetLowering::ConstraintType SystemZTargetLowering::getConstraintType ( const std::string &  Constraint) const [override, virtual]

Given a constraint, return the type of constraint it is for this target.

Reimplemented from llvm::TargetLowering.

Definition at line 390 of file SystemZISelLowering.cpp.

References llvm::TargetLowering::C_Memory, llvm::TargetLowering::C_Other, and llvm::TargetLowering::C_RegisterClass.

std::pair< unsigned, const TargetRegisterClass * > SystemZTargetLowering::getRegForInlineAsmConstraint ( const std::string &  Constraint,
MVT  VT 
) const [override, virtual]

Given a physical register constraint (e.g. {edx}), return the register number and the register class for the register.

Given a register class constraint, like 'r', if this corresponds directly to an LLVM register class, return a register of 0 and the register class pointer.

This should only be used for C_Register constraints. On error, this returns a register number of 0 and a null register class pointer..

Reimplemented from llvm::TargetLowering.

Definition at line 500 of file SystemZISelLowering.cpp.

References llvm::MVT::f128, llvm::MVT::f32, llvm::MVT::f64, llvm::SystemZMC::FP128Regs, llvm::SystemZMC::FP32Regs, llvm::SystemZMC::FP64Regs, llvm::SystemZMC::GR128Regs, llvm::SystemZMC::GR32Regs, llvm::SystemZMC::GR64Regs, llvm::MVT::i128, llvm::MVT::i32, llvm::MVT::i64, and parseRegisterNumber().

MVT llvm::SystemZTargetLowering::getScalarShiftAmountTy ( EVT  LHSTy) const [inline, override, virtual]

Reimplemented from llvm::TargetLoweringBase.

Definition at line 204 of file SystemZISelLowering.h.

References llvm::MVT::i32.

EVT SystemZTargetLowering::getSetCCResultType ( LLVMContext Context,
EVT  VT 
) const [override, virtual]

Return the ValueType of the result of SETCC operations. Also used to obtain the target's preferred type for the condition operand of SELECT and BRCOND nodes. In the case of BRCOND the argument passed is MVT::Other since there are no other operands to get a type hint from.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 312 of file SystemZISelLowering.cpp.

References llvm::EVT::changeVectorElementTypeToInteger(), llvm::MVT::i32, and llvm::EVT::isVector().

Examine constraint string and operand type and determine a weight value. The operand object must already have been set up with the operand type.

Examine constraint type and operand type and determine a weight value. This object must already have been set up with the operand type and the current alternative constraint selected.

Reimplemented from llvm::TargetLowering.

Definition at line 422 of file SystemZISelLowering.cpp.

References llvm::CallingConv::C, llvm::TargetLowering::AsmOperandInfo::CallOperandVal, llvm::TargetLowering::CW_Constant, llvm::TargetLowering::CW_Default, llvm::TargetLowering::CW_Invalid, llvm::TargetLowering::CW_Register, llvm::Value::getType(), llvm::Type::isFloatingPointTy(), llvm::isInt< 16 >(), llvm::Type::isIntegerTy(), and llvm::isUInt< 8 >().

const char * SystemZTargetLowering::getTargetNodeName ( unsigned  Opcode) const [override, virtual]

Return true if an FMA operation is faster than a pair of fmul and fadd instructions. fmuladd intrinsics will be expanded to FMAs when this method returns true, otherwise fmuladd is expanded to fmul + fadd.

NOTE: This may be called before legalization on types for which FMAs are not legal, but should return true if those types will eventually legalize to types that support FMAs. After legalization, it will only be called on types that support FMAs (via Legal or Custom actions)

Reimplemented from llvm::TargetLoweringBase.

Definition at line 318 of file SystemZISelLowering.cpp.

References llvm::MVT::f128, llvm::MVT::f32, llvm::MVT::f64, llvm::EVT::getScalarType(), llvm::EVT::getSimpleVT(), llvm::EVT::isSimple(), and llvm::MVT::SimpleTy.

bool SystemZTargetLowering::isFPImmLegal ( const APFloat ,
EVT   
) const [override, virtual]

Returns true if the target can instruction select the specified FP immediate natively. If false, the legalizer will materialize the FP immediate as a load from a constant pool.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 337 of file SystemZISelLowering.cpp.

References llvm::APFloat::isNegZero(), and llvm::APFloat::isZero().

bool SystemZTargetLowering::isLegalAddressingMode ( const AddrMode AM,
Type Ty 
) const [override, virtual]

Return true if the addressing mode represented by AM is legal for this target, for a load/store of the specified type.

The type may be VoidTy, in which case only return true if the addressing mode is legal for a load/store of any legal type. TODO: Handle pre/postinc as well.

isLegalAddressingMode - Return true if the addressing mode represented by AM is legal for this target, for a load/store of the specified type.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 354 of file SystemZISelLowering.cpp.

References llvm::TargetLoweringBase::AddrMode::BaseGV, llvm::TargetLoweringBase::AddrMode::BaseOffs, and llvm::TargetLoweringBase::AddrMode::Scale.

bool SystemZTargetLowering::isTruncateFree ( Type ,
Type  
) const [override, virtual]

Return true if it's free to truncate a value of type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in register EAX to i16 by referencing its sub-register AX.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 369 of file SystemZISelLowering.cpp.

References llvm::Type::getPrimitiveSizeInBits(), and llvm::Type::isIntegerTy().

Referenced by allowTruncateForTailCall().

bool SystemZTargetLowering::isTruncateFree ( EVT  FromVT,
EVT  ToVT 
) const [override, virtual]

Reimplemented from llvm::TargetLoweringBase.

Definition at line 377 of file SystemZISelLowering.cpp.

References llvm::EVT::getSizeInBits(), and llvm::EVT::isInteger().

void SystemZTargetLowering::LowerAsmOperandForConstraint ( SDValue  Op,
std::string &  Constraint,
std::vector< SDValue > &  Ops,
SelectionDAG DAG 
) const [override, virtual]

Lower the specified operand into the Ops vector. If it is invalid, don't add anything to Ops.

LowerAsmOperandForConstraint - Lower the specified operand into the Ops vector. If it is invalid, don't add anything to Ops.

Reimplemented from llvm::TargetLowering.

Definition at line 561 of file SystemZISelLowering.cpp.

References llvm::CallingConv::C, llvm::SelectionDAG::getTargetConstant(), llvm::SDValue::getValueType(), llvm::isInt< 16 >(), and llvm::isUInt< 8 >().

SDValue SystemZTargetLowering::LowerCall ( CallLoweringInfo ,
SmallVectorImpl< SDValue > &   
) const [override, virtual]

This hook must be implemented to lower calls into the the specified DAG. The outgoing arguments to the call are described by the Outs array, and the values to be returned by the call are described by the Ins array. The implementation should fill in the InVals array with legal-type return values from the call, and return the resulting token chain value.

Reimplemented from llvm::TargetLowering.

Definition at line 803 of file SystemZISelLowering.cpp.

References llvm::ISD::ADD, llvm::CCState::AnalyzeCallOperands(), llvm::CCState::AnalyzeCallResult(), llvm::SystemZISD::CALL, llvm::TargetLowering::CallLoweringInfo::CallConv, llvm::TargetLowering::CallLoweringInfo::Callee, llvm::SystemZMC::CallFrameSize, canUseSiblingCall(), llvm::TargetLowering::CallLoweringInfo::Chain, convertLocVTToValVT(), convertValVTToLocVT(), llvm::SelectionDAG::CreateStackTemporary(), llvm::TargetLowering::CallLoweringInfo::DAG, llvm::TargetLowering::CallLoweringInfo::DL, llvm::SmallVectorBase::empty(), llvm::MVT::f32, G, llvm::TargetRegisterInfo::getCallPreservedMask(), llvm::SelectionDAG::getCALLSEQ_END(), llvm::SelectionDAG::getCALLSEQ_START(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getContext(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::MachinePointerInfo::getFixedStack(), llvm::SelectionDAG::getIntPtrConstant(), llvm::CCValAssign::getLocInfo(), llvm::CCValAssign::getLocMemOffset(), llvm::CCValAssign::getLocReg(), llvm::CCValAssign::getLocVT(), llvm::SelectionDAG::getMachineFunction(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getPointerTy(), llvm::SelectionDAG::getRegister(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::SelectionDAG::getRegisterMask(), llvm::SelectionDAG::getStore(), llvm::TargetMachine::getSubtargetImpl(), llvm::SelectionDAG::getTargetExternalSymbol(), llvm::SelectionDAG::getTargetGlobalAddress(), llvm::TargetLoweringBase::getTargetMachine(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), llvm::CCValAssign::getValVT(), llvm::SelectionDAG::getVTList(), llvm::MVT::Glue, I, llvm::MVT::i32, llvm::CCValAssign::Indirect, llvm::MipsISD::Ins, llvm::TargetLowering::CallLoweringInfo::Ins, llvm::CCValAssign::isMemLoc(), llvm::CCValAssign::isRegLoc(), llvm::TargetLowering::CallLoweringInfo::IsTailCall, llvm::TargetLowering::CallLoweringInfo::IsVarArg, llvm::MVT::Other, llvm::TargetLowering::CallLoweringInfo::Outs, llvm::TargetLowering::CallLoweringInfo::OutVals, llvm::SystemZISD::PCREL_WRAPPER, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SystemZISD::SIBCALL, llvm::SmallVectorTemplateCommon< T >::size(), and llvm::ISD::TokenFactor.

This hook must be implemented to lower the incoming (formal) arguments, described by the Ins array, into the specified DAG. The implementation should fill in the InVals array with legal-type argument values, and return the resulting token chain value.

Reimplemented from llvm::TargetLowering.

Definition at line 668 of file SystemZISelLowering.cpp.

References llvm::ISD::ADD, llvm::MachineFunction::addLiveIn(), llvm::MachineRegisterInfo::addLiveIn(), llvm::CCState::AnalyzeFormalArguments(), llvm::SystemZ::ArgFPRs, convertLocVTToValVT(), llvm::MachineFrameInfo::CreateFixedObject(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MVT::f32, llvm::MVT::f64, llvm::SelectionDAG::getContext(), llvm::SelectionDAG::getCopyFromReg(), llvm::MachinePointerInfo::getFixedStack(), llvm::SelectionDAG::getFrameIndex(), llvm::MachineFunction::getFrameInfo(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::MachineFunction::getInfo(), llvm::SelectionDAG::getIntPtrConstant(), llvm::SelectionDAG::getLoad(), llvm::CCValAssign::getLocMemOffset(), llvm::CCValAssign::getLocReg(), llvm::CCValAssign::getLocVT(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getPointerTy(), llvm::MachineFunction::getRegInfo(), llvm::EVT::getSimpleVT(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getSubtarget(), llvm::SDValue::getValue(), I, llvm::MVT::i32, llvm::MVT::i64, llvm::CCValAssign::isMemLoc(), llvm::CCValAssign::isRegLoc(), llvm_unreachable, llvm::makeArrayRef(), llvm::SystemZ::NumArgFPRs, llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SystemZMachineFunctionInfo::setRegSaveFrameIndex(), llvm::SystemZMachineFunctionInfo::setVarArgsFirstFPR(), llvm::SystemZMachineFunctionInfo::setVarArgsFirstGPR(), llvm::SystemZMachineFunctionInfo::setVarArgsFrameIndex(), llvm::MVT::SimpleTy, llvm::SmallVectorTemplateCommon< T >::size(), and llvm::ISD::TokenFactor.

SDValue SystemZTargetLowering::LowerOperation ( SDValue  Op,
SelectionDAG DAG 
) const [override, virtual]

This callback is invoked for operations that are unsupported by the target, which are registered to use 'custom' lowering, and whose defined values are all legal. If the target has no operations that require custom lowering, it need not implement this. The default implementation of this aborts.

Reimplemented from llvm::TargetLowering.

Definition at line 2400 of file SystemZISelLowering.cpp.

References llvm::ISD::ATOMIC_CMP_SWAP, llvm::ISD::ATOMIC_LOAD, llvm::ISD::ATOMIC_LOAD_ADD, llvm::ISD::ATOMIC_LOAD_AND, llvm::ISD::ATOMIC_LOAD_MAX, llvm::ISD::ATOMIC_LOAD_MIN, llvm::ISD::ATOMIC_LOAD_NAND, llvm::ISD::ATOMIC_LOAD_OR, llvm::ISD::ATOMIC_LOAD_SUB, llvm::ISD::ATOMIC_LOAD_UMAX, llvm::ISD::ATOMIC_LOAD_UMIN, llvm::ISD::ATOMIC_LOAD_XOR, llvm::SystemZISD::ATOMIC_LOADW_ADD, llvm::SystemZISD::ATOMIC_LOADW_AND, llvm::SystemZISD::ATOMIC_LOADW_MAX, llvm::SystemZISD::ATOMIC_LOADW_MIN, llvm::SystemZISD::ATOMIC_LOADW_NAND, llvm::SystemZISD::ATOMIC_LOADW_OR, llvm::SystemZISD::ATOMIC_LOADW_UMAX, llvm::SystemZISD::ATOMIC_LOADW_UMIN, llvm::SystemZISD::ATOMIC_LOADW_XOR, llvm::ISD::ATOMIC_STORE, llvm::ISD::ATOMIC_SWAP, llvm::SystemZISD::ATOMIC_SWAPW, llvm::ISD::BITCAST, llvm::ISD::BlockAddress, llvm::ISD::BR_CC, llvm::ISD::ConstantPool, llvm::ISD::DYNAMIC_STACKALLOC, llvm::SDValue::getOpcode(), llvm::ISD::GlobalAddress, llvm::ISD::GlobalTLSAddress, llvm::ISD::JumpTable, llvm_unreachable, llvm::ISD::OR, llvm::ISD::PREFETCH, llvm::ISD::SDIVREM, llvm::ISD::SELECT_CC, llvm::ISD::SETCC, llvm::ISD::SMUL_LOHI, llvm::ISD::STACKRESTORE, llvm::ISD::STACKSAVE, llvm::ISD::UDIVREM, llvm::ISD::UMUL_LOHI, llvm::ISD::VACOPY, and llvm::ISD::VASTART.

bool SystemZTargetLowering::mayBeEmittedAsTailCall ( CallInst ) const [override, virtual]

Return true if the target may be able emit the call instruction as a tail call. This is used by optimization passes to determine if it's profitable to duplicate return instructions to enable tailcall optimization.

Reimplemented from llvm::TargetLowering.

Definition at line 617 of file SystemZISelLowering.cpp.

References llvm::CallInst::isTailCall().

SDValue SystemZTargetLowering::PerformDAGCombine ( SDNode N,
DAGCombinerInfo DCI 
) const [override, virtual]

This method will be invoked for all target nodes and for any target-independent nodes that the target has registered with invoke it for.

The semantics are as follows: Return Value: SDValue.Val == 0 - No change was made SDValue.Val == N - N was replaced, is dead, and is already handled. otherwise - N should be replaced by the returned Operand.

In addition, methods provided by DAGCombinerInfo may be used to perform more complex transformations.

Reimplemented from llvm::TargetLowering.

Definition at line 2529 of file SystemZISelLowering.cpp.

References llvm::ISD::ANY_EXTEND, llvm::TargetLowering::DAGCombinerInfo::DAG, llvm::dyn_cast(), llvm::MipsISD::Ext, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::SDValue::hasOneUse(), llvm::ISD::SHL, llvm::ISD::SIGN_EXTEND, and llvm::ISD::SRA.

SDValue SystemZTargetLowering::prepareVolatileOrAtomicLoad ( SDValue  Chain,
SDLoc  DL,
SelectionDAG DAG 
) const [override, virtual]

This callback is used to prepare for a volatile or atomic load. It takes a chain node as input and returns the chain for the load itself.

Having a callback like this is necessary for targets like SystemZ, which allows a CPU to reuse the result of a previous load indefinitely, even if a cache-coherent store is performed by another CPU. The default implementation does nothing.

Reimplemented from llvm::TargetLowering.

Definition at line 1011 of file SystemZISelLowering.cpp.

References llvm::SelectionDAG::getNode(), llvm::MVT::Other, and llvm::SystemZISD::SERIALIZE.


The documentation for this class was generated from the following files: