This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Control Flow Graph


Thanks,
but i want to use the .cfg file to construct directly a tree_cfg in C language using the TREE SSA libraries of gcc. The doc-page is the follow http://people.redhat.com/dnovillo/pub/tree-ssa/doc/html/files.html. I'm not understand how to use this libraries to contstruct a tree-cfg to manipulate.
Can you help me?


Thanks to all,

lastnote

Diego Novillo ha scritto:

ultimanota@libero.it wrote on 11/15/06 06:06:

Hi all,
i must use cfg library to build and manipulate a control flow graph. I have read more but i have not found an answer to my question: It is possible to build a cfg structure directly from a file .cfg ?? How i can building a cfg from a file??
Thanks to all,


Ask for a dump using the -blocks switch and post-process the dump file with the attached script.

$ gcc -fdump-tree-all-blocks file.c
$ dump2dot file.c.XXXt.yyy

It generates a graphviz file with the flow graph of the function. The script is fairly simplistic and will not handle more than one function too gracefully, but that should be easy to change.

------------------------------------------------------------------------

#!/bin/sh
#
# (C) 2005 Free Software Foundation
# Contributed by Diego Novillo <dnovillo@redhat.com>.
#
# This script is Free Software, and it can be copied, distributed and
# modified as defined in the GNU General Public License.  A copy of
# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html

if [ "$1" = "" ] ; then
   echo "usage: $0 file"
   echo
   echo "Generates a GraphViz .dot graph file from 'file'."
   echo "It assumes that 'file' has been generated with -fdump-tree-...-blocks"
   echo
   exit 1
fi

file=$1
out=$file.dot
echo "digraph cfg {" > $out
echo " node [shape=box]" >>$out
echo ' size="11,8.5"' >>$out
echo >>$out
(grep -E '# BLOCK|# PRED:|# SUCC:' $file | \
sed -e 's:\[\([0-9\.%]*\)*\]::g;s:([a-z_,]*)::g' | \
awk '{ #print $0; \
if ($2 == "BLOCK") \
{ \
bb = $3; \
print "\t", bb, "[label=\"", bb, "\", style=filled, color=gray]"; \
} \
else if ($2 == "PRED:") \
{ \
for (i = 3; i <= NF; i++) \
print "\t", $i, "->", bb, ";"; \
} \
}') >> $out
echo "}" >> $out




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]