IRMover::IRMover(Module &M) : Composite(M) { TypeFinder StructTypes; StructTypes.run(M, true); for (StructType *Ty : StructTypes) { if (Ty->isOpaque()) IdentifiedStructTypes.addOpaque(Ty); else IdentifiedStructTypes.addNonOpaque(Ty); } }
IRMover::IRMover(Module &M, DiagnosticHandlerFunction DiagnosticHandler) : Composite(M), DiagnosticHandler(DiagnosticHandler) { TypeFinder StructTypes; StructTypes.run(M, true); for (StructType *Ty : StructTypes) { if (Ty->isOpaque()) IdentifiedStructTypes.addOpaque(Ty); else IdentifiedStructTypes.addNonOpaque(Ty); } }
std::vector<StructType *> Module::getIdentifiedStructTypes() const { // If we have a materializer, it is possible that some unread function // uses a type that is currently not visible to a TypeFinder, so ask // the materializer which types it created. if (Materializer) return Materializer->getIdentifiedStructTypes(); std::vector<StructType *> Ret; TypeFinder SrcStructTypes; SrcStructTypes.run(*this, true); Ret.assign(SrcStructTypes.begin(), SrcStructTypes.end()); return Ret; }
// Strip any named types of their names. static void StripTypeNames(Module &M, bool PreserveDbgInfo) { TypeFinder StructTypes; StructTypes.run(M, false); for (unsigned i = 0, e = StructTypes.size(); i != e; ++i) { StructType *STy = StructTypes[i]; if (STy->isLiteral() || STy->getName().empty()) continue; if (PreserveDbgInfo && STy->getName().startswith("llvm.dbg")) continue; STy->setName(""); } }
IRMover::IRMover(Module &M) : Composite(M) { TypeFinder StructTypes; StructTypes.run(M, true); for (StructType *Ty : StructTypes) { if (Ty->isOpaque()) IdentifiedStructTypes.addOpaque(Ty); else IdentifiedStructTypes.addNonOpaque(Ty); } // Self-map metadatas in the destination module. This is needed when // DebugTypeODRUniquing is enabled on the LLVMContext, since metadata in the // destination module may be reached from the source module. for (auto *MD : StructTypes.getVisitedMetadata()) { SharedMDs[MD].reset(const_cast<MDNode *>(MD)); } }