34 cl::desc(
"Disable Hexagon MI Scheduling"));
38 cl::desc(
"Disable Hexagon CFG Optimization"));
75 "i64:64:64-i32:32:32-i16:16:16-i1:32:32-"
76 "f64:64:64-f32:32:32-a0:0-n32") ,
77 Subtarget(TT, CPU, FS), InstrInfo(Subtarget), TLInfo(*this),
79 FrameLowering(Subtarget),
80 InstrItins(&Subtarget.getInstrItineraryData()) {
116 return getTM<HexagonTargetMachine>();
124 virtual bool addInstSelector();
125 virtual bool addPreRegAlloc();
126 virtual bool addPostRegAlloc();
127 virtual bool addPreSched2();
128 virtual bool addPreEmitPass();
133 return new HexagonPassConfig(
this, PM);
136 bool HexagonPassConfig::addInstSelector() {
147 printAndVerify(
"After hexagon peephole pass");
153 bool HexagonPassConfig::addPreRegAlloc() {
160 bool HexagonPassConfig::addPostRegAlloc() {
168 bool HexagonPassConfig::addPreSched2() {
178 printAndVerify(
"After hexagon split const32/64 pass");
183 bool HexagonPassConfig::addPreEmitPass() {
FunctionPass * createHexagonCopyToCombine()
Pass * createLoopSimplifyPass()
Pass * createLoopStrengthReducePass()
void setMCUseCFI(bool Value)
setMCUseCFI - Set whether all we should use dwarf's .cfi_* directives.
static MachineSchedRegistry SchedCustomRegistry("hexagon","Run Hexagon's custom scheduler", createVLIWMachineSched)
char & MachineSchedulerID
MachineScheduler - This pass schedules machine instructions.
FunctionPass * createHexagonHardwareLoops()
FunctionPass * createConstantPropagationPass()
static cl::opt< bool > DisableHexagonMISched("disable-hexagon-misched", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon MI Scheduling"))
HexagonTargetMachine(const Target &T, StringRef TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL)
FunctionPass * createDeadCodeEliminationPass()
FunctionPass * createHexagonFixupHwLoops()
CodeGenOpt::Level getOptLevel() const
Pass * createLoopUnrollPass(int Threshold=-1, int Count=-1, int AllowPartial=-1, int Runtime=-1)
int HexagonTargetMachineModule
initializer< Ty > init(const Ty &Val)
static ScheduleDAGInstrs * createVLIWMachineSched(MachineSchedContext *C)
FunctionPass * createHexagonPacketizer()
static cl::opt< bool > DisableHexagonCFGOpt("disable-hexagon-cfgopt", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon CFG Optimization"))
bool IsSmallDataEnabled() const
FunctionPass * createHexagonSplitConst32AndConst64(const HexagonTargetMachine &TM)
FunctionPass * createHexagonExpandPredSpillCode(const HexagonTargetMachine &TM)
virtual bool addPassesForOptimizations(PassManagerBase &PM)
FunctionPass * createHexagonNewValueJump()
FunctionPass * createHexagonCFGOptimizer(const HexagonTargetMachine &TM)
FunctionPass * createHexagonPeephole()
FunctionPass * createHexagonSplitTFRCondSets(const HexagonTargetMachine &TM)
FunctionPass * createHexagonRemoveExtendArgs(const HexagonTargetMachine &TM)
char & IfConverterID
IfConverter - This pass performs machine code if conversion.
FunctionPass * createHexagonISelDag(HexagonTargetMachine &TM, CodeGenOpt::Level OptLevel)
virtual TargetPassConfig * createPassConfig(PassManagerBase &PM)
static cl::opt< bool > DisableHardwareLoops("disable-hexagon-hwloops", cl::Hidden, cl::desc("Disable Hardware Loops for Hexagon target"))
static RegisterPass< NVPTXAllocaHoisting > X("alloca-hoisting","Hoisting alloca instructions in non-entry ""blocks to the entry block")
void LLVMInitializeHexagonTarget()