void dumpPrettyIR(llvm::Function* f) { // f->getParent()->dump(); // return; std::unique_ptr<llvm::Module> tmp_module(llvm::CloneModule(f->getParent())); // std::unique_ptr<llvm::Module> tmp_module(new llvm::Module("tmp", g.context)); llvm::Function* new_f = tmp_module->begin(); llvm::ValueToValueMapTy VMap; llvm::RemapFlags flags = llvm::RF_None; llvm::ValueMapTypeRemapper* type_remapper = NULL; PrettifyingMaterializer materializer(tmp_module.get(), VMap, flags, type_remapper); for (llvm::Function::iterator I = new_f->begin(), E = new_f->end(); I != E; ++I) { VMap[I] = I; } for (llvm::inst_iterator it = inst_begin(new_f), end = inst_end(new_f); it != end; ++it) { llvm::RemapInstruction(&*it, VMap, flags, type_remapper, &materializer); if (llvm::IntrinsicInst* ii = llvm::dyn_cast<llvm::IntrinsicInst>(&*it)) { if (ii->getIntrinsicID() == llvm::Intrinsic::experimental_patchpoint_i64 || ii->getIntrinsicID() == llvm::Intrinsic::experimental_patchpoint_void || ii->getIntrinsicID() == llvm::Intrinsic::experimental_patchpoint_double) { remapPatchpoint(ii); } } else if (llvm::InvokeInst* ii = llvm::dyn_cast<llvm::InvokeInst>(&*it)) { if (ii->getCalledFunction() && ii->getCalledFunction()->isIntrinsic()) { remapPatchpoint(ii); } } } tmp_module->begin()->dump(); // tmp_module->dump(); }
void dumpPrettyIR(llvm::Function* f) { std::unique_ptr<llvm::Module> tmp_module(llvm::CloneModule(f->getParent())); // std::unique_ptr<llvm::Module> tmp_module(new llvm::Module("tmp", g.context)); llvm::Function* new_f = tmp_module->begin(); llvm::ValueToValueMapTy VMap; PrettifyingMaterializer materializer(tmp_module.get()); for (llvm::Function::iterator I = new_f->begin(), E = new_f->end(); I != E; ++I) { VMap[I] = I; } for (llvm::inst_iterator it = inst_begin(new_f), end = inst_end(new_f); it != end; ++it) { llvm::RemapInstruction(&*it, VMap, llvm::RF_None, NULL, &materializer); } tmp_module->begin()->dump(); // tmp_module->dump(); }