20 llvm::raw_string_ostream oss(output);
21 oss <<
"Dumping symbol walk (self = [" << symbolTableOp <<
"]): \n";
22 auto walkFn = [&](Operation *op,
bool allUsesVisible) {
23 oss <<
" found op [" << op <<
"] " << op->getName() <<
" named "
24 << op->getAttrOfType<StringAttr>(SymbolTable::getSymbolAttrName()) <<
'\n';
26 SymbolTable::walkSymbolTables(symbolTableOp,
true, walkFn);
27 llvm::outs() << output;
30void dumpSymbolTable(llvm::raw_ostream &stream, SymbolTable &symTab,
unsigned indent) {
32 stream.indent(indent) <<
"Dumping SymbolTable [" << &symTab <<
"]: \n";
33 auto *rawSymbolTablePtr =
reinterpret_cast<char *
>(&symTab);
34 auto *privateFieldPtr =
35 reinterpret_cast<llvm::DenseMap<Attribute, Operation *> *
>(rawSymbolTablePtr + 8);
37 for (llvm::detail::DenseMapPair<Attribute, Operation *> &p : *privateFieldPtr) {
38 Operation *op = p.second;
39 stream.indent(indent) << p.first <<
" -> [" << op <<
"] " << op->getName() <<
'\n';
51 stream <<
"Dumping SymbolTableCollection [" << &tables <<
"]: \n";
52 auto *rawObjectPtr =
reinterpret_cast<char *
>(&tables);
53 auto *privateFieldPtr =
54 reinterpret_cast<llvm::DenseMap<Operation *, std::unique_ptr<SymbolTable>
> *>(
57 for (llvm::detail::DenseMapPair<Operation *, std::unique_ptr<SymbolTable>> &p :
59 stream <<
" [" << p.first <<
"] " << p.first->getName() <<
" -> " <<
'\n';
71void dumpToFile(Operation *op, llvm::StringRef filename) {
73 llvm::raw_fd_stream stream(filename, err);
75 auto options = OpPrintingFlags().assumeVerified().useLocalScope();
76 op->print(stream, options);
void dumpSymbolTable(llvm::raw_ostream &stream, SymbolTable &symTab, unsigned indent)
void dumpSymbolTables(llvm::raw_ostream &stream, SymbolTableCollection &tables)
void dumpSymbolTableWalk(Operation *symbolTableOp)
void dumpToFile(Operation *op, llvm::StringRef filename)
std::string buildStringViaCallback(Func &&appendFn, Args &&...args)
Generate a string by calling the given appendFn with an llvm::raw_ostream & as the first argument fol...