34 cl::desc(
"Disable Hexagon CFG Optimization"));
51 "predicate instructions"));
105 Options, RM, CM, OL),
107 Subtarget(TT, CPU, FS, *this) {
129 return getTM<HexagonTargetMachine>();
137 void addIRPasses()
override;
138 bool addInstSelector()
override;
139 void addPreRegAlloc()
override;
140 void addPostRegAlloc()
override;
141 void addPreSched2()
override;
142 void addPreEmitPass()
override;
147 return new HexagonPassConfig(
this, PM);
150 void HexagonPassConfig::addIRPasses() {
164 bool HexagonPassConfig::addInstSelector() {
178 printAndVerify(
"After hexagon peephole pass");
186 void HexagonPassConfig::addPreRegAlloc() {
192 void HexagonPassConfig::addPostRegAlloc() {
198 void HexagonPassConfig::addPreSched2() {
205 void HexagonPassConfig::addPreEmitPass() {
Pass interface - Implemented by all 'passes'.
FunctionPass * createHexagonCopyToCombine()
Extend the standard ScheduleDAGMI to provide more context and override the top-level schedule() drive...
virtual void addIRPasses()
Add common target configurable passes that perform LLVM IR to IR transforms following machine indepen...
HexagonTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL)
HexagonTargetMachine ctor - Create an ILP32 architecture model.
FunctionPass * createHexagonExpandCondsets()
char & RegisterCoalescerID
RegisterCoalescer - This pass merges live ranges to eliminate copies.
static MachineSchedRegistry SchedCustomRegistry("hexagon","Run Hexagon's custom scheduler", createVLIWMachineSched)
FunctionPass * createHexagonHardwareLoops()
MachineSchedRegistry provides a selection of available machine instruction schedulers.
FunctionPass * createHexagonGenPredicate()
FunctionPass * createHexagonCommonGEP()
FunctionPass * createAtomicExpandPass(const TargetMachine *TM)
Target-Independent Code Generator Pass Configuration Options.
~HexagonTargetMachine() override
static cl::opt< bool > EnableGenPred("hexagon-gen-pred", cl::init(true), cl::Hidden, cl::desc("Enable conversion of arithmetic operations to ""predicate instructions"))
static cl::opt< bool > EnableExpandCondsets("hexagon-expand-condsets", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Early expansion of MUX"))
CodeGenOpt::Level getOptLevel() const
Returns the optimization level: None, Less, Default, or Aggressive.
int HexagonTargetMachineModule
HexagonTargetMachineModule - Note that this is used on hosts that cannot link in a library unless the...
initializer< Ty > init(const Ty &Val)
static ScheduleDAGInstrs * createVLIWMachineSched(MachineSchedContext *C)
std::enable_if<!std::is_array< T >::value, std::unique_ptr< T > >::type make_unique(Args &&...args)
Constructs a new T() with the given args and returns a unique_ptr<T> which owns the object...
FunctionPass * createHexagonPacketizer()
static cl::opt< bool > EnableCommGEP("hexagon-commgep", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable commoning of GEP instructions"))
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang","erlang-compatible garbage collector")
This class describes a target machine that is implemented with the LLVM target-independent code gener...
static cl::opt< bool > DisableHexagonCFGOpt("disable-hexagon-cfgopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon CFG Optimization"))
FunctionPass class - This class is used to implement most global optimizations.
Triple - Helper class for working with autoconf configuration names.
FunctionPass * createHexagonNewValueJump()
Module.h This file contains the declarations for the Module class.
FunctionPass * createHexagonPeephole()
FunctionPass * createHexagonRemoveExtendArgs(const HexagonTargetMachine &TM)
FunctionPass * createHexagonGenInsert()
Target - Wrapper for Target specific information.
Discriminated union of Pass ID types.
ScheduleDAGInstrs - A ScheduleDAG subclass for scheduling lists of MachineInstrs. ...
FunctionPass * createHexagonSplitConst32AndConst64()
FunctionPass * createHexagonFixupHwLoops()
char & IfConverterID
IfConverter - This pass performs machine code if conversion.
MachineSchedContext provides enough context from the MachineScheduler pass for the target to instanti...
TargetPassConfig * createPassConfig(PassManagerBase &PM) override
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
FunctionPass * createHexagonISelDag(HexagonTargetMachine &TM, CodeGenOpt::Level OptLevel)
FunctionPass * createHexagonExpandPredSpillCode()
RegisterTargetMachine - Helper template for registering a target machine implementation, for use in the target machine initialization function.
FunctionPass * createHexagonGenExtract()
static cl::opt< bool > DisableHardwareLoops("disable-hexagon-hwloops", cl::Hidden, cl::desc("Disable Hardware Loops for Hexagon target"))
StringRef - Represent a constant reference to a string, i.e.
static cl::opt< bool > EnableGenExtract("hexagon-extract", cl::init(true), cl::Hidden, cl::desc("Generate \"extract\" instructions"))
static cl::opt< bool > EnableGenInsert("hexagon-insert", cl::init(true), cl::Hidden, cl::desc("Generate \"insert\" instructions"))
void LLVMInitializeHexagonTarget()
FunctionPass * createHexagonCFGOptimizer()