LLVM  8.0.1
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
 This class represents lattice values for constants.
 

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::initializeHexagonSplitDoubleRegsPass (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::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 (bool Minimal)
 
FunctionPassllvm::createHexagonPeephole ()
 
FunctionPassllvm::createHexagonRDFOpt ()
 
FunctionPassllvm::createHexagonSplitConst32AndConst64 ()
 
FunctionPassllvm::createHexagonSplitDoubleRegs ()
 
FunctionPassllvm::createHexagonStoreWidening ()
 
FunctionPassllvm::createHexagonVectorPrint ()
 
FunctionPassllvm::createHexagonVExtract ()
 
static Reloc::Model getEffectiveRelocModel (Optional< Reloc::Model > RM)
 
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"))
 
static cl::opt< boolEnableInitialCFGCleanup ("hexagon-initial-cfg-cleanup", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Simplify the CFG after atomic expansion pass"))
 
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 112 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::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::initializeHexagonSplitDoubleRegsPass(), llvm::initializeHexagonVectorLoopCarriedReusePass(), llvm::initializeHexagonVExtractPass(), SchedCustomRegistry, llvm::ScheduleDAG::TII, llvm::SystemZISD::TM, and llvm::ScheduleDAG::TRI.

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

◆ 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

◆ EnableInitialCFGCleanup

cl::opt<bool> EnableInitialCFGCleanup("hexagon-initial-cfg-cleanup", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Simplify the CFG after atomic expansion pass"))
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 109 of file HexagonTargetMachine.cpp.

◆ SchedCustomRegistry

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

Referenced by createVLIWMachineSched().