LLVM 20.0.0git
|
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "ScheduleDAGSDNodes.h"
#include "SelectionDAGBuilder.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/PostOrderIterator.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/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/Analysis/CFG.h"
#include "llvm/Analysis/LazyBlockFrequencyInfo.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/UniformityAnalysis.h"
#include "llvm/CodeGen/AssignmentTrackingAnalysis.h"
#include "llvm/CodeGen/CodeGenCommonISel.h"
#include "llvm/CodeGen/FastISel.h"
#include "llvm/CodeGen/FunctionLoweringInfo.h"
#include "llvm/CodeGen/GCMetadata.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachinePassRegistry.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SchedulerRegistry.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/CodeGen/StackMaps.h"
#include "llvm/CodeGen/StackProtector.h"
#include "llvm/CodeGen/SwiftErrorValueTracking.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/CodeGen/WinEHFuncInfo.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/EHPersonalities.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsWebAssembly.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PrintPasses.h"
#include "llvm/IR/Statepoint.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/InitializePasses.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/Pass.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/KnownBits.h"
#include "llvm/Support/Timer.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetIntrinsicInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <iterator>
#include <limits>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
Go to the source code of this file.
Classes | |
class | llvm::OptLevelChanger |
This class is used by SelectionDAGISel to temporarily override the optimization level on a per-function basis. More... | |
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
Macros | |
#define | DEBUG_TYPE "isel" |
#define | ISEL_DUMP_DEBUG_TYPE DEBUG_TYPE "-dump" |
#define | ISEL_DUMP(X) |
Functions | |
STATISTIC (NumFastIselFailures, "Number of instructions fast isel failed on") | |
STATISTIC (NumFastIselSuccess, "Number of instructions fast isel selected") | |
STATISTIC (NumFastIselBlocks, "Number of blocks selected entirely by fast isel") | |
STATISTIC (NumDAGBlocks, "Number of blocks selected using DAG") | |
STATISTIC (NumDAGIselRetries,"Number of times dag isel has to try another path") | |
STATISTIC (NumEntryBlocks, "Number of entry blocks encountered") | |
STATISTIC (NumFastIselFailLowerArguments, "Number of entry blocks where fast isel failed to lower arguments") | |
static bool | dontUseFastISelFor (const Function &Fn) |
ScheduleDAGSDNodes * | llvm::createDefaultScheduler (SelectionDAGISel *IS, CodeGenOptLevel OptLevel) |
createDefaultScheduler - This creates an instruction scheduler appropriate for the target. | |
static void | reportFastISelFailure (MachineFunction &MF, OptimizationRemarkEmitter &ORE, OptimizationRemarkMissed &R, bool ShouldAbort) |
static void | preserveFakeUses (BasicBlock::iterator Begin, BasicBlock::iterator End) |
static bool | hasExceptionPointerOrCodeUser (const CatchPadInst *CPI) |
static void | mapWasmLandingPadIndex (MachineBasicBlock *MBB, const CatchPadInst *CPI) |
static bool | isFoldedOrDeadInstruction (const Instruction *I, const FunctionLoweringInfo &FuncInfo) |
isFoldedOrDeadInstruction - Return true if the specified instruction is side-effect free and is either dead or folded into a generated instruction. | |
static bool | processIfEntryValueDbgDeclare (FunctionLoweringInfo &FuncInfo, const Value *Arg, DIExpression *Expr, DILocalVariable *Var, DebugLoc DbgLoc) |
static bool | processDbgDeclare (FunctionLoweringInfo &FuncInfo, const Value *Address, DIExpression *Expr, DILocalVariable *Var, DebugLoc DbgLoc) |
static void | processDbgDeclares (FunctionLoweringInfo &FuncInfo) |
Collect llvm.dbg.declare information. | |
static void | processSingleLocVars (FunctionLoweringInfo &FuncInfo, FunctionVarLocs const *FnVarLocs) |
Collect single location variable information generated with assignment tracking. | |
static bool | findNonImmUse (SDNode *Root, SDNode *Def, SDNode *ImmedUse, bool IgnoreChains) |
findNonImmUse - Return true if "Def" is a predecessor of "Root" via a path beyond "ImmedUse". | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE uint64_t | GetVBR (uint64_t Val, const unsigned char *MatcherTable, unsigned &Idx) |
GetVBR - decode a vbr encoding whose top bit is set. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE MVT::SimpleValueType | getSimpleVT (const unsigned char *MatcherTable, unsigned &MatcherIndex) |
getSimpleVT - Decode a value in MatcherTable, if it's a VBR encoded value, use GetVBR to decode it. | |
static SDValue | HandleMergeInputChains (SmallVectorImpl< SDNode * > &ChainNodesMatched, SelectionDAG *CurDAG) |
HandleMergeInputChains - This implements the OPC_EmitMergeInputChains operation for when the pattern matched at least one node with a chains. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckSame (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, const SmallVectorImpl< std::pair< SDValue, SDNode * > > &RecordedNodes) |
CheckSame - Implements OP_CheckSame. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckChildSame (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, const SmallVectorImpl< std::pair< SDValue, SDNode * > > &RecordedNodes, unsigned ChildNo) |
CheckChildSame - Implements OP_CheckChildXSame. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckPatternPredicate (unsigned Opcode, const unsigned char *MatcherTable, unsigned &MatcherIndex, const SelectionDAGISel &SDISel) |
CheckPatternPredicate - Implements OP_CheckPatternPredicate. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckNodePredicate (unsigned Opcode, const unsigned char *MatcherTable, unsigned &MatcherIndex, const SelectionDAGISel &SDISel, SDNode *N) |
CheckNodePredicate - Implements OP_CheckNodePredicate. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckOpcode (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDNode *N) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckType (MVT::SimpleValueType VT, SDValue N, const TargetLowering *TLI, const DataLayout &DL) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckChildType (MVT::SimpleValueType VT, SDValue N, const TargetLowering *TLI, const DataLayout &DL, unsigned ChildNo) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckCondCode (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckChild2CondCode (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckValueType (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, const TargetLowering *TLI, const DataLayout &DL) |
static uint64_t | decodeSignRotatedValue (uint64_t V) |
Decode a signed value stored with the sign bit in the LSB for dense VBR encoding. | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckInteger (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckChildInteger (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, unsigned ChildNo) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckAndImm (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, const SelectionDAGISel &SDISel) |
static LLVM_ATTRIBUTE_ALWAYS_INLINE bool | CheckOrImm (const unsigned char *MatcherTable, unsigned &MatcherIndex, SDValue N, const SelectionDAGISel &SDISel) |
static unsigned | IsPredicateKnownToFail (const unsigned char *Table, unsigned Index, SDValue N, bool &Result, const SelectionDAGISel &SDISel, SmallVectorImpl< std::pair< SDValue, SDNode * > > &RecordedNodes) |
IsPredicateKnownToFail - If we know how and can do so without pushing a scope, evaluate the current node. | |
Variables | |
static cl::opt< int > | EnableFastISelAbort ("fast-isel-abort", cl::Hidden, cl::desc("Enable abort calls when \"fast\" instruction selection " "fails to lower an instruction: 0 disable the abort, 1 will " "abort but for args, calls and terminators, 2 will also " "abort for argument lowering, and 3 will never fallback " "to SelectionDAG.")) |
static cl::opt< bool > | EnableFastISelFallbackReport ("fast-isel-report-on-fallback", cl::Hidden, cl::desc("Emit a diagnostic when \"fast\" instruction selection " "falls back to SelectionDAG.")) |
static cl::opt< bool > | UseMBPI ("use-mbpi", cl::desc("use Machine Branch Probability Info"), cl::init(true), cl::Hidden) |
static cl::opt< std::string > | FilterDAGBasicBlockName ("filter-view-dags", cl::Hidden, cl::desc("Only display the basic block whose name " "matches this for all view-*-dags options")) |
static cl::opt< bool > | ViewDAGCombine1 ("view-dag-combine1-dags", cl::Hidden, cl::desc("Pop up a window to show dags before the first " "dag combine pass")) |
static cl::opt< bool > | ViewLegalizeTypesDAGs ("view-legalize-types-dags", cl::Hidden, cl::desc("Pop up a window to show dags before legalize types")) |
static cl::opt< bool > | ViewDAGCombineLT ("view-dag-combine-lt-dags", cl::Hidden, cl::desc("Pop up a window to show dags before the post " "legalize types dag combine pass")) |
static cl::opt< bool > | ViewLegalizeDAGs ("view-legalize-dags", cl::Hidden, cl::desc("Pop up a window to show dags before legalize")) |
static cl::opt< bool > | ViewDAGCombine2 ("view-dag-combine2-dags", cl::Hidden, cl::desc("Pop up a window to show dags before the second " "dag combine pass")) |
static cl::opt< bool > | ViewISelDAGs ("view-isel-dags", cl::Hidden, cl::desc("Pop up a window to show isel dags as they are selected")) |
static cl::opt< bool > | ViewSchedDAGs ("view-sched-dags", cl::Hidden, cl::desc("Pop up a window to show sched dags as they are processed")) |
static cl::opt< bool > | ViewSUnitDAGs ("view-sunit-dags", cl::Hidden, cl::desc("Pop up a window to show SUnit dags after they are processed")) |
static cl::opt< RegisterScheduler::FunctionPassCtor, false, RegisterPassParser< RegisterScheduler > > | ISHeuristic ("pre-RA-sched", cl::init(&createDefaultScheduler), cl::Hidden, cl::desc("Instruction schedulers available (before register" " allocation):")) |
ISHeuristic command line option for instruction schedulers. | |
static RegisterScheduler | defaultListDAGScheduler ("default", "Best scheduler for the target", createDefaultScheduler) |
#define DEBUG_TYPE "isel" |
Definition at line 117 of file SelectionDAGISel.cpp.
#define ISEL_DUMP | ( | X | ) |
Definition at line 187 of file SelectionDAGISel.cpp.
#define ISEL_DUMP_DEBUG_TYPE DEBUG_TYPE "-dump" |
Definition at line 118 of file SelectionDAGISel.cpp.
|
static |
Definition at line 2989 of file SelectionDAGISel.cpp.
References llvm::ISD::AND, llvm::CallingConv::C, llvm::SelectionDAGISel::CheckAndMask(), GetVBR(), and N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2938 of file SelectionDAGISel.cpp.
References N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2981 of file SelectionDAGISel.cpp.
References N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
CheckChildSame - Implements OP_CheckChildXSame.
Definition at line 2867 of file SelectionDAGISel.cpp.
References N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2923 of file SelectionDAGISel.cpp.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2931 of file SelectionDAGISel.cpp.
References N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2968 of file SelectionDAGISel.cpp.
References llvm::CallingConv::C, decodeSignRotatedValue(), GetVBR(), and N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
CheckNodePredicate - Implements OP_CheckNodePredicate.
Definition at line 2894 of file SelectionDAGISel.cpp.
References llvm::SelectionDAGISel::CheckNodePredicate(), N, llvm::SelectionDAGISel::OPC_CheckPredicate, and llvm::SelectionDAGISel::OPC_CheckPredicate0.
Referenced by IsPredicateKnownToFail().
|
static |
Definition at line 2904 of file SelectionDAGISel.cpp.
References N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 3002 of file SelectionDAGISel.cpp.
References llvm::CallingConv::C, llvm::SelectionDAGISel::CheckOrMask(), GetVBR(), N, and llvm::ISD::OR.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
CheckPatternPredicate - Implements OP_CheckPatternPredicate.
Definition at line 2879 of file SelectionDAGISel.cpp.
References llvm::SelectionDAGISel::CheckPatternPredicate(), llvm::SelectionDAGISel::OPC_CheckPatternPredicate, llvm::SelectionDAGISel::OPC_CheckPatternPredicate0, and llvm::SelectionDAGISel::OPC_CheckPatternPredicateTwoByte.
Referenced by IsPredicateKnownToFail().
|
static |
CheckSame - Implements OP_CheckSame.
Definition at line 2858 of file SelectionDAGISel.cpp.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2911 of file SelectionDAGISel.cpp.
References DL, llvm::TargetLoweringBase::getPointerTy(), and N.
Referenced by llvm::getPointersDiff(), llvm::isConsecutiveAccess(), IsPredicateKnownToFail(), ProfileExistsOpInit(), ProfileIsAOpInit(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 2946 of file SelectionDAGISel.cpp.
References DL, llvm::TargetLoweringBase::getPointerTy(), getSimpleVT(), and N.
Referenced by IsPredicateKnownToFail(), and llvm::SelectionDAGISel::SelectCodeCommon().
Decode a signed value stored with the sign bit in the LSB for dense VBR encoding.
Definition at line 2958 of file SelectionDAGISel.cpp.
Referenced by CheckInteger(), and llvm::SelectionDAGISel::SelectCodeCommon().
Definition at line 223 of file SelectionDAGISel.cpp.
References llvm::any_of(), and llvm::Function::args().
Referenced by llvm::OptLevelChanger::OptLevelChanger().
|
static |
findNonImmUse - Return true if "Def" is a predecessor of "Root" via a path beyond "ImmedUse".
We may ignore chains as they are checked separately.
Definition at line 2334 of file SelectionDAGISel.cpp.
References llvm::SDNode::hasPredecessorHelper(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SDNode::isOnlyUserOf(), N, llvm::SDNode::op_values(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::SelectionDAGISel::IsLegalToFold().
|
static |
getSimpleVT - Decode a value in MatcherTable, if it's a VBR encoded value, use GetVBR to decode it.
Definition at line 2661 of file SelectionDAGISel.cpp.
References GetVBR().
Referenced by CheckValueType(), IsPredicateKnownToFail(), llvm::TargetLowering::LowerCallTo(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
GetVBR - decode a vbr encoding whose top bit is set.
Definition at line 2643 of file SelectionDAGISel.cpp.
Referenced by CheckAndImm(), CheckInteger(), CheckOrImm(), getSimpleVT(), and llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
HandleMergeInputChains - This implements the OPC_EmitMergeInputChains operation for when the pattern matched at least one node with a chains.
The input vector contains a list of all of the chained nodes that we match. We must determine if this is a valid thing to cover (i.e. matching it won't induce cycles in the DAG) and if so, creating a TokenFactor node. that will be used as the input node chain for the generated nodes.
Definition at line 2737 of file SelectionDAGISel.cpp.
References llvm::SmallPtrSetImplBase::clear(), llvm::SmallVectorBase< Size_T >::empty(), llvm::ISD::EntryToken, llvm::SelectionDAG::getEntryNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::hasPredecessorHelper(), llvm::SmallPtrSetImpl< PtrType >::insert(), N, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorBase< Size_T >::size(), and llvm::ISD::TokenFactor.
Referenced by llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 1361 of file SelectionDAGISel.cpp.
References llvm::Value::users().
|
static |
isFoldedOrDeadInstruction - Return true if the specified instruction is side-effect free and is either dead or folded into a generated instruction.
Return false if it needs to be emitted.
Definition at line 1510 of file SelectionDAGISel.cpp.
References I, and llvm::FunctionLoweringInfo::isExportedInst().
|
static |
IsPredicateKnownToFail - If we know how and can do so without pushing a scope, evaluate the current node.
If the current predicate is known to fail, set Result=true and return anything. If the current predicate is known to pass, set Result=false and return the MatcherIndex to continue with. If the current predicate is unknown, set Result=false and return the MatcherIndex to continue with.
Definition at line 3020 of file SelectionDAGISel.cpp.
References CheckAndImm(), CheckChild2CondCode(), CheckChildInteger(), CheckChildSame(), CheckChildType(), CheckCondCode(), CheckInteger(), CheckNodePredicate(), CheckOpcode(), CheckOrImm(), CheckPatternPredicate(), CheckSame(), CheckType(), CheckValueType(), llvm::SelectionDAGISel::CurDAG, llvm::SelectionDAG::getDataLayout(), getSimpleVT(), N, llvm::SelectionDAGISel::OPC_CheckAndImm, llvm::SelectionDAGISel::OPC_CheckChild0Integer, llvm::SelectionDAGISel::OPC_CheckChild0Same, llvm::SelectionDAGISel::OPC_CheckChild0Type, llvm::SelectionDAGISel::OPC_CheckChild0TypeI32, llvm::SelectionDAGISel::OPC_CheckChild0TypeI64, llvm::SelectionDAGISel::OPC_CheckChild1Integer, llvm::SelectionDAGISel::OPC_CheckChild1Same, llvm::SelectionDAGISel::OPC_CheckChild1Type, llvm::SelectionDAGISel::OPC_CheckChild1TypeI32, llvm::SelectionDAGISel::OPC_CheckChild1TypeI64, llvm::SelectionDAGISel::OPC_CheckChild2CondCode, llvm::SelectionDAGISel::OPC_CheckChild2Integer, llvm::SelectionDAGISel::OPC_CheckChild2Same, llvm::SelectionDAGISel::OPC_CheckChild2Type, llvm::SelectionDAGISel::OPC_CheckChild2TypeI32, llvm::SelectionDAGISel::OPC_CheckChild2TypeI64, llvm::SelectionDAGISel::OPC_CheckChild3Integer, llvm::SelectionDAGISel::OPC_CheckChild3Same, llvm::SelectionDAGISel::OPC_CheckChild3Type, llvm::SelectionDAGISel::OPC_CheckChild3TypeI32, llvm::SelectionDAGISel::OPC_CheckChild3TypeI64, llvm::SelectionDAGISel::OPC_CheckChild4Integer, llvm::SelectionDAGISel::OPC_CheckChild4Type, llvm::SelectionDAGISel::OPC_CheckChild4TypeI32, llvm::SelectionDAGISel::OPC_CheckChild4TypeI64, llvm::SelectionDAGISel::OPC_CheckChild5Type, llvm::SelectionDAGISel::OPC_CheckChild5TypeI32, llvm::SelectionDAGISel::OPC_CheckChild5TypeI64, llvm::SelectionDAGISel::OPC_CheckChild6Type, llvm::SelectionDAGISel::OPC_CheckChild6TypeI32, llvm::SelectionDAGISel::OPC_CheckChild6TypeI64, llvm::SelectionDAGISel::OPC_CheckChild7Type, llvm::SelectionDAGISel::OPC_CheckChild7TypeI32, llvm::SelectionDAGISel::OPC_CheckChild7TypeI64, llvm::SelectionDAGISel::OPC_CheckCondCode, llvm::SelectionDAGISel::OPC_CheckInteger, llvm::SelectionDAGISel::OPC_CheckOpcode, llvm::SelectionDAGISel::OPC_CheckOrImm, llvm::SelectionDAGISel::OPC_CheckPatternPredicate, llvm::SelectionDAGISel::OPC_CheckPatternPredicate0, llvm::SelectionDAGISel::OPC_CheckPatternPredicate1, llvm::SelectionDAGISel::OPC_CheckPatternPredicate2, llvm::SelectionDAGISel::OPC_CheckPatternPredicate3, llvm::SelectionDAGISel::OPC_CheckPatternPredicate4, llvm::SelectionDAGISel::OPC_CheckPatternPredicate5, llvm::SelectionDAGISel::OPC_CheckPatternPredicate6, llvm::SelectionDAGISel::OPC_CheckPatternPredicate7, llvm::SelectionDAGISel::OPC_CheckPatternPredicateTwoByte, llvm::SelectionDAGISel::OPC_CheckPredicate, llvm::SelectionDAGISel::OPC_CheckPredicate0, llvm::SelectionDAGISel::OPC_CheckPredicate1, llvm::SelectionDAGISel::OPC_CheckPredicate2, llvm::SelectionDAGISel::OPC_CheckPredicate3, llvm::SelectionDAGISel::OPC_CheckPredicate4, llvm::SelectionDAGISel::OPC_CheckPredicate5, llvm::SelectionDAGISel::OPC_CheckPredicate6, llvm::SelectionDAGISel::OPC_CheckPredicate7, llvm::SelectionDAGISel::OPC_CheckSame, llvm::SelectionDAGISel::OPC_CheckType, llvm::SelectionDAGISel::OPC_CheckTypeI32, llvm::SelectionDAGISel::OPC_CheckTypeI64, llvm::SelectionDAGISel::OPC_CheckTypeRes, llvm::SelectionDAGISel::OPC_CheckValueType, and llvm::SelectionDAGISel::TLI.
Referenced by llvm::SelectionDAGISel::SelectCodeCommon().
|
static |
Definition at line 1376 of file SelectionDAGISel.cpp.
References llvm::FuncletPadInst::arg_size(), assert(), llvm::FuncletPadInst::getArgOperand(), llvm::MachineBasicBlock::getParent(), MBB, llvm::MachineFunction::setWasmLandingPadIndex(), and llvm::Value::users().
|
static |
Definition at line 810 of file SelectionDAGISel.cpp.
References End, llvm::IntrinsicInst::getIntrinsicID(), I, II, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 1545 of file SelectionDAGISel.cpp.
References llvm::Address, llvm::DIExpression::ApplyOffset, assert(), llvm::dbgs(), DL, llvm::FunctionLoweringInfo::getArgumentFrameIndex(), llvm::MachineFunction::getDataLayout(), LLVM_DEBUG, llvm::FunctionLoweringInfo::MF, llvm::Offset, llvm::DIExpression::prepend(), processIfEntryValueDbgDeclare(), llvm::MachineFunction::setVariableDbgInfo(), and llvm::FunctionLoweringInfo::StaticAllocaMap.
Referenced by processDbgDeclares(), and processSingleLocVars().
|
static |
Collect llvm.dbg.declare information.
This is done after argument lowering in case the declarations refer to arguments.
Definition at line 1595 of file SelectionDAGISel.cpp.
References llvm::DbgVariableRecord::Declare, llvm::filterDbgVars(), llvm::FunctionLoweringInfo::Fn, I, instructions, llvm::FunctionLoweringInfo::PreprocessedDbgDeclares, llvm::FunctionLoweringInfo::PreprocessedDVRDeclares, and processDbgDeclare().
|
static |
Definition at line 1519 of file SelectionDAGISel.cpp.
References llvm::DIExpression::append(), llvm::dbgs(), llvm::DIExpression::isEntryValue(), llvm::MachineRegisterInfo::liveins(), LLVM_DEBUG, llvm::FunctionLoweringInfo::MF, llvm::FunctionLoweringInfo::RegInfo, llvm::MachineFunction::setVariableDbgInfo(), and llvm::FunctionLoweringInfo::ValueMap.
Referenced by processDbgDeclare().
|
static |
Collect single location variable information generated with assignment tracking.
This is done after argument lowering in case the declarations refer to arguments.
Definition at line 1614 of file SelectionDAGISel.cpp.
References assert(), End, llvm::FunctionVarLocs::getDILocalVariable(), processDbgDeclare(), llvm::FunctionVarLocs::single_locs_begin(), and llvm::FunctionVarLocs::single_locs_end().
|
static |
Definition at line 791 of file SelectionDAGISel.cpp.
References llvm::dbgs(), llvm::OptimizationRemarkEmitter::emit(), llvm::MachineFunction::getName(), LLVM_DEBUG, and llvm::report_fatal_error().
STATISTIC | ( | NumDAGBlocks | , |
"Number of blocks selected using DAG" | |||
) |
STATISTIC | ( | NumDAGIselRetries | , |
"Number of times dag isel has to try another path" | |||
) |
STATISTIC | ( | NumEntryBlocks | , |
"Number of entry blocks encountered" | |||
) |
STATISTIC | ( | NumFastIselBlocks | , |
"Number of blocks selected entirely by fast isel" | |||
) |
STATISTIC | ( | NumFastIselFailLowerArguments | , |
"Number of entry blocks where fast isel failed to lower arguments" | |||
) |
STATISTIC | ( | NumFastIselFailures | , |
"Number of instructions fast isel failed on" | |||
) |
STATISTIC | ( | NumFastIselSuccess | , |
"Number of instructions fast isel selected" | |||
) |
|
static |
|
static |
|
static |
Referenced by llvm::SelectionDAGISel::runOnMachineFunction().
|
static |
|
static |
ISHeuristic command line option for instruction schedulers.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |