LLVM 20.0.0git
Namespaces | Macros | Functions | Variables
HexagonISelDAGToDAG.cpp File Reference
#include "HexagonISelDAGToDAG.h"
#include "Hexagon.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/IR/IntrinsicsHexagon.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "HexagonGenDAGISel.inc"

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 

Macros

#define DEBUG_TYPE   "hexagon-isel"
 
#define PASS_NAME   "Hexagon DAG->DAG Pattern Instruction Selection"
 
#define GET_DAGISEL_BODY   HexagonDAGToDAGISel
 

Functions

FunctionPassllvm::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< 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 55 of file HexagonISelDAGToDAG.cpp.

◆ PASS_NAME

#define PASS_NAME   "Hexagon DAG->DAG Pattern Instruction Selection"

Definition at line 28 of file HexagonISelDAGToDAG.cpp.

Function Documentation

◆ getPowerOf2Factor()

static unsigned getPowerOf2Factor ( SDValue  Val)
static

◆ isMemOPCandidate()

static bool isMemOPCandidate ( SDNode I,
SDNode U 
)
static

◆ isOpcodeHandled()

static bool isOpcodeHandled ( const SDNode N)
static

Definition at line 1768 of file HexagonISelDAGToDAG.cpp.

References llvm::ISD::ADD, llvm::ISD::MUL, N, and llvm::ISD::SHL.

◆ isTargetConstant()

static bool isTargetConstant ( const SDValue V)
static

◆ willShiftRightEliminate()

static bool willShiftRightEliminate ( SDValue  V,
unsigned  Amount 
)
static
Returns
true if V>>Amount will eliminate V's operation on its child

Definition at line 1977 of file HexagonISelDAGToDAG.cpp.

References getNode(), llvm::ISD::MUL, and llvm::ISD::SHL.

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")) ( "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")) ( "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