Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
PPCISelLowering.cpp File Reference
#include "PPCISelLowering.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "MCTargetDesc/PPCPredicates.h"
#include "PPC.h"
#include "PPCCallingConv.h"
#include "PPCFrameLowering.h"
#include "PPCInstrInfo.h"
#include "PPCMachineFunctionInfo.h"
#include "PPCPerfectShuffle.h"
#include "PPCRegisterInfo.h"
#include "PPCSubtarget.h"
#include "PPCTargetMachine.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/LivePhysRegs.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsPowerPC.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/Value.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCSectionXCOFF.h"
#include "llvm/MC/MCSymbolXCOFF.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <iterator>
#include <list>
#include <optional>
#include <utility>
#include <vector>
#include "PPCGenAsmMatcher.inc"

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "ppc-lowering"
#define GET_REGISTER_MATCHER

Functions

 STATISTIC (NumTailCalls, "Number of tail calls")
 STATISTIC (NumSiblingCalls, "Number of sibling calls")
 STATISTIC (ShufflesHandledWithVPERM, "Number of shuffles lowered to a VPERM or XXPERM")
 STATISTIC (NumDynamicAllocaProbed, "Number of dynamic stack allocation probed")
static bool isNByteElemShuffleMask (ShuffleVectorSDNode *N, unsigned Width, int StepLen)
 Check that the mask is shuffling N byte elements.
static SDValue widenVec (SelectionDAG &DAG, SDValue Vec, const SDLoc &dl)
static void getMaxByValAlign (Type *Ty, Align &MaxAlign, Align MaxMaxAlign)
 getMaxByValAlign - Helper for getByValTypeAlignment to determine the desired ByVal argument alignment.
static bool isFloatingPointZero (SDValue Op)
 isFloatingPointZero - Return true if this is 0.0 or -0.0.
static bool isConstantOrUndef (int Op, int Val)
 isConstantOrUndef - Op is either an undef node or a ConstantSDNode.
static bool isVMerge (ShuffleVectorSDNode *N, unsigned UnitSize, unsigned LHSStart, unsigned RHSStart)
 isVMerge - Common function, used to match vmrg* shuffles.
static bool isVMerge (ShuffleVectorSDNode *N, unsigned IndexOffset, unsigned RHSStartValue)
 Common function used to match vmrgew and vmrgow shuffles.
static bool isXXBRShuffleMaskHelper (ShuffleVectorSDNode *N, int Width)
static bool provablyDisjointOr (SelectionDAG &DAG, const SDValue &N)
 Used when computing address flags for selecting loads and stores.
static void fixupFuncForFI (SelectionDAG &DAG, int FrameIdx, EVT VT)
template<typename Ty>
static bool isValidPCRelNode (SDValue N)
static bool usePartialVectorLoads (SDNode *N, const PPCSubtarget &ST)
 Returns true if we should use a direct load into vector instruction (such as lxsd or lfd), instead of a load into gpr + direct move sequence.
static void getLabelAccessInfo (bool IsPIC, const PPCSubtarget &Subtarget, unsigned &HiOpFlags, unsigned &LoOpFlags, const GlobalValue *GV=nullptr)
 Return true if we should reference labels using a PICBase, set the HiOpFlags and LoOpFlags to the target MO flags.
static SDValue LowerLabelRef (SDValue HiPart, SDValue LoPart, bool isPIC, SelectionDAG &DAG)
static void setUsesTOCBasePtr (MachineFunction &MF)
static void setUsesTOCBasePtr (SelectionDAG &DAG)
static void updateForAIXShLibTLSModelOpt (TLSModel::Model &Model, SelectionDAG &DAG, const TargetMachine &TM)
 updateForAIXShLibTLSModelOpt - Helper to initialize TLS model opt settings, and then apply the update.
static unsigned CalculateStackSlotSize (EVT ArgVT, ISD::ArgFlagsTy Flags, unsigned PtrByteSize)
 CalculateStackSlotSize - Calculates the size reserved for this argument on the stack.
static Align CalculateStackSlotAlignment (EVT ArgVT, EVT OrigVT, ISD::ArgFlagsTy Flags, unsigned PtrByteSize)
 CalculateStackSlotAlignment - Calculates the alignment of this argument on the stack.
static bool CalculateStackSlotUsed (EVT ArgVT, EVT OrigVT, ISD::ArgFlagsTy Flags, unsigned PtrByteSize, unsigned LinkageSize, unsigned ParamAreaSize, unsigned &ArgOffset, unsigned &AvailableFPRs, unsigned &AvailableVRs)
 CalculateStackSlotUsed - Return whether this argument will use its stack slot (instead of being passed in registers).
static unsigned EnsureStackAlignment (const PPCFrameLowering *Lowering, unsigned NumBytes)
 EnsureStackAlignment - Round stack frame size up from NumBytes to ensure minimum alignment required for target.
static int CalculateTailCallSPDiff (SelectionDAG &DAG, bool isTailCall, unsigned ParamSize)
 CalculateTailCallSPDiff - Get the amount the stack pointer has to be adjusted to accommodate the arguments for the tailcall.
static bool isFunctionGlobalAddress (const GlobalValue *CalleeGV)
static bool callsShareTOCBase (const Function *Caller, const GlobalValue *CalleeGV, const TargetMachine &TM)
static bool needStackSlotPassParameters (const PPCSubtarget &Subtarget, const SmallVectorImpl< ISD::OutputArg > &Outs)
static bool hasSameArgumentList (const Function *CallerFn, const CallBase &CB)
static bool areCallingConvEligibleForTCO_64SVR4 (CallingConv::ID CallerCC, CallingConv::ID CalleeCC)
static SDNodeisBLACompatibleAddress (SDValue Op, SelectionDAG &DAG)
 isCallCompatibleAddress - Return the immediate to use if the specified 32-bit value is representable in the immediate field of a BxA instruction.
static void StoreTailCallArgumentsToStackSlot (SelectionDAG &DAG, SDValue Chain, const SmallVectorImpl< TailCallArgumentInfo > &TailCallArgs, SmallVectorImpl< SDValue > &MemOpChains, const SDLoc &dl)
 StoreTailCallArgumentsToStackSlot - Stores arguments to their stack slot.
static SDValue EmitTailCallStoreFPAndRetAddr (SelectionDAG &DAG, SDValue Chain, SDValue OldRetAddr, SDValue OldFP, int SPDiff, const SDLoc &dl)
 EmitTailCallStoreFPAndRetAddr - Move the frame pointer and return address to the appropriate stack slot for the tail call optimized function call.
static void CalculateTailCallArgDest (SelectionDAG &DAG, MachineFunction &MF, bool IsPPC64, SDValue Arg, int SPDiff, unsigned ArgOffset, SmallVectorImpl< TailCallArgumentInfo > &TailCallArguments)
 CalculateTailCallArgDest - Remember Argument for later processing.
static SDValue CreateCopyOfByValArgument (SDValue Src, SDValue Dst, SDValue Chain, ISD::ArgFlagsTy Flags, SelectionDAG &DAG, const SDLoc &dl)
 CreateCopyOfByValArgument - Make a copy of an aggregate at address specified by "Src" to address "Dst" of size "Size".
static void LowerMemOpCallTo (SelectionDAG &DAG, MachineFunction &MF, SDValue Chain, SDValue Arg, SDValue PtrOff, int SPDiff, unsigned ArgOffset, bool isPPC64, bool isTailCall, bool isVector, SmallVectorImpl< SDValue > &MemOpChains, SmallVectorImpl< TailCallArgumentInfo > &TailCallArguments, const SDLoc &dl)
 LowerMemOpCallTo - Store the argument to the stack or remember it in case of tail calls.
static void PrepareTailCall (SelectionDAG &DAG, SDValue &InGlue, SDValue &Chain, const SDLoc &dl, int SPDiff, unsigned NumBytes, SDValue LROp, SDValue FPOp, SmallVectorImpl< TailCallArgumentInfo > &TailCallArguments)
static bool isIndirectCall (const SDValue &Callee, SelectionDAG &DAG, const PPCSubtarget &Subtarget, bool isPatchPoint)
static bool isTOCSaveRestoreRequired (const PPCSubtarget &Subtarget)
static unsigned getCallOpcode (PPCTargetLowering::CallFlags CFlags, const Function &Caller, const SDValue &Callee, const PPCSubtarget &Subtarget, const TargetMachine &TM, bool IsStrictFPCall=false)
static SDValue transformCallee (const SDValue &Callee, SelectionDAG &DAG, const SDLoc &dl, const PPCSubtarget &Subtarget)
static SDValue getOutputChainFromCallSeq (SDValue CallSeqStart)
static void prepareIndirectCall (SelectionDAG &DAG, SDValue &Callee, SDValue &Glue, SDValue &Chain, const SDLoc &dl)
static void prepareDescriptorIndirectCall (SelectionDAG &DAG, SDValue &Callee, SDValue &Glue, SDValue &Chain, SDValue CallSeqStart, const CallBase *CB, const SDLoc &dl, bool hasNest, const PPCSubtarget &Subtarget)
static void buildCallOperands (SmallVectorImpl< SDValue > &Ops, PPCTargetLowering::CallFlags CFlags, const SDLoc &dl, SelectionDAG &DAG, SmallVector< std::pair< unsigned, SDValue >, 8 > &RegsToPass, SDValue Glue, SDValue Chain, SDValue &Callee, int SPDiff, const PPCSubtarget &Subtarget)
static bool isGPRShadowAligned (MCPhysReg Reg, Align RequiredAlign)
static bool CC_AIX (unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, Type *OrigTy, CCState &State)
static const TargetRegisterClassgetRegClassForSVT (MVT::SimpleValueType SVT, bool IsPPC64, bool HasP8Vector, bool HasVSX)
static SDValue truncateScalarIntegerArg (ISD::ArgFlagsTy Flags, EVT ValVT, SelectionDAG &DAG, SDValue ArgValue, MVT LocVT, const SDLoc &dl)
static unsigned mapArgRegToOffsetAIX (unsigned Reg, const PPCFrameLowering *FL)
static unsigned getPPCStrictOpcode (unsigned Opc)
static SDValue convertFPToInt (SDValue Op, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static SDValue convertIntToFP (SDValue Op, SDValue Src, SelectionDAG &DAG, const PPCSubtarget &Subtarget, SDValue Chain=SDValue())
static SDValue getCanonicalConstSplat (uint64_t Val, unsigned SplatSize, EVT VT, SelectionDAG &DAG, const SDLoc &dl)
 getCanonicalConstSplat - Build a canonical splat immediate of Val with an element size of SplatSize.
static SDValue BuildIntrinsicOp (unsigned IID, SDValue Op, SelectionDAG &DAG, const SDLoc &dl, EVT DestVT=MVT::Other)
 BuildIntrinsicOp - Return a unary operator intrinsic node with the specified intrinsic ID.
static SDValue BuildIntrinsicOp (unsigned IID, SDValue LHS, SDValue RHS, SelectionDAG &DAG, const SDLoc &dl, EVT DestVT=MVT::Other)
 BuildIntrinsicOp - Return a binary operator intrinsic node with the specified intrinsic ID.
static SDValue BuildIntrinsicOp (unsigned IID, SDValue Op0, SDValue Op1, SDValue Op2, SelectionDAG &DAG, const SDLoc &dl, EVT DestVT=MVT::Other)
 BuildIntrinsicOp - Return a ternary operator intrinsic node with the specified intrinsic ID.
static SDValue BuildVSLDOI (SDValue LHS, SDValue RHS, unsigned Amt, EVT VT, SelectionDAG &DAG, const SDLoc &dl)
 BuildVSLDOI - Return a VECTOR_SHUFFLE that is a vsldoi of the specified amount.
static bool haveEfficientBuildVectorPattern (BuildVectorSDNode *V, bool HasDirectMove, bool HasP8Vector)
 Do we have an efficient pattern in a .td file for this node?
static const SDValuegetNormalLoadInput (const SDValue &Op, bool &IsPermuted)
static bool isValidSplatLoad (const PPCSubtarget &Subtarget, const SDValue &Op, unsigned &Opcode)
bool isValidMtVsrBmi (APInt &BitMask, BuildVectorSDNode &BVN, bool IsLittleEndian)
static SDValue GeneratePerfectShuffle (unsigned PFEntry, SDValue LHS, SDValue RHS, SelectionDAG &DAG, const SDLoc &dl)
 GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit the specified operations to build the shuffle.
static bool getVectorCompareInfo (SDValue Intrin, int &CompareOpc, bool &isDot, const PPCSubtarget &Subtarget)
 getVectorCompareInfo - Given an intrinsic, return false if it is not a vector comparison.
static SDValue getDataClassTest (SDValue Op, FPClassTest Mask, const SDLoc &Dl, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static SDValue ConvertCarryValueToCarryFlag (EVT SumType, SDValue Value, SelectionDAG &DAG, const PPCSubtarget &STI)
static SDValue ConvertCarryFlagToCarryValue (EVT SumType, SDValue Flag, EVT CarryType, SelectionDAG &DAG, const PPCSubtarget &STI)
static InstructioncallIntrinsic (IRBuilderBase &Builder, Intrinsic::ID Id)
static bool isSignExtended (MachineInstr &MI, const PPCInstrInfo *TII)
static bool IsSelectCC (MachineInstr &MI)
static bool IsSelect (MachineInstr &MI)
static int getEstimateRefinementSteps (EVT VT, const PPCSubtarget &Subtarget)
static void getBaseWithConstantOffset (SDValue Loc, SDValue &Base, int64_t &Offset, SelectionDAG &DAG)
static bool isConsecutiveLSLoc (SDValue Loc, EVT VT, LSBaseSDNode *Base, unsigned Bytes, int Dist, SelectionDAG &DAG)
static bool isConsecutiveLS (SDNode *N, LSBaseSDNode *Base, unsigned Bytes, int Dist, SelectionDAG &DAG)
static bool findConsecutiveLoad (LoadSDNode *LD, SelectionDAG &DAG)
static SDValue generateEquivalentSub (SDNode *N, int Size, bool Complement, bool Swap, SDLoc &DL, SelectionDAG &DAG)
 This function is called when we have proved that a SETCC node can be replaced by subtraction (and other supporting instructions) so that the result of comparison is kept in a GPR instead of CR.
static bool isFPExtLoad (SDValue Op)
static SDValue combineBVOfConsecutiveLoads (SDNode *N, SelectionDAG &DAG)
 Reduce the number of loads when building a vector.
static SDValue addShuffleForVecExtend (SDNode *N, SelectionDAG &DAG, SDValue Input, uint64_t Elems, uint64_t CorrectElems)
static SDValue combineBVOfVecSExt (SDNode *N, SelectionDAG &DAG)
static SDValue combineBVZEXTLOAD (SDNode *N, SelectionDAG &DAG)
static bool isAlternatingShuffMask (const ArrayRef< int > &Mask, int NumElts)
static bool isSplatBV (SDValue Op)
static SDValue isScalarToVec (SDValue Op)
static void fixupShuffleMaskForPermutedSToV (SmallVectorImpl< int > &ShuffV, int LHSFirstElt, int LHSLastElt, int RHSFirstElt, int RHSLastElt, int HalfVec, unsigned LHSNumValidElts, unsigned RHSNumValidElts, const PPCSubtarget &Subtarget)
static SDValue getSToVPermuted (SDValue OrigSToV, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static bool isShuffleMaskInRange (const SmallVectorImpl< int > &ShuffV, int HalfVec, int LHSLastElementDefined, int RHSLastElementDefined)
static SDValue generateSToVPermutedForVecShuffle (int ScalarSize, uint64_t ShuffleEltWidth, unsigned &NumValidElts, int FirstElt, int &LastElt, SDValue VecShuffOperand, SDValue SToVNode, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static bool isStoreConditional (SDValue Intrin, unsigned &StoreWidth)
static SDValue DAGCombineAddc (SDNode *N, llvm::PPCTargetLowering::DAGCombinerInfo &DCI)
static unsigned invertFMAOpcode (unsigned Opc)
static SDValue stripModuloOnShift (const TargetLowering &TLI, SDNode *N, SelectionDAG &DAG)
static SDValue combineADDToADDZE (SDNode *N, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static SDValue combineADDToMAT_PCREL_ADDR (SDNode *N, SelectionDAG &DAG, const PPCSubtarget &Subtarget)
static void setAlignFlagsForFI (SDValue N, unsigned &FlagSet, SelectionDAG &DAG)
 Set alignment flags based on whether or not the Frame Index is aligned.
static void computeFlagsForAddressComputation (SDValue N, unsigned &FlagSet, SelectionDAG &DAG)
 Given a node, compute flags that are used for address computation when selecting load and store instructions.
static bool isPCRelNode (SDValue N)
static void setXFormForUnalignedFI (SDValue N, unsigned Flags, PPC::AddrMode &Mode)
static Intrinsic::ID getIntrinsicForAtomicRMWBinOp128 (AtomicRMWInst::BinOp BinOp)

Variables

static cl::opt< boolDisableP10StoreForward ("disable-p10-store-forward", cl::desc("disable P10 store forward-friendly conversion"), cl::Hidden, cl::init(false))
static cl::opt< boolDisablePPCPreinc ("disable-ppc-preinc", cl::desc("disable preincrement load/store generation on PPC"), cl::Hidden)
static cl::opt< boolDisableILPPref ("disable-ppc-ilp-pref", cl::desc("disable setting the node scheduling preference to ILP on PPC"), cl::Hidden)
static cl::opt< boolDisablePPCUnaligned ("disable-ppc-unaligned", cl::desc("disable unaligned load/store generation on PPC"), cl::Hidden)
static cl::opt< boolDisableSCO ("disable-ppc-sco", cl::desc("disable sibling call optimization on ppc"), cl::Hidden)
static cl::opt< boolDisableInnermostLoopAlign32 ("disable-ppc-innermost-loop-align32", cl::desc("don't always align innermost loop to 32 bytes on ppc"), cl::Hidden)
static cl::opt< boolUseAbsoluteJumpTables ("ppc-use-absolute-jumptables", cl::desc("use absolute jump tables on ppc"), cl::Hidden)
static cl::opt< boolDisablePerfectShuffle ("ppc-disable-perfect-shuffle", cl::desc("disable vector permute decomposition"), cl::init(true), cl::Hidden)
cl::opt< boolDisableAutoPairedVecSt ("disable-auto-paired-vec-st", cl::desc("disable automatically generated 32byte paired vector stores"), cl::init(true), cl::Hidden)
static cl::opt< unsignedPPCMinimumJumpTableEntries ("ppc-min-jump-table-entries", cl::init(64), cl::Hidden, cl::desc("Set minimum number of entries to use a jump table on PPC"))
static cl::opt< unsignedPPCGatherAllAliasesMaxDepth ("ppc-gather-alias-max-depth", cl::init(18), cl::Hidden, cl::desc("max depth when checking alias info in GatherAllAliases()"))
static cl::opt< unsignedPPCAIXTLSModelOptUseIEForLDLimit ("ppc-aix-shared-lib-tls-model-opt-limit", cl::init(1), cl::Hidden, cl::desc("Set inclusive limit count of TLS local-dynamic access(es) in a " "function to use initial-exec"))
constexpr uint64_t AIXSmallTlsPolicySizeLimit = 32751
cl::opt< boolANDIGlueBug
static const MCPhysReg FPR []
 FPR - The set of FP registers that should be allocated for arguments on Darwin and AIX.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ppc-lowering"

Definition at line 102 of file PPCISelLowering.cpp.

◆ GET_REGISTER_MATCHER

#define GET_REGISTER_MATCHER

Definition at line 18121 of file PPCISelLowering.cpp.

Function Documentation

◆ addShuffleForVecExtend()

◆ areCallingConvEligibleForTCO_64SVR4()

bool areCallingConvEligibleForTCO_64SVR4 ( CallingConv::ID CallerCC,
CallingConv::ID CalleeCC )
static

Definition at line 5086 of file PPCISelLowering.cpp.

References llvm::CallingConv::C, and llvm::CallingConv::Fast.

◆ buildCallOperands()

void buildCallOperands ( SmallVectorImpl< SDValue > & Ops,
PPCTargetLowering::CallFlags CFlags,
const SDLoc & dl,
SelectionDAG & DAG,
SmallVector< std::pair< unsigned, SDValue >, 8 > & RegsToPass,
SDValue Glue,
SDValue Chain,
SDValue & Callee,
int SPDiff,
const PPCSubtarget & Subtarget )
static

◆ BuildIntrinsicOp() [1/3]

SDValue BuildIntrinsicOp ( unsigned IID,
SDValue LHS,
SDValue RHS,
SelectionDAG & DAG,
const SDLoc & dl,
EVT DestVT = MVT::Other )
static

BuildIntrinsicOp - Return a binary operator intrinsic node with the specified intrinsic ID.

Definition at line 9439 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::ISD::INTRINSIC_WO_CHAIN, LHS, and RHS.

◆ BuildIntrinsicOp() [2/3]

SDValue BuildIntrinsicOp ( unsigned IID,
SDValue Op,
SelectionDAG & DAG,
const SDLoc & dl,
EVT DestVT = MVT::Other )
static

BuildIntrinsicOp - Return a unary operator intrinsic node with the specified intrinsic ID.

Definition at line 9430 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), and llvm::ISD::INTRINSIC_WO_CHAIN.

Referenced by llvm::PPCTargetLowering::PerformDAGCombine().

◆ BuildIntrinsicOp() [3/3]

SDValue BuildIntrinsicOp ( unsigned IID,
SDValue Op0,
SDValue Op1,
SDValue Op2,
SelectionDAG & DAG,
const SDLoc & dl,
EVT DestVT = MVT::Other )
static

BuildIntrinsicOp - Return a ternary operator intrinsic node with the specified intrinsic ID.

Definition at line 9449 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getValueType(), and llvm::ISD::INTRINSIC_WO_CHAIN.

◆ BuildVSLDOI()

SDValue BuildVSLDOI ( SDValue LHS,
SDValue RHS,
unsigned Amt,
EVT VT,
SelectionDAG & DAG,
const SDLoc & dl )
static

BuildVSLDOI - Return a VECTOR_SHUFFLE that is a vsldoi of the specified amount.

The result has the specified value type.

Definition at line 9459 of file PPCISelLowering.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, llvm::SelectionDAG::getNode(), llvm::SelectionDAG::getVectorShuffle(), LHS, RHS, and T.

Referenced by GeneratePerfectShuffle().

◆ CalculateStackSlotAlignment()

Align CalculateStackSlotAlignment ( EVT ArgVT,
EVT OrigVT,
ISD::ArgFlagsTy Flags,
unsigned PtrByteSize )
static

CalculateStackSlotAlignment - Calculates the alignment of this argument on the stack.

Definition at line 4175 of file PPCISelLowering.cpp.

References llvm::EVT::getStoreSize(), and llvm_unreachable.

Referenced by CalculateStackSlotUsed().

◆ CalculateStackSlotSize()

unsigned CalculateStackSlotSize ( EVT ArgVT,
ISD::ArgFlagsTy Flags,
unsigned PtrByteSize )
static

CalculateStackSlotSize - Calculates the size reserved for this argument on the stack.

Definition at line 4159 of file PPCISelLowering.cpp.

References llvm::EVT::getStoreSize().

Referenced by CalculateStackSlotUsed().

◆ CalculateStackSlotUsed()

bool CalculateStackSlotUsed ( EVT ArgVT,
EVT OrigVT,
ISD::ArgFlagsTy Flags,
unsigned PtrByteSize,
unsigned LinkageSize,
unsigned ParamAreaSize,
unsigned & ArgOffset,
unsigned & AvailableFPRs,
unsigned & AvailableVRs )
static

CalculateStackSlotUsed - Return whether this argument will use its stack slot (instead of being passed in registers).

ArgOffset, AvailableFPRs, and AvailableVRs must hold the current argument position, and will be updated to account for this argument.

Definition at line 4217 of file PPCISelLowering.cpp.

References llvm::alignTo(), CalculateStackSlotAlignment(), and CalculateStackSlotSize().

Referenced by needStackSlotPassParameters().

◆ CalculateTailCallArgDest()

void CalculateTailCallArgDest ( SelectionDAG & DAG,
MachineFunction & MF,
bool IsPPC64,
SDValue Arg,
int SPDiff,
unsigned ArgOffset,
SmallVectorImpl< TailCallArgumentInfo > & TailCallArguments )
static

◆ CalculateTailCallSPDiff()

int CalculateTailCallSPDiff ( SelectionDAG & DAG,
bool isTailCall,
unsigned ParamSize )
static

CalculateTailCallSPDiff - Get the amount the stack pointer has to be adjusted to accommodate the arguments for the tailcall.

Definition at line 4924 of file PPCISelLowering.cpp.

References llvm::MachineFunction::getInfo(), llvm::SelectionDAG::getMachineFunction(), llvm::PPCFunctionInfo::getMinReservedArea(), and llvm::PPCFunctionInfo::setTailCallSPDelta().

◆ callIntrinsic()

◆ callsShareTOCBase()

◆ CC_AIX()

◆ combineADDToADDZE()

◆ combineADDToMAT_PCREL_ADDR()

◆ combineBVOfConsecutiveLoads()

◆ combineBVOfVecSExt()

◆ combineBVZEXTLOAD()

◆ computeFlagsForAddressComputation()

void computeFlagsForAddressComputation ( SDValue N,
unsigned & FlagSet,
SelectionDAG & DAG )
static

Given a node, compute flags that are used for address computation when selecting load and store instructions.

The flags computed are stored in FlagSet. This function takes into account whether the node is a constant, an ADD, OR, or a constant, and computes the address flags accordingly.

Definition at line 19324 of file PPCISelLowering.cpp.

References llvm::ISD::ADD, llvm::dyn_cast(), llvm::APInt::getZExtValue(), llvm::APInt::isSignedIntN(), llvm::PPCISD::Lo, llvm::PPC::MOF_AddrIsSImm32, llvm::PPC::MOF_NotAddNorCst, llvm::PPC::MOF_RPlusLo, llvm::PPC::MOF_RPlusR, llvm::PPC::MOF_RPlusSImm16, llvm::PPC::MOF_RPlusSImm16Mult16, llvm::PPC::MOF_RPlusSImm16Mult4, llvm::PPC::MOF_RPlusSImm34, N, provablyDisjointOr(), RHS, and setAlignFlagsForFI().

◆ ConvertCarryFlagToCarryValue()

◆ ConvertCarryValueToCarryFlag()

◆ convertFPToInt()

◆ convertIntToFP()

◆ CreateCopyOfByValArgument()

SDValue CreateCopyOfByValArgument ( SDValue Src,
SDValue Dst,
SDValue Chain,
ISD::ArgFlagsTy Flags,
SelectionDAG & DAG,
const SDLoc & dl )
static

CreateCopyOfByValArgument - Make a copy of an aggregate at address specified by "Src" to address "Dst" of size "Size".

Alignment information is specified by the specific parameter attribute. The copy will be passed as a byval function parameter. Sometimes what we are copying is the end of a larger object, the part that does not fit in registers.

Definition at line 5327 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::getConstant(), and llvm::SelectionDAG::getMemcpy().

◆ DAGCombineAddc()

◆ EmitTailCallStoreFPAndRetAddr()

SDValue EmitTailCallStoreFPAndRetAddr ( SelectionDAG & DAG,
SDValue Chain,
SDValue OldRetAddr,
SDValue OldFP,
int SPDiff,
const SDLoc & dl )
static

◆ EnsureStackAlignment()

unsigned EnsureStackAlignment ( const PPCFrameLowering * Lowering,
unsigned NumBytes )
static

EnsureStackAlignment - Round stack frame size up from NumBytes to ensure minimum alignment required for target.

Definition at line 4265 of file PPCISelLowering.cpp.

References llvm::alignTo(), and Lowering.

◆ findConsecutiveLoad()

◆ fixupFuncForFI()

◆ fixupShuffleMaskForPermutedSToV()

void fixupShuffleMaskForPermutedSToV ( SmallVectorImpl< int > & ShuffV,
int LHSFirstElt,
int LHSLastElt,
int RHSFirstElt,
int RHSLastElt,
int HalfVec,
unsigned LHSNumValidElts,
unsigned RHSNumValidElts,
const PPCSubtarget & Subtarget )
static

◆ generateEquivalentSub()

SDValue generateEquivalentSub ( SDNode * N,
int Size,
bool Complement,
bool Swap,
SDLoc & DL,
SelectionDAG & DAG )
static

This function is called when we have proved that a SETCC node can be replaced by subtraction (and other supporting instructions) so that the result of comparison is kept in a GPR instead of CR.

This function is purely for codegen purposes and has some flags to guide the codegen process.

Definition at line 14915 of file PPCISelLowering.cpp.

References assert(), DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), N, llvm::ISD::SETCC, Size, llvm::ISD::SRL, llvm::ISD::SUB, std::swap(), llvm::ISD::TRUNCATE, llvm::ISD::XOR, and llvm::ISD::ZERO_EXTEND.

◆ GeneratePerfectShuffle()

SDValue GeneratePerfectShuffle ( unsigned PFEntry,
SDValue LHS,
SDValue RHS,
SelectionDAG & DAG,
const SDLoc & dl )
static

GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit the specified operations to build the shuffle.

Definition at line 10041 of file PPCISelLowering.cpp.

References assert(), BuildVSLDOI(), GeneratePerfectShuffle(), llvm::SelectionDAG::getNode(), llvm::SDValue::getValueType(), llvm::SelectionDAG::getVectorShuffle(), LHS, llvm_unreachable, OP_COPY, llvm::PerfectShuffleTable, RHS, and T.

◆ generateSToVPermutedForVecShuffle()

SDValue generateSToVPermutedForVecShuffle ( int ScalarSize,
uint64_t ShuffleEltWidth,
unsigned & NumValidElts,
int FirstElt,
int & LastElt,
SDValue VecShuffOperand,
SDValue SToVNode,
SelectionDAG & DAG,
const PPCSubtarget & Subtarget )
static

◆ getBaseWithConstantOffset()

void getBaseWithConstantOffset ( SDValue Loc,
SDValue & Base,
int64_t & Offset,
SelectionDAG & DAG )
static

◆ getCallOpcode()

◆ getCanonicalConstSplat()

SDValue getCanonicalConstSplat ( uint64_t Val,
unsigned SplatSize,
EVT VT,
SelectionDAG & DAG,
const SDLoc & dl )
static

getCanonicalConstSplat - Build a canonical splat immediate of Val with an element size of SplatSize.

Cast the result to VT.

Definition at line 9404 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::getBitcast(), and llvm::SelectionDAG::getConstant().

◆ getDataClassTest()

◆ getEstimateRefinementSteps()

int getEstimateRefinementSteps ( EVT VT,
const PPCSubtarget & Subtarget )
static

Definition at line 14608 of file PPCISelLowering.cpp.

References llvm::EVT::getScalarType().

◆ getIntrinsicForAtomicRMWBinOp128()

◆ getLabelAccessInfo()

void getLabelAccessInfo ( bool IsPIC,
const PPCSubtarget & Subtarget,
unsigned & HiOpFlags,
unsigned & LoOpFlags,
const GlobalValue * GV = nullptr )
static

Return true if we should reference labels using a PICBase, set the HiOpFlags and LoOpFlags to the target MO flags.

Definition at line 3143 of file PPCISelLowering.cpp.

References llvm::PPCII::MO_HA, llvm::PPCII::MO_LO, llvm::PPCII::MO_PIC_HA_FLAG, and llvm::PPCII::MO_PIC_LO_FLAG.

◆ getMaxByValAlign()

void getMaxByValAlign ( Type * Ty,
Align & MaxAlign,
Align MaxMaxAlign )
static

getMaxByValAlign - Helper for getByValTypeAlignment to determine the desired ByVal argument alignment.

Definition at line 1592 of file PPCISelLowering.cpp.

References llvm::dyn_cast(), and getMaxByValAlign().

Referenced by llvm::PPCTargetLowering::getByValTypeAlignment(), llvm::X86TargetLowering::getByValTypeAlignment(), getMaxByValAlign(), and getMaxByValAlign().

◆ getNormalLoadInput()

◆ getOutputChainFromCallSeq()

SDValue getOutputChainFromCallSeq ( SDValue CallSeqStart)
static

◆ getPPCStrictOpcode()

◆ getRegClassForSVT()

const TargetRegisterClass * getRegClassForSVT ( MVT::SimpleValueType SVT,
bool IsPPC64,
bool HasP8Vector,
bool HasVSX )
static

Definition at line 7135 of file PPCISelLowering.cpp.

References assert(), and llvm::report_fatal_error().

◆ getSToVPermuted()

◆ getVectorCompareInfo()

bool getVectorCompareInfo ( SDValue Intrin,
int & CompareOpc,
bool & isDot,
const PPCSubtarget & Subtarget )
static

getVectorCompareInfo - Given an intrinsic, return false if it is not a vector comparison.

If it is, return true and fill in Opc/isDot with information about the intrinsic.

Definition at line 10866 of file PPCISelLowering.cpp.

References llvm::SDValue::getConstantOperandVal(), and llvm_unreachable.

Referenced by llvm::PPCTargetLowering::PerformDAGCombine().

◆ hasSameArgumentList()

◆ haveEfficientBuildVectorPattern()

bool haveEfficientBuildVectorPattern ( BuildVectorSDNode * V,
bool HasDirectMove,
bool HasP8Vector )
static

Do we have an efficient pattern in a .td file for this node?

Parameters
V- pointer to the BuildVectorSDNode being matched
HasDirectMove- does this subtarget have VSR <-> GPR direct moves?

There are some patterns where it is beneficial to keep a BUILD_VECTOR node as a BUILD_VECTOR node rather than expanding it. The patterns where the opposite is true (expansion is beneficial) are:

  • The node builds a vector out of integers that are not 32 or 64-bits
  • The node builds a vector out of constants
  • The node is a "load-and-splat" In all other cases, we will choose to keep the BUILD_VECTOR.

Definition at line 9484 of file PPCISelLowering.cpp.

References llvm::ISD::FP_ROUND, llvm::ISD::FP_TO_SINT, llvm::ISD::FP_TO_UINT, and llvm::SDNode::getOperand().

◆ invertFMAOpcode()

unsigned invertFMAOpcode ( unsigned Opc)
static

Definition at line 18619 of file PPCISelLowering.cpp.

References llvm::ISD::FMA, llvm::PPCISD::FNMSUB, llvm_unreachable, and Opc.

◆ isAlternatingShuffMask()

bool isAlternatingShuffMask ( const ArrayRef< int > & Mask,
int NumElts )
static

Definition at line 16318 of file PPCISelLowering.cpp.

◆ isBLACompatibleAddress()

SDNode * isBLACompatibleAddress ( SDValue Op,
SelectionDAG & DAG )
static

isCallCompatibleAddress - Return the immediate to use if the specified 32-bit value is representable in the immediate field of a BxA instruction.

Definition at line 5221 of file PPCISelLowering.cpp.

References llvm::CallingConv::C, llvm::dyn_cast(), llvm::SelectionDAG::getDataLayout(), llvm::SDValue::getNode(), llvm::TargetLoweringBase::getPointerTy(), llvm::SelectionDAG::getSignedConstant(), llvm::SelectionDAG::getTargetLoweringInfo(), and llvm::SignExtend32().

Referenced by isIndirectCall(), and transformCallee().

◆ isConsecutiveLS()

bool isConsecutiveLS ( SDNode * N,
LSBaseSDNode * Base,
unsigned Bytes,
int Dist,
SelectionDAG & DAG )
static

◆ isConsecutiveLSLoc()

◆ isConstantOrUndef()

bool isConstantOrUndef ( int Op,
int Val )
static

isConstantOrUndef - Op is either an undef node or a ConstantSDNode.

Return true if Op is undef or if it matches the specified value.

Definition at line 1880 of file PPCISelLowering.cpp.

◆ isFloatingPointZero()

bool isFloatingPointZero ( SDValue Op)
static

isFloatingPointZero - Return true if this is 0.0 or -0.0.

Definition at line 1866 of file PPCISelLowering.cpp.

References llvm::dyn_cast(), llvm::ISD::isEXTLoad(), and llvm::ISD::isNON_EXTLoad().

◆ isFPExtLoad()

bool isFPExtLoad ( SDValue Op)
static

Definition at line 15569 of file PPCISelLowering.cpp.

References llvm::dyn_cast(), and llvm::ISD::EXTLOAD.

◆ isFunctionGlobalAddress()

bool isFunctionGlobalAddress ( const GlobalValue * CalleeGV)
static

◆ isGPRShadowAligned()

bool isGPRShadowAligned ( MCPhysReg Reg,
Align RequiredAlign )
static

Definition at line 6858 of file PPCISelLowering.cpp.

References assert(), Reg, llvm::report_fatal_error(), and llvm::Align::value().

Referenced by CC_AIX().

◆ isIndirectCall()

◆ isNByteElemShuffleMask()

bool isNByteElemShuffleMask ( ShuffleVectorSDNode * N,
unsigned Width,
int StepLen )
static

Check that the mask is shuffling N byte elements.

Within each N byte element of the mask, the indices could be either in increasing or decreasing order as long as they are consecutive.

Parameters
[in]Nthe shuffle vector SD Node to analyze
[in]Widththe element width in bytes, could be 2/4/8/16 (HalfWord/ Word/DoubleWord/QuadWord).
[in]StepLenthe delta indices number among the N byte element, if the mask is in increasing/decreasing order then it is 1/-1.
Returns
true iff the mask is shuffling N byte elements.

Definition at line 2263 of file PPCISelLowering.cpp.

References assert(), and N.

Referenced by isXXBRShuffleMaskHelper(), llvm::PPC::isXXINSERTWMask(), llvm::PPC::isXXPERMDIShuffleMask(), and llvm::PPC::isXXSLDWIShuffleMask().

◆ isPCRelNode()

bool isPCRelNode ( SDValue N)
static

◆ isScalarToVec()

SDValue isScalarToVec ( SDValue Op)
static

Definition at line 16351 of file PPCISelLowering.cpp.

References llvm::ISD::SCALAR_TO_VECTOR, and SDValue().

◆ IsSelect()

◆ IsSelectCC()

bool IsSelectCC ( MachineInstr & MI)
static

Definition at line 13769 of file PPCISelLowering.cpp.

References MI.

Referenced by llvm::PPCTargetLowering::EmitInstrWithCustomInserter().

◆ isShuffleMaskInRange()

bool isShuffleMaskInRange ( const SmallVectorImpl< int > & ShuffV,
int HalfVec,
int LHSLastElementDefined,
int RHSLastElementDefined )
static

Definition at line 16422 of file PPCISelLowering.cpp.

◆ isSignExtended()

bool isSignExtended ( MachineInstr & MI,
const PPCInstrInfo * TII )
static

Definition at line 13064 of file PPCISelLowering.cpp.

References MI, and TII.

◆ isSplatBV()

bool isSplatBV ( SDValue Op)
static

Definition at line 16332 of file PPCISelLowering.cpp.

References llvm::ISD::BUILD_VECTOR, and llvm::SDValue::isUndef().

◆ isStoreConditional()

bool isStoreConditional ( SDValue Intrin,
unsigned & StoreWidth )
static

◆ isTOCSaveRestoreRequired()

bool isTOCSaveRestoreRequired ( const PPCSubtarget & Subtarget)
inlinestatic

◆ isValidMtVsrBmi()

◆ isValidPCRelNode()

template<typename Ty>
bool isValidPCRelNode ( SDValue N)
static

◆ isValidSplatLoad()

◆ isVMerge() [1/2]

bool isVMerge ( ShuffleVectorSDNode * N,
unsigned IndexOffset,
unsigned RHSStartValue )
static

Common function used to match vmrgew and vmrgow shuffles.

The indexOffset determines whether to look for even or odd words in the shuffle mask. This is based on the of the endianness of the target machine.

  • Little Endian:
    • Use offset of 0 to check for odd elements
    • Use offset of 4 to check for even elements
  • Big Endian:

The mask to the shuffle vector instruction specifies the indices of the elements from the two input vectors to place in the result. The elements are numbered in array-access order, starting with the first vector. These vectors are always of type v16i8, thus each vector will contain 16 elements of size

  1. More info on the shuffle vector can be found in the http://llvm.org/docs/LangRef.html#shufflevector-instruction Language Reference.

The RHSStartValue indicates whether the same input vectors are used (unary) or two different input vectors are used, based on the following:

  • If the instruction uses the same vector for both inputs, the range of the indices will be 0 to 15. In this case, the RHSStart value passed should be 0.
  • If the instruction has two different vectors then the range of the indices will be 0 to 31. In this case, the RHSStart value passed should be 16 (indices 0-15 specify elements in the first vector while indices 16 to 31 specify elements in the second vector).
Parameters
[in]NThe shuffle vector SD Node to analyze
[in]IndexOffsetSpecifies whether to look for even or odd elements
[in]RHSStartValueSpecifies the starting index for the righthand input vector to the shuffle_vector instruction
Returns
true iff this shuffle vector represents an even or odd word merge

Definition at line 2111 of file PPCISelLowering.cpp.

References isConstantOrUndef(), and N.

◆ isVMerge() [2/2]

bool isVMerge ( ShuffleVectorSDNode * N,
unsigned UnitSize,
unsigned LHSStart,
unsigned RHSStart )
static

isVMerge - Common function, used to match vmrg* shuffles.

Definition at line 2001 of file PPCISelLowering.cpp.

References assert(), isConstantOrUndef(), and N.

Referenced by llvm::PPC::isVMRGEOShuffleMask(), llvm::PPC::isVMRGHShuffleMask(), and llvm::PPC::isVMRGLShuffleMask().

◆ isXXBRShuffleMaskHelper()

◆ LowerLabelRef()

◆ LowerMemOpCallTo()

void LowerMemOpCallTo ( SelectionDAG & DAG,
MachineFunction & MF,
SDValue Chain,
SDValue Arg,
SDValue PtrOff,
int SPDiff,
unsigned ArgOffset,
bool isPPC64,
bool isTailCall,
bool isVector,
SmallVectorImpl< SDValue > & MemOpChains,
SmallVectorImpl< TailCallArgumentInfo > & TailCallArguments,
const SDLoc & dl )
static

◆ mapArgRegToOffsetAIX()

unsigned mapArgRegToOffsetAIX ( unsigned Reg,
const PPCFrameLowering * FL )
static

◆ needStackSlotPassParameters()

◆ prepareDescriptorIndirectCall()

◆ prepareIndirectCall()

void prepareIndirectCall ( SelectionDAG & DAG,
SDValue & Callee,
SDValue & Glue,
SDValue & Chain,
const SDLoc & dl )
static

◆ PrepareTailCall()

◆ provablyDisjointOr()

bool provablyDisjointOr ( SelectionDAG & DAG,
const SDValue & N )
static

Used when computing address flags for selecting loads and stores.

If we have an OR, check if the LHS and RHS are provably disjoint. An OR of two provably disjoint values is equivalent to an ADD. Most PPC load/store instructions compute the effective address as a sum, so doing this conversion is useful.

Definition at line 2667 of file PPCISelLowering.cpp.

References llvm::SelectionDAG::computeKnownBits(), llvm::APInt::getBoolValue(), N, llvm::ISD::OR, and llvm::KnownBits::Zero.

Referenced by computeFlagsForAddressComputation(), and llvm::PPCTargetLowering::SelectForceXFormMode().

◆ setAlignFlagsForFI()

void setAlignFlagsForFI ( SDValue N,
unsigned & FlagSet,
SelectionDAG & DAG )
static

Set alignment flags based on whether or not the Frame Index is aligned.

Utilized when computing flags for address computation when selecting load and store instructions.

Definition at line 19295 of file PPCISelLowering.cpp.

References llvm::ISD::ADD, llvm::dyn_cast(), llvm::MachineFunction::getFrameInfo(), llvm::FrameIndexSDNode::getIndex(), llvm::SelectionDAG::getMachineFunction(), llvm::MachineFrameInfo::getObjectAlign(), llvm::PPC::MOF_RPlusSImm16Mult16, llvm::PPC::MOF_RPlusSImm16Mult4, N, llvm::ISD::OR, and llvm::Align::value().

Referenced by computeFlagsForAddressComputation().

◆ setUsesTOCBasePtr() [1/2]

◆ setUsesTOCBasePtr() [2/2]

void setUsesTOCBasePtr ( SelectionDAG & DAG)
static

◆ setXFormForUnalignedFI()

◆ STATISTIC() [1/4]

STATISTIC ( NumDynamicAllocaProbed ,
"Number of dynamic stack allocation probed"  )

◆ STATISTIC() [2/4]

STATISTIC ( NumSiblingCalls ,
"Number of sibling calls"  )

◆ STATISTIC() [3/4]

STATISTIC ( NumTailCalls ,
"Number of tail calls"  )

◆ STATISTIC() [4/4]

STATISTIC ( ShufflesHandledWithVPERM ,
"Number of shuffles lowered to a VPERM or XXPERM"  )

◆ StoreTailCallArgumentsToStackSlot()

void StoreTailCallArgumentsToStackSlot ( SelectionDAG & DAG,
SDValue Chain,
const SmallVectorImpl< TailCallArgumentInfo > & TailCallArgs,
SmallVectorImpl< SDValue > & MemOpChains,
const SDLoc & dl )
static

◆ stripModuloOnShift()

◆ transformCallee()

◆ truncateScalarIntegerArg()

◆ updateForAIXShLibTLSModelOpt()

◆ usePartialVectorLoads()

bool usePartialVectorLoads ( SDNode * N,
const PPCSubtarget & ST )
static

Returns true if we should use a direct load into vector instruction (such as lxsd or lfd), instead of a load into gpr + direct move sequence.

Definition at line 3012 of file PPCISelLowering.cpp.

References llvm::dyn_cast(), llvm::EVT::getSimpleVT(), llvm::Use::getUser(), llvm::SDValue::hasOneUse(), llvm::EVT::isSimple(), N, llvm::ISD::SCALAR_TO_VECTOR, llvm::PPCISD::SCALAR_TO_VECTOR_PERMUTED, and llvm::MVT::SimpleTy.

Referenced by llvm::PPCTargetLowering::getPreIndexedAddressParts().

◆ widenVec()

Variable Documentation

◆ AIXSmallTlsPolicySizeLimit

uint64_t AIXSmallTlsPolicySizeLimit = 32751
constexpr

Definition at line 164 of file PPCISelLowering.cpp.

◆ ANDIGlueBug

cl::opt<bool> ANDIGlueBug
extern

◆ DisableAutoPairedVecSt

cl::opt< bool > DisableAutoPairedVecSt("disable-auto-paired-vec-st", cl::desc("disable automatically generated 32byte paired vector stores"), cl::init(true), cl::Hidden) ( "disable-auto-paired-vec-st" ,
cl::desc("disable automatically generated 32byte paired vector stores") ,
cl::init(true) ,
cl::Hidden  )

◆ DisableILPPref

cl::opt< bool > DisableILPPref("disable-ppc-ilp-pref", cl::desc("disable setting the node scheduling preference to ILP on PPC"), cl::Hidden) ( "disable-ppc-ilp-pref" ,
cl::desc("disable setting the node scheduling preference to ILP on PPC") ,
cl::Hidden  )
static

◆ DisableInnermostLoopAlign32

cl::opt< bool > DisableInnermostLoopAlign32("disable-ppc-innermost-loop-align32", cl::desc("don't always align innermost loop to 32 bytes on ppc"), cl::Hidden) ( "disable-ppc-innermost-loop-align32" ,
cl::desc("don't always align innermost loop to 32 bytes on ppc") ,
cl::Hidden  )
static

◆ DisableP10StoreForward

cl::opt< bool > DisableP10StoreForward("disable-p10-store-forward", cl::desc("disable P10 store forward-friendly conversion"), cl::Hidden, cl::init(false)) ( "disable-p10-store-forward" ,
cl::desc("disable P10 store forward-friendly conversion") ,
cl::Hidden ,
cl::init(false)  )
static

◆ DisablePerfectShuffle

cl::opt< bool > DisablePerfectShuffle("ppc-disable-perfect-shuffle", cl::desc("disable vector permute decomposition"), cl::init(true), cl::Hidden) ( "ppc-disable-perfect-shuffle" ,
cl::desc("disable vector permute decomposition") ,
cl::init(true) ,
cl::Hidden  )
static

◆ DisablePPCPreinc

cl::opt< bool > DisablePPCPreinc("disable-ppc-preinc", cl::desc("disable preincrement load/store generation on PPC"), cl::Hidden) ( "disable-ppc-preinc" ,
cl::desc("disable preincrement load/store generation on PPC") ,
cl::Hidden  )
static

◆ DisablePPCUnaligned

cl::opt< bool > DisablePPCUnaligned("disable-ppc-unaligned", cl::desc("disable unaligned load/store generation on PPC"), cl::Hidden) ( "disable-ppc-unaligned" ,
cl::desc("disable unaligned load/store generation on PPC") ,
cl::Hidden  )
static

◆ DisableSCO

cl::opt< bool > DisableSCO("disable-ppc-sco", cl::desc("disable sibling call optimization on ppc"), cl::Hidden) ( "disable-ppc-sco" ,
cl::desc("disable sibling call optimization on ppc") ,
cl::Hidden  )
static

◆ FPR

const MCPhysReg FPR[]
static
Initial value:
= {PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5,
PPC::F6, PPC::F7, PPC::F8, PPC::F9, PPC::F10,
PPC::F11, PPC::F12, PPC::F13}

FPR - The set of FP registers that should be allocated for arguments on Darwin and AIX.

Definition at line 4153 of file PPCISelLowering.cpp.

Referenced by llvm::AArch64RegisterBankInfo::AArch64RegisterBankInfo(), CC_AIX(), and llvm::SystemZMachineFunctionInfo::setVarArgsFirstFPR().

◆ PPCAIXTLSModelOptUseIEForLDLimit

cl::opt< unsigned > PPCAIXTLSModelOptUseIEForLDLimit("ppc-aix-shared-lib-tls-model-opt-limit", cl::init(1), cl::Hidden, cl::desc("Set inclusive limit count of TLS local-dynamic access(es) in a " "function to use initial-exec")) ( "ppc-aix-shared-lib-tls-model-opt-limit" ,
cl::init(1) ,
cl::Hidden ,
cl::desc("Set inclusive limit count of TLS local-dynamic access(es) in a " "function to use initial-exec")  )
static

◆ PPCGatherAllAliasesMaxDepth

cl::opt< unsigned > PPCGatherAllAliasesMaxDepth("ppc-gather-alias-max-depth", cl::init(18), cl::Hidden, cl::desc("max depth when checking alias info in GatherAllAliases()")) ( "ppc-gather-alias-max-depth" ,
cl::init(18) ,
cl::Hidden ,
cl::desc("max depth when checking alias info in GatherAllAliases()")  )
static

◆ PPCMinimumJumpTableEntries

cl::opt< unsigned > PPCMinimumJumpTableEntries("ppc-min-jump-table-entries", cl::init(64), cl::Hidden, cl::desc("Set minimum number of entries to use a jump table on PPC")) ( "ppc-min-jump-table-entries" ,
cl::init(64) ,
cl::Hidden ,
cl::desc("Set minimum number of entries to use a jump table on PPC")  )
static

◆ UseAbsoluteJumpTables

cl::opt< bool > UseAbsoluteJumpTables("ppc-use-absolute-jumptables", cl::desc("use absolute jump tables on ppc"), cl::Hidden) ( "ppc-use-absolute-jumptables" ,
cl::desc("use absolute jump tables on ppc") ,
cl::Hidden  )
static