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>
Tianwei wrote:> On Wed, Apr 23, 2008 at 11:59 PM, John Criswell <criswell at cs.uiuc.edu<mailto: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 >Sorry; I wasn't clear. The -analyze option is an option to opt to tell it to print analysis results instead of doing transformations. You still need to specify the analysis passes that you want run. For example, to see the local DSA results, do the following: opt -load <path to libLLVMDataStructure.so> -analyze -datastructure list.bc To get the Top-Down results, you would do: opt -load <path to libLLVMDataStructure.so> -analyze -tddatastructure list.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. >You can also get information on DSA from the PLDI 2007 paper (http://llvm.org/pubs/2007-06-10-PLDI-DSA.html). -- John T.> -- 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<mailto: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. > >
On Thu, Apr 24, 2008 at 12:25 AM, John Criswell <criswell at cs.uiuc.edu> wrote:> Tianwei wrote: > > On Wed, Apr 23, 2008 at 11:59 PM, John Criswell <criswell at cs.uiuc.edu > <mailto: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 > > > Sorry; I wasn't clear. The -analyze option is an option to opt to tell > it to print analysis results instead of doing transformations. You still > need to specify the analysis passes that you want run. > > For example, to see the local DSA results, do the following: > > opt -load <path to libLLVMDataStructure.so> -analyze -datastructure > list.bc > > To get the Top-Down results, you would do: > > opt -load <path to libLLVMDataStructure.so> -analyze -tddatastructure > list.bc > >thanks so much, it works:-). but in my version, i use the following pass flag: -ds-aa - Data Structure Graph Based Alias Analysis -ds-opt - DSA-based simple optimizations -dsa-bu - Bottom-up Data Structure Analysis -dsa-local - Local Data Structure Analysis -dsa-stdlib - Standard Library Local Data Structure Analysis -dsa-td - Top-down Data Structure Analysis Tianwei> > > 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. > > > You can also get information on DSA from the PLDI 2007 paper > (http://llvm.org/pubs/2007-06-10-PLDI-DSA.html). > > -- John T. > > > -- 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<mailto: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. > > > > > > _______________________________________________ > 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/5f41ad7f/attachment.html>