void optimizeTrace(Trace* trace, IRFactory* irFactory) { if (RuntimeOption::EvalHHIRMemOpt) { optimizeMemoryAccesses(trace, irFactory); } if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR before DCE -----\n"; trace->print(std::cout, false); std::cout << "---------------------------\n"; } eliminateDeadCode(trace, irFactory); }
void optimizeTrace(Trace* trace, IRFactory* irFactory) { if (RuntimeOption::EvalHHIRMemOpt) { optimizeMemoryAccesses(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after MemElim -----\n"; trace->print(std::cout, false); std::cout << "---------------------------\n"; } } if (RuntimeOption::EvalHHIRDeadCodeElim) { eliminateDeadCode(trace, irFactory); optimizeJumps(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after DCE -----\n"; trace->print(std::cout, false); std::cout << "---------------------------\n"; } } if (RuntimeOption::EvalHHIRGenerateAsserts) { insertRefCountAsserts(trace, irFactory); } }
void optimizeTrace(Trace* trace, TraceBuilder* traceBuilder) { IRFactory* irFactory = traceBuilder->getIrFactory(); if (RuntimeOption::EvalHHIRMemOpt) { optimizeMemoryAccesses(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after MemElim -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); } if (RuntimeOption::EvalHHIRDeadCodeElim) { eliminateDeadCode(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after DCE -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); } if (RuntimeOption::EvalHHIRExtraOptPass && (RuntimeOption::EvalHHIRCse || RuntimeOption::EvalHHIRSimplification)) { traceBuilder->optimizeTrace(); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after CSE/Simplification -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); // Cleanup any dead code left around by CSE/Simplification // Ideally, this would be controlled by a flag returned // by optimzeTrace indicating whether DCE is necessary if (RuntimeOption::EvalHHIRDeadCodeElim) { eliminateDeadCode(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after DCE -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); } } if (RuntimeOption::EvalHHIRJumpOpts) { optimizeJumps(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after jump opts -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); } if (RuntimeOption::EvalHHIRGenerateAsserts) { insertAsserts(trace, irFactory); if (RuntimeOption::EvalDumpIR > 5) { std::cout << "----- HHIR after inserting RefCnt asserts -----\n"; trace->print(std::cout); std::cout << "---------------------------\n"; } assert(JIT::checkCfg(trace, *irFactory)); } }