LLVM: lib/Target/Hexagon/HexagonISelDAGToDAG.cpp File Reference (original) (raw)

Go to the source code of this file.

Namespaces
namespace llvm
This is an optimization pass for GlobalISel generic memory operations.
Functions
FunctionPass * llvm::createHexagonISelDag (HexagonTargetMachine &TM, CodeGenOptLevel OptLevel)
createHexagonISelDag - This pass converts a legalized DAG into a Hexagon-specific DAG, ready for instruction scheduling.
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< bool > EnableAddressRebalancing ("isel-rebalance-addr", cl::Hidden, cl::init(true), cl::desc("Rebalance address calculation trees to improve " "instruction selection"))
static cl::opt< bool > RebalanceOnlyForOptimizations ("rebalance-only-opt", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if this allows optimizations"))
static cl::opt< bool > RebalanceOnlyImbalancedTrees ("rebalance-only-imbal", cl::Hidden, cl::init(false), cl::desc("Rebalance address tree only if it is imbalanced"))
static cl::opt< bool > CheckSingleUse ("hexagon-isel-su", cl::Hidden, cl::init(true), cl::desc("Enable checking of SDNode's single-use status"))

DEBUG_TYPE

#define DEBUG_TYPE "hexagon-isel"

GET_DAGISEL_BODY

PASS_NAME

getPowerOf2Factor()

Returns

the value x for which 2^x is a factor of Val

Definition at line 1966 of file HexagonISelDAGToDAG.cpp.

References llvm::CallingConv::C, llvm::APInt::countr_zero(), llvm::dyn_cast(), llvm::APInt::getBoolValue(), llvm::SDValue::getConstantOperandVal(), llvm::SDValue::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::isa(), llvm::ISD::MUL, and llvm::ISD::SHL.

isMemOPCandidate()

Definition at line 1081 of file HexagonISelDAGToDAG.cpp.

References llvm::ISD::ADD, llvm::ISD::AND, llvm::cast(), llvm::SDValue::getNode(), llvm::SDNode::getNumValues(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), I, Opc, llvm::ISD::OR, S1, llvm::ISD::SUB, and llvm::SDNode::user_begin().

isOpcodeHandled()

isTargetConstant()

willShiftRightEliminate()

CheckSingleUse

EnableAddressRebalancing

cl::opt< bool > EnableAddressRebalancing("isel-rebalance-addr", cl::Hidden, cl::init(true), cl::desc("Rebalance address calculation trees to improve " "instruction selection")) ( "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")) ( "rebalance-only-opt" , cl::Hidden , cl::init(false) , cl::desc("Rebalance address tree only if this allows optimizations") ) static

RebalanceOnlyImbalancedTrees

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