LLVM  6.0.0svn
Namespaces | Macros | Functions | Variables
HexagonISelDAGToDAG.cpp File Reference
#include "Hexagon.h"
#include "HexagonISelDAGToDAG.h"
#include "HexagonISelLowering.h"
#include "HexagonMachineFunctionInfo.h"
#include "HexagonTargetMachine.h"
#include "llvm/CodeGen/FunctionLoweringInfo.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "HexagonGenDAGISel.inc"
Include dependency graph for HexagonISelDAGToDAG.cpp:

Go to the source code of this file.

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Macros

#define DEBUG_TYPE   "hexagon-isel"
 
#define GET_DAGISEL_BODY   HexagonDAGToDAGISel
 

Functions

FunctionPassllvm::createHexagonISelDag (HexagonTargetMachine &TM, CodeGenOpt::Level OptLevel)
 
static bool doesIntrinsicReturnPredicate (unsigned ID)
 
static bool isMemOPCandidate (SDNode *I, SDNode *U)
 
static bool isOpcodeHandled (const SDNode *N)
 
static unsigned getPowerOf2Factor (SDValue Val)
 
static bool willShiftRightEliminate (SDValue V, unsigned Amount)
 
static bool isTargetConstant (const SDValue &V)
 

Variables

static cl::opt< boolEnableAddressRebalancing ("isel-rebalance-addr", cl::Hidden, cl::init(true), cl::desc("Rebalance address calculation trees to improve " "instruction selection"))
 
static cl::opt< boolRebalanceOnlyForOptimizations ("rebalance-only-opt", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if this allows optimizations"))
 
static cl::opt< boolRebalanceOnlyImbalancedTrees ("rebalance-only-imbal", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if it is imbalanced"))
 
static cl::opt< boolCheckSingleUse ("hexagon-isel-su", cl::Hidden, cl::init(true), cl::desc("Enable checking of SDNode's single-use status"))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "hexagon-isel"

Definition at line 27 of file HexagonISelDAGToDAG.cpp.

◆ GET_DAGISEL_BODY

#define GET_DAGISEL_BODY   HexagonDAGToDAGISel

Definition at line 54 of file HexagonISelDAGToDAG.cpp.

Function Documentation

◆ doesIntrinsicReturnPredicate()

static bool doesIntrinsicReturnPredicate ( unsigned  ID)
static

Definition at line 68 of file HexagonISelDAGToDAG.cpp.

Referenced by llvm::HexagonDAGToDAGISel::SelectZeroExtend().

◆ getPowerOf2Factor()

static unsigned getPowerOf2Factor ( SDValue  Val)
static

◆ isMemOPCandidate()

static bool isMemOPCandidate ( SDNode I,
SDNode U 
)
static

◆ isOpcodeHandled()

static bool isOpcodeHandled ( const SDNode N)
static

◆ isTargetConstant()

static bool isTargetConstant ( const SDValue V)
static

Definition at line 1732 of file HexagonISelDAGToDAG.cpp.

References llvm::abs(), llvm::ISD::ADD, llvm::SelectionDAG::allnodes_begin(), llvm::SelectionDAG::allnodes_end(), assert(), llvm::HexagonISD::CONST32, llvm::HexagonISD::CONST32_GP, llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::SelectionDAGISel::CurDAG, llvm::dbgs(), DEBUG, llvm::SDValue::dump(), llvm::SDNode::dump(), llvm::dyn_cast(), E, llvm::SmallVectorBase::empty(), llvm::ConstantSDNode::getAPIntValue(), llvm::SelectionDAG::getConstant(), llvm::SDValue::getConstantOperandVal(), llvm::SelectionDAG::getDataLayout(), llvm::MachineFunction::getFunction(), llvm::GlobalAddressSDNode::getGlobal(), llvm::SelectionDAG::getMachineFunction(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::GlobalAddressSDNode::getOffset(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::GlobalValue::getParent(), getParent(), getPowerOf2Factor(), llvm::TargetLoweringBase::getScalarShiftAmountTy(), llvm::SelectionDAG::getTargetGlobalAddress(), llvm::SelectionDAGISel::getTargetLowering(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::SDValue::hasOneUse(), llvm::SDNode::hasOneUse(), I, llvm::TargetLowering::isOffsetFoldingLegal(), isOpcodeHandled(), llvm::APInt::isPowerOf2(), llvm::ISD::LOAD, llvm::APInt::logBase2(), llvm::max(), llvm::ISD::MUL, N, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), RebalanceOnlyForOptimizations, RebalanceOnlyImbalancedTrees, llvm::SelectionDAG::RemoveDeadNodes(), llvm::SelectionDAG::ReplaceAllUsesWith(), llvm::ISD::SHL, llvm::ISD::STORE, std::swap(), llvm::SelectionDAGISel::TLI, llvm::SelectionDAG::UpdateNodeOperands(), llvm::SDNode::use_begin(), llvm::SDNode::use_size(), llvm::Value::users(), and willShiftRightEliminate().

◆ willShiftRightEliminate()

static bool willShiftRightEliminate ( SDValue  V,
unsigned  Amount 
)
static

Variable Documentation

◆ CheckSingleUse

cl::opt<bool> CheckSingleUse("hexagon-isel-su", cl::Hidden, cl::init(true), cl::desc("Enable checking of SDNode's single-use status"))
static

◆ EnableAddressRebalancing

cl::opt<bool> EnableAddressRebalancing("isel-rebalance-addr", cl::Hidden, cl::init(true), cl::desc("Rebalance address calculation trees to improve " "instruction selection"))
static

◆ RebalanceOnlyForOptimizations

cl::opt<bool> RebalanceOnlyForOptimizations("rebalance-only-opt", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if this allows optimizations"))
static

Referenced by isTargetConstant().

◆ RebalanceOnlyImbalancedTrees

cl::opt<bool> RebalanceOnlyImbalancedTrees("rebalance-only-imbal", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if it is imbalanced"))
static

Referenced by isTargetConstant().