Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
Arquivo: util.cpp Projeto: 0xcc/pyston
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();
}