Mercurial > hg > graal-compiler
view doc/design/graphdrawing.tex @ 2542:7a0e1bd2bb64
Draft for graph classes
author | Gilles Duboscq <gilles.duboscq@oracle.com> |
---|---|
date | Wed, 27 Apr 2011 21:25:15 +0200 |
parents | 8c6e31c62fba |
children | 550b291f56c4 |
line wrap: on
line source
% graph drawing \newcommand{\digraph}[3][scale=1]{ \newwrite\dotfile \immediate\openout\dotfile=dot_temp_#2.dot \immediate\write\dotfile{digraph dot_temp_#2 {\string#3}} \immediate\closeout\dotfile \immediate\write18{bash -c "dot -Tpdf dot_temp_#2.dot > dot_temp_#2.pdf"} \IfFileExists{dot_temp_#2.pdf} % the pdf exists: include it { \includegraphics[#1]{dot_temp_#2} } % the pdf was not created - show a hint { \fbox{ \begin{tabular}{l} The file \texttt{dot_temp_#2.pdf} hasn't been created from \texttt{dot_temp_#2.dot} yet. \\ We attempted to create it with:\\ `\texttt{dot -Tpdf dot_temp_#2.dot > dot_temp_#2.pdf}' \\ but that seems not to have worked. You need to execute `\texttt{pdflatex}' with \\ the `\texttt{-shell-escape} option. \end{tabular}} } } \NewEnviron{digraphenv}[2]{\digraph[#1]{#2}{ margin=0; pad=0; \BODY }} \newcommand{\control}[2]{#1:successors:s -> #2:predecessors:n [color=red];} \newcommand{\controllabel}[2]{#1 -> #2:predecessors:n [color=red];} \newcommand{\data}[2]{#2:usages:s -> #1:inputs [color=black,dir=back];} \newcommand{\datalabel}[2]{#2:usages:s -> #1:n [color=black,dir=back];} \newcommand{\genericnodestart}[1]{#1 [shape=plaintext, label=< <TABLE BORDER="0" CELLSPACING="0"><TR><TD CELLPADDING="0"><TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0"><TR><TD WIDTH="15" HEIGHT="5" PORT="predecessors" BGCOLOR="rosybrown1"></TD></TR></TABLE></TD><TD COLSPAN="2" CELLPADDING="0" ALIGN="RIGHT"><TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0"><TR>} \newcommand{\genericnodeend}[0]{</TR></TABLE></TD><TD CELLPADDING="0"><TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0"><TR><TD WIDTH="15" HEIGHT="5" PORT="usages" BGCOLOR="lightgrey"></TD></TR></TABLE></TD></TR></TABLE>>]} \newcommand{\portinput}[1]{<TD WIDTH="15" HEIGHT="5" PORT="#1" BGCOLOR="lightgrey"></TD>} \newcommand{\portsuccessor}[1]{<TD WIDTH="15" HEIGHT="5" PORT="#1" BGCOLOR="rosybrown1"></TD>} \newcommand{\portempty}[0]{<TD WIDTH="15" HEIGHT="5"></TD>} \newcommand{\genericnodelabel}[1]{</TR></TABLE></TD></TR><TR><TD BORDER="1" COLSPAN="3">#1</TD></TR><TR><TD COLSPAN="2" CELLPADDING="0" ALIGN="RIGHT"><TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0"><TR>} \newcommand{\node}[2]{\genericnodestart{#1} \portempty \portinput{inputs} \genericnodelabel{#2} \portsuccessor{successors} \portempty \genericnodeend } \newcommand{\nodebi}[2]{\genericnodestart{#1} \portinput{in1} \portinput{in2} \genericnodelabel{#2} \portsuccessor{successors} \portempty \genericnodeend } \newcommand{\nodetri}[2]{\genericnodestart{#1} \portinput{in1} \portinput{in2} \portinput{in3} \genericnodelabel{#2} \portsuccessor{successors} \portempty \portempty \genericnodeend } \newcommand{\nodesplit}[2]{\genericnodestart{#1} \portempty \portinput{inputs} \genericnodelabel{#2} \portsuccessor{succ1} \portsuccessor{succ2} \genericnodeend } %%%%%%%%%%%%%% example: % \begin{digraphenv}{scale=0.5}{MyGraph} % \node{start}{start} % \node{end}{end} % % input projections % \node{a}{proj:a} % \node{b}{proj:b} % \data{a}{start} % \data{b}{start} % % if % \nodebi{cmp1}{<} % \datalabel{cmp1:in1}{a} % \datalabel{cmp1:in2}{b} % \nodesplit{if}{if} % \data{if}{cmp1} % \control{start}{if} % % branches % \nodebi{add1}{+} % \datalabel{add1:in1}{a} % \datalabel{add1:in2}{b} % \nodebi{sub1}{-} % \datalabel{sub1:in1}{a} % \datalabel{sub1:in2}{b} % \controllabel{if:succ1}{add1} % \controllabel{if:succ2}{sub1} % % merge % \nodebi{merge}{merge} % \control{add1}{merge} % \control{sub1}{merge} % % phi % \nodebi{phi1}{phi} % \datalabel{phi1:in1}{add1} % \datalabel{phi1:in2}{sub1} % % ret % \node{ret}{ret} % \data{ret}{phi1} % \control{merge}{ret} % \control{ret}{end} % \end{digraphenv} %%%%%%%%%%%%%%%