Hi, all: Recently I am debugging the DSA and want to learn how it work, and now I am checking the local datastructure analysis. I use the following command to print the graph: (gdb) p g.dump() digraph DataStructures { label="Function addG"; Node0xe1f3a0 [shape=record,shape=Mrecord,label="{ i32: MRE\n|{<g0>}}"]; Node0xe1f4d0 [shape=record,shape=Mrecord,label="{ i32*: SMR\n|{<g0>|<g1>}}"]; Node0xe1f4d0:g0 -> Node0xe1f3a0; Node0xe20900 [shape=record,shape=Mrecord,label="{ i32: GR\n @global\n|{<g0>}}"]; Node0xe16530[ label =" %x_addr"]; Node0xe16530 -> Node0xe1f4d0[arrowtail=tee,color=gray63]; Node0xe162f0[ label =" %x"]; Node0xe162f0 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; Node0xe16950[ label =" %tmp4"]; Node0xe16950 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; Node0xe16730[ label =" %tmp"]; Node0xe16730 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; } then I had to copy these lines out into a .dot file and use dot to convert it into a ps file. I note that it also provide a lot print and dump functions in Printer.cpp, such as void DSGraph::writeGraphToFile(std::ostream &O, const std::string &GraphName) const { but i don't know how to use it, also there are other functions: // print - Print out the analysis results... void LocalDataStructures::print(std::ostream &O, const Module *M) const { if (DontPrintAnything) return; printCollection(*this, O, M, "ds."); } .......... how these functions can be used in gdb? furthermore, are there any options which i can type in command line for DSA?, such as: opt -load=xxxxxx -print_the_local_analysis_result list.bc -o list-opt.bc also any suggestions for how to debug DSA efficiently? Thanks. Tianwei -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080423/92422805/attachment.html>
Dear Tianwei, You can use the -analyze option to the opt tool to tell the DSA passes to store their results in files. When you use the -analyze option, the DSA passes will create a separate file for each function (and possible one file to hold the globals graph). For this reason, I recommend running opt in a special empty directory because DSA will generate *a lot* of files. Second, to look at these files, you run them through the dot command from the GraphViz package to convert them into a graphic format. For example, I use: dot -Tpng file.dot > file.png ... to convert the file into a PNG graphic which I can then examine using my graphics program of choice. Also, you're aware that the -datastructure pass is just the local analysis pass, correct? The inter-procedural part is in the Bottom Up, Complete Bottom Up, and Top Down passes. -- John T. Tianwei wrote:> Hi, all: > Recently I am debugging the DSA and want to learn how it work, and now I am checking the local datastructure analysis. > I use the following command to print the graph: > (gdb) p g.dump() > digraph DataStructures { > label="Function addG"; > > Node0xe1f3a0 [shape=record,shape=Mrecord,label="{ i32: MRE\n|{<g0>}}"]; > Node0xe1f4d0 [shape=record,shape=Mrecord,label="{ i32*: SMR\n|{<g0>|<g1>}}"]; > Node0xe1f4d0:g0 -> Node0xe1f3a0; > Node0xe20900 [shape=record,shape=Mrecord,label="{ i32: GR\n @global\n|{<g0>}}"]; > Node0xe16530[ label =" %x_addr"]; > Node0xe16530 -> Node0xe1f4d0[arrowtail=tee,color=gray63]; > Node0xe162f0[ label =" %x"]; > Node0xe162f0 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > Node0xe16950[ label =" %tmp4"]; > Node0xe16950 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > Node0xe16730[ label =" %tmp"]; > Node0xe16730 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > } > > then I had to copy these lines out into a .dot file and use dot to convert it into a ps file. > I note that it also provide a lot print and dump functions in Printer.cpp, such as > void DSGraph::writeGraphToFile(std::ostream &O, > const std::string &GraphName) const { > > but i don't know how to use it, also there are other functions: > // print - Print out the analysis results... > void LocalDataStructures::print(std::ostream &O, const Module *M) const { > if (DontPrintAnything) return; > printCollection(*this, O, M, "ds."); > } > .......... > how these functions can be used in gdb? furthermore, are there any options which i can type in command line for DSA?, such as: > opt -load=xxxxxx -print_the_local_analysis_result list.bc -o list-opt.bc > > also any suggestions for how to debug DSA efficiently? > > Thanks. > > Tianwei > >
On Wed, Apr 23, 2008 at 11:59 PM, John Criswell <criswell at cs.uiuc.edu> wrote:> Dear Tianwei, > > You can use the -analyze option to the opt tool to tell the DSA passes > to store their results in files. When you use the -analyze option, the > DSA passes will create a separate file for each function (and possible > one file to hold the globals graph). For this reason, I recommend > running opt in a special empty directory because DSA will generate *a > lot* of files. > > Second, to look at these files, you run them through the dot command > from the GraphViz package to convert them into a graphic format. For > example, I use: > > dot -Tpng file.dot > file.png > > ... to convert the file into a PNG graphic which I can then examine > using my graphics program of choice. >John, thanks so much, but i tried the -analyze option, It didn't produce any .dot file in my working directory: opt -analyze -load=/home/stw/llvm/install/lib/libLLVMDataStructure.so list.bc -o list-opt.bc also the -analyze option in "-help" result shows that: -analyze - Only perform analysis, no optimization did I misunderstand what your said, or my building problem?> > Also, you're aware that the -datastructure pass is just the local > analysis pass, correct? The inter-procedural part is in the Bottom Up, > Complete Bottom Up, and Top Down passes. >Ok, I read Chris's thesis, and only knew the basic framework, so i want to debug the code to learn that in more depth.> > -- John T. > > Tianwei wrote: > > Hi, all: > > Recently I am debugging the DSA and want to learn how it work, and > now I am checking the local datastructure analysis. > > I use the following command to print the graph: > > (gdb) p g.dump() > > digraph DataStructures { > > label="Function addG"; > > > > Node0xe1f3a0 [shape=record,shape=Mrecord,label="{ i32: > MRE\n|{<g0>}}"]; > > Node0xe1f4d0 [shape=record,shape=Mrecord,label="{ i32*: > SMR\n|{<g0>|<g1>}}"]; > > Node0xe1f4d0:g0 -> Node0xe1f3a0; > > Node0xe20900 [shape=record,shape=Mrecord,label="{ i32: GR\n > @global\n|{<g0>}}"]; > > Node0xe16530[ label =" %x_addr"]; > > Node0xe16530 -> Node0xe1f4d0[arrowtail=tee,color=gray63]; > > Node0xe162f0[ label =" %x"]; > > Node0xe162f0 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > > Node0xe16950[ label =" %tmp4"]; > > Node0xe16950 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > > Node0xe16730[ label =" %tmp"]; > > Node0xe16730 -> Node0xe1f3a0[arrowtail=tee,color=gray63]; > > } > > > > then I had to copy these lines out into a .dot file and use dot to > convert it into a ps file. > > I note that it also provide a lot print and dump functions in > Printer.cpp, such as > > void DSGraph::writeGraphToFile(std::ostream &O, > > const std::string &GraphName) const { > > > > but i don't know how to use it, also there are other functions: > > // print - Print out the analysis results... > > void LocalDataStructures::print(std::ostream &O, const Module *M) const > { > > if (DontPrintAnything) return; > > printCollection(*this, O, M, "ds."); > > } > > .......... > > how these functions can be used in gdb? furthermore, are there any > options which i can type in command line for DSA?, such as: > > opt -load=xxxxxx -print_the_local_analysis_result list.bc -o > list-opt.bc > > > > also any suggestions for how to debug DSA efficiently? > > > > Thanks. > > > > Tianwei > > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-- Sheng, Tianwei Inst. of High Performance Computing Dept. of Computer Sci. & Tech. Tsinghua Univ. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080424/4763bc67/attachment.html>