void ModelGeneratorContext::initFunctionPassManager() { if (options & ModelGenerator::OPTIMIZE) { functionPassManager = new FunctionPassManager(module); // Set up the optimizer pipeline. Start with registering info about how the // target lays out data structures. // we only support LLVM >= 3.1 #if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR == 1) functionPassManager->add(new TargetData(*executionEngine->getTargetData())); #else functionPassManager->add(new DataLayout(*executionEngine->getDataLayout())); #endif // Provide basic AliasAnalysis support for GVN. functionPassManager->add(createBasicAliasAnalysisPass()); if (options & ModelGenerator::OPTIMIZE_INSTRUCTION_SIMPLIFIER) { Log(Logger::LOG_INFORMATION) << "using OPTIMIZE_INSTRUCTION_SIMPLIFIER"; functionPassManager->add(createInstructionSimplifierPass()); } if (options & ModelGenerator::OPTIMIZE_INSTRUCTION_COMBINING) { Log(Logger::LOG_INFORMATION) << "using OPTIMIZE_INSTRUCTION_COMBINING"; functionPassManager->add(createInstructionCombiningPass()); } if(options & ModelGenerator::OPTIMIZE_GVN) { Log(Logger::LOG_INFORMATION) << "using GVN optimization"; functionPassManager->add(createGVNPass()); } if (options & ModelGenerator::OPTIMIZE_CFG_SIMPLIFICATION) { Log(Logger::LOG_INFORMATION) << "using OPTIMIZE_CFG_SIMPLIFICATION"; functionPassManager->add(createCFGSimplificationPass()); } if (options & ModelGenerator::OPTIMIZE_DEAD_INST_ELIMINATION) { Log(Logger::LOG_INFORMATION) << "using OPTIMIZE_DEAD_INST_ELIMINATION"; functionPassManager->add(createDeadInstEliminationPass()); } if (options & ModelGenerator::OPTIMIZE_DEAD_CODE_ELIMINATION) { Log(Logger::LOG_INFORMATION) << "using OPTIMIZE_DEAD_CODE_ELIMINATION"; functionPassManager->add(createDeadCodeEliminationPass()); } functionPassManager->doInitialization(); } }
void optimize(cpu_t *cpu) { FunctionPassManager pm = FunctionPassManager(cpu->mod); pm.add(createPromoteMemoryToRegisterPass()); pm.add(createInstructionCombiningPass()); pm.add(createConstantPropagationPass()); pm.add(createDeadCodeEliminationPass()); pm.run(*cpu->cur_func); }
void optimize(cpu_t *cpu) { dyncom_engine_t* de = cpu->dyncom_engine; FunctionPassManager pm = FunctionPassManager(de->mod); std::string data_layout = de->exec_engine->getTargetData()->getStringRepresentation(); TargetData *TD = new TargetData(data_layout); pm.add(TD); pm.add(createPromoteMemoryToRegisterPass()); pm.add(createInstructionCombiningPass()); pm.add(createConstantPropagationPass()); pm.add(createDeadCodeEliminationPass()); pm.run(*de->cur_func); }