void OMR::CodeGenPhase::performInstructionSelectionPhase(TR::CodeGenerator * cg, TR::CodeGenPhase * phase) { TR::Compilation* comp = cg->comp(); phase->reportPhase(InstructionSelectionPhase); if (comp->getOption(TR_TraceCG) || comp->getOption(TR_TraceTrees) || comp->getOptions()->getTraceCGOption(TR_TraceCGPreInstructionSelection)) comp->dumpMethodTrees("Pre Instruction Selection Trees"); TR::LexicalMemProfiler mp(phase->getName(), comp->phaseMemProfiler()); LexicalTimer pt(phase->getName(), comp->phaseTimer()); cg->doInstructionSelection(); if (comp->getOption(TR_TraceCG) || comp->getOptions()->getTraceCGOption(TR_TraceCGPostInstructionSelection)) comp->getDebug()->dumpMethodInstrs(comp->getOutFile(), "Post Instruction Selection Instructions", false, true); // check reference counts #if defined(DEBUG) || defined(PROD_WITH_ASSUMES) for (int r=0; r<NumRegisterKinds; r++) { if (TO_KIND_MASK(r) & cg->getSupportedLiveRegisterKinds()) { cg->checkForLiveRegisters(cg->getLiveRegisters((TR_RegisterKinds)r)); } } #endif // check interrupt if (comp->compilationShouldBeInterrupted(AFTER_INSTRUCTION_SELECTION_CONTEXT)) { comp->failCompilation<TR::CompilationInterrupted>("interrupted after instruction selection"); } }
void OMR::CodeGenPhase::performLowerTreesPhase(TR::CodeGenerator * cg, TR::CodeGenPhase * phase) { TR::Compilation * comp = cg->comp(); phase->reportPhase(LowerTreesPhase); cg->lowerTrees(); if (comp->getOption(TR_TraceCG)) comp->dumpMethodTrees("Post Lower Trees"); }
void OMR::CodeGenPhase::performUncommonCallConstNodesPhase(TR::CodeGenerator * cg, TR::CodeGenPhase * phase) { TR::Compilation* comp = cg->comp(); if(comp->getOption(TR_DisableCallConstUncommoning)) { traceMsg(comp, "Skipping Uncommon Call Constant Node phase\n"); return; } phase->reportPhase(UncommonCallConstNodesPhase); if (comp->getOption(TR_TraceCG) || comp->getOption(TR_TraceTrees)) comp->dumpMethodTrees("Pre Uncommon Call Constant Node Trees"); TR::LexicalMemProfiler mp(phase->getName(), comp->phaseMemProfiler()); LexicalTimer pt(phase->getName(), comp->phaseTimer()); cg->uncommonCallConstNodes(); if (comp->getOption(TR_TraceCG) || comp->getOption(TR_TraceTrees)) comp->dumpMethodTrees("Post Uncommon Call Constant Node Trees"); }