LLVM  7.0.0svn
Namespaces | Functions | Variables
HexagonTargetMachine.cpp File Reference
#include "HexagonTargetMachine.h"
#include "Hexagon.h"
#include "HexagonISelLowering.h"
#include "HexagonMachineScheduler.h"
#include "HexagonTargetObjectFile.h"
#include "HexagonTargetTransformInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/Transforms/Scalar.h"
Include dependency graph for HexagonTargetMachine.cpp:

Go to the source code of this file.

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Functions

static ScheduleDAGInstrscreateVLIWMachineSched (MachineSchedContext *C)
 
void llvm::initializeHexagonBitSimplifyPass (PassRegistry &Registry)
 
void llvm::initializeHexagonConstExtendersPass (PassRegistry &)
 
void llvm::initializeHexagonConstPropagationPass (PassRegistry &Registry)
 
void llvm::initializeHexagonEarlyIfConversionPass (PassRegistry &Registry)
 
void llvm::initializeHexagonExpandCondsetsPass (PassRegistry &)
 
void llvm::initializeHexagonGenMuxPass (PassRegistry &Registry)
 
void llvm::initializeHexagonHardwareLoopsPass (PassRegistry &)
 
void llvm::initializeHexagonLoopIdiomRecognizePass (PassRegistry &)
 
void llvm::initializeHexagonVectorLoopCarriedReusePass (PassRegistry &)
 
void llvm::initializeHexagonNewValueJumpPass (PassRegistry &)
 
void llvm::initializeHexagonOptAddrModePass (PassRegistry &)
 
void llvm::initializeHexagonPacketizerPass (PassRegistry &)
 
void llvm::initializeHexagonRDFOptPass (PassRegistry &)
 
void llvm::initializeHexagonVExtractPass (PassRegistry &)
 
Passllvm::createHexagonLoopIdiomPass ()
 
Passllvm::createHexagonVectorLoopCarriedReusePass ()
 
FunctionPassllvm::createHexagonBitSimplify ()
 
FunctionPassllvm::createHexagonBranchRelaxation ()
 
FunctionPassllvm::createHexagonCallFrameInformation ()
 
FunctionPassllvm::createHexagonCFGOptimizer ()
 
FunctionPassllvm::createHexagonCommonGEP ()
 
FunctionPassllvm::createHexagonConstExtenders ()
 
FunctionPassllvm::createHexagonConstPropagationPass ()
 
FunctionPassllvm::createHexagonCopyToCombine ()
 
FunctionPassllvm::createHexagonEarlyIfConversion ()
 
FunctionPassllvm::createHexagonFixupHwLoops ()
 
FunctionPassllvm::createHexagonGatherPacketize ()
 
FunctionPassllvm::createHexagonGenExtract ()
 
FunctionPassllvm::createHexagonGenInsert ()
 
FunctionPassllvm::createHexagonGenMux ()
 
FunctionPassllvm::createHexagonGenPredicate ()
 
FunctionPassllvm::createHexagonHardwareLoops ()
 
FunctionPassllvm::createHexagonISelDag (HexagonTargetMachine &TM, CodeGenOpt::Level OptLevel)
 
FunctionPassllvm::createHexagonLoopRescheduling ()
 
FunctionPassllvm::createHexagonNewValueJump ()
 
FunctionPassllvm::createHexagonOptimizeSZextends ()
 
FunctionPassllvm::createHexagonOptAddrMode ()
 
FunctionPassllvm::createHexagonPacketizer ()
 
FunctionPassllvm::createHexagonPeephole ()
 
FunctionPassllvm::createHexagonRDFOpt ()
 
FunctionPassllvm::createHexagonSplitConst32AndConst64 ()
 
FunctionPassllvm::createHexagonSplitDoubleRegs ()
 
FunctionPassllvm::createHexagonStoreWidening ()
 
FunctionPassllvm::createHexagonVectorPrint ()
 
FunctionPassllvm::createHexagonVExtract ()
 
static Reloc::Model getEffectiveRelocModel (Optional< Reloc::Model > RM)
 
static CodeModel::Model getEffectiveCodeModel (Optional< CodeModel::Model > CM)
 
void LLVMInitializeHexagonTarget ()
 

Variables

static cl::opt< boolEnableCExtOpt ("hexagon-cext", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable Hexagon constant-extender optimization"))
 
static cl::opt< boolEnableRDFOpt ("rdf-opt", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable RDF-based optimizations"))
 
static cl::opt< boolDisableHardwareLoops ("disable-hexagon-hwloops", cl::Hidden, cl::desc("Disable Hardware Loops for Hexagon target"))
 
static cl::opt< boolDisableAModeOpt ("disable-hexagon-amodeopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon Addressing Mode Optimization"))
 
static cl::opt< boolDisableHexagonCFGOpt ("disable-hexagon-cfgopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon CFG Optimization"))
 
static cl::opt< boolDisableHCP ("disable-hcp", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Disable Hexagon constant propagation"))
 
static cl::opt< boolDisableStoreWidening ("disable-store-widen", cl::Hidden, cl::init(false), cl::desc("Disable store widening"))
 
static cl::opt< boolEnableExpandCondsets ("hexagon-expand-condsets", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Early expansion of MUX"))
 
static cl::opt< boolEnableEarlyIf ("hexagon-eif", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable early if-conversion"))
 
static cl::opt< boolEnableGenInsert ("hexagon-insert", cl::init(true), cl::Hidden, cl::desc("Generate \nsert\instructions"))
 
static cl::opt< boolEnableCommGEP ("hexagon-commgep", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable commoning of GEP instructions"))
 
static cl::opt< boolEnableGenExtract ("hexagon-extract", cl::init(true), cl::Hidden, cl::desc("Generate \xtract\instructions"))
 
static cl::opt< boolEnableGenMux ("hexagon-mux", cl::init(true), cl::Hidden, cl::desc("Enable converting conditional transfers into MUX instructions"))
 
static cl::opt< boolEnableGenPred ("hexagon-gen-pred", cl::init(true), cl::Hidden, cl::desc("Enable conversion of arithmetic operations to " "predicate instructions"))
 
static cl::opt< boolEnableLoopPrefetch ("hexagon-loop-prefetch", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable loop data prefetch on Hexagon"))
 
static cl::opt< boolDisableHSDR ("disable-hsdr", cl::init(false), cl::Hidden, cl::desc("Disable splitting double registers"))
 
static cl::opt< boolEnableBitSimplify ("hexagon-bit", cl::init(true), cl::Hidden, cl::desc("Bit simplification"))
 
static cl::opt< boolEnableLoopResched ("hexagon-loop-resched", cl::init(true), cl::Hidden, cl::desc("Loop rescheduling"))
 
static cl::opt< boolHexagonNoOpt ("hexagon-noopt", cl::init(false), cl::Hidden, cl::desc("Disable backend optimizations"))
 
static cl::opt< boolEnableVectorPrint ("enable-hexagon-vector-print", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable Hexagon Vector print instr pass"))
 
static cl::opt< boolEnableVExtractOpt ("hexagon-opt-vextract", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable vextract optimization"))
 
int HexagonTargetMachineModule = 0
 HexagonTargetMachineModule - Note that this is used on hosts that cannot link in a library unless there are references into the library. More...
 
static MachineSchedRegistry SchedCustomRegistry ("hexagon", "Run Hexagon's custom scheduler", createVLIWMachineSched)
 

Function Documentation

◆ createVLIWMachineSched()

static ScheduleDAGInstrs* createVLIWMachineSched ( MachineSchedContext C)
static

Definition at line 108 of file HexagonTargetMachine.cpp.

References llvm::ScheduleDAGMI::addMutation(), llvm::createCopyConstrainDAGMutation(), llvm::createHexagonBitSimplify(), llvm::createHexagonBranchRelaxation(), llvm::createHexagonCallFrameInformation(), llvm::createHexagonCFGOptimizer(), llvm::createHexagonCommonGEP(), llvm::createHexagonConstExtenders(), llvm::createHexagonConstPropagationPass(), llvm::createHexagonCopyToCombine(), llvm::createHexagonEarlyIfConversion(), llvm::createHexagonFixupHwLoops(), llvm::createHexagonGatherPacketize(), llvm::createHexagonGenExtract(), llvm::createHexagonGenInsert(), llvm::createHexagonGenMux(), llvm::createHexagonGenPredicate(), llvm::createHexagonHardwareLoops(), llvm::createHexagonISelDag(), llvm::createHexagonLoopIdiomPass(), llvm::createHexagonLoopRescheduling(), llvm::createHexagonNewValueJump(), llvm::createHexagonOptAddrMode(), llvm::createHexagonOptimizeSZextends(), llvm::createHexagonPacketizer(), llvm::createHexagonPeephole(), llvm::createHexagonRDFOpt(), llvm::createHexagonSplitConst32AndConst64(), llvm::createHexagonSplitDoubleRegs(), llvm::createHexagonStoreWidening(), llvm::createHexagonVectorLoopCarriedReusePass(), llvm::createHexagonVectorPrint(), llvm::createHexagonVExtract(), llvm::HexagonExpandCondsetsID, llvm::initializeHexagonBitSimplifyPass(), llvm::initializeHexagonConstExtendersPass(), llvm::initializeHexagonConstPropagationPass(), llvm::initializeHexagonEarlyIfConversionPass(), llvm::initializeHexagonExpandCondsetsPass(), llvm::initializeHexagonGenMuxPass(), llvm::initializeHexagonHardwareLoopsPass(), llvm::initializeHexagonLoopIdiomRecognizePass(), llvm::initializeHexagonNewValueJumpPass(), llvm::initializeHexagonOptAddrModePass(), llvm::initializeHexagonPacketizerPass(), llvm::initializeHexagonRDFOptPass(), llvm::initializeHexagonVectorLoopCarriedReusePass(), llvm::initializeHexagonVExtractPass(), SchedCustomRegistry, llvm::ScheduleDAG::TII, llvm::SystemZISD::TM, and llvm::ScheduleDAG::TRI.

Referenced by llvm::HexagonTargetMachine::~HexagonTargetMachine().

◆ getEffectiveCodeModel()

static CodeModel::Model getEffectiveCodeModel ( Optional< CodeModel::Model CM)
static

Definition at line 179 of file HexagonTargetMachine.cpp.

References llvm::CodeModel::Small.

◆ getEffectiveRelocModel()

static Reloc::Model getEffectiveRelocModel ( Optional< Reloc::Model RM)
static

◆ LLVMInitializeHexagonTarget()

void LLVMInitializeHexagonTarget ( )

Variable Documentation

◆ DisableAModeOpt

cl::opt<bool> DisableAModeOpt("disable-hexagon-amodeopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon Addressing Mode Optimization"))
static

◆ DisableHardwareLoops

cl::opt<bool> DisableHardwareLoops("disable-hexagon-hwloops", cl::Hidden, cl::desc("Disable Hardware Loops for Hexagon target"))
static

◆ DisableHCP

cl::opt<bool> DisableHCP("disable-hcp", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Disable Hexagon constant propagation"))
static

◆ DisableHexagonCFGOpt

cl::opt<bool> DisableHexagonCFGOpt("disable-hexagon-cfgopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon CFG Optimization"))
static

◆ DisableHSDR

cl::opt<bool> DisableHSDR("disable-hsdr", cl::init(false), cl::Hidden, cl::desc("Disable splitting double registers"))
static

◆ DisableStoreWidening

cl::opt<bool> DisableStoreWidening("disable-store-widen", cl::Hidden, cl::init(false), cl::desc("Disable store widening"))
static

◆ EnableBitSimplify

cl::opt<bool> EnableBitSimplify("hexagon-bit", cl::init(true), cl::Hidden, cl::desc("Bit simplification"))
static

◆ EnableCExtOpt

cl::opt<bool> EnableCExtOpt("hexagon-cext", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable Hexagon constant-extender optimization"))
static

◆ EnableCommGEP

cl::opt<bool> EnableCommGEP("hexagon-commgep", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable commoning of GEP instructions"))
static

◆ EnableEarlyIf

cl::opt<bool> EnableEarlyIf("hexagon-eif", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable early if-conversion"))
static

◆ EnableExpandCondsets

cl::opt<bool> EnableExpandCondsets("hexagon-expand-condsets", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Early expansion of MUX"))
static

◆ EnableGenExtract

cl::opt<bool> EnableGenExtract("hexagon-extract", cl::init(true), cl::Hidden, cl::desc("Generate \extract\ instructions"))
static

◆ EnableGenInsert

cl::opt<bool> EnableGenInsert("hexagon-insert", cl::init(true), cl::Hidden, cl::desc("Generate \insert\ instructions"))
static

◆ EnableGenMux

cl::opt<bool> EnableGenMux("hexagon-mux", cl::init(true), cl::Hidden, cl::desc("Enable converting conditional transfers into MUX instructions"))
static

◆ EnableGenPred

cl::opt<bool> EnableGenPred("hexagon-gen-pred", cl::init(true), cl::Hidden, cl::desc("Enable conversion of arithmetic operations to " "predicate instructions"))
static

◆ EnableLoopPrefetch

cl::opt<bool> EnableLoopPrefetch("hexagon-loop-prefetch", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable loop data prefetch on Hexagon"))
static

◆ EnableLoopResched

cl::opt<bool> EnableLoopResched("hexagon-loop-resched", cl::init(true), cl::Hidden, cl::desc("Loop rescheduling"))
static

◆ EnableRDFOpt

cl::opt<bool> EnableRDFOpt("rdf-opt", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable RDF-based optimizations"))
static

◆ EnableVectorPrint

cl::opt<bool> EnableVectorPrint("enable-hexagon-vector-print", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable Hexagon Vector print instr pass"))
static

◆ EnableVExtractOpt

cl::opt<bool> EnableVExtractOpt("hexagon-opt-vextract", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Enable vextract optimization"))
static

◆ HexagonNoOpt

cl::opt<bool> HexagonNoOpt("hexagon-noopt", cl::init(false), cl::Hidden, cl::desc("Disable backend optimizations"))
static

◆ HexagonTargetMachineModule

int HexagonTargetMachineModule = 0

HexagonTargetMachineModule - Note that this is used on hosts that cannot link in a library unless there are references into the library.

In particular, it seems that it is not possible to get things to work on Win32 without this. Though it is unused, do not remove it.

Definition at line 105 of file HexagonTargetMachine.cpp.

◆ SchedCustomRegistry

MachineSchedRegistry SchedCustomRegistry("hexagon", "Run Hexagon's custom scheduler", createVLIWMachineSched)
static

Referenced by createVLIWMachineSched().