# Question about the structure of a program dependence graph

## Douglas do Couto Teixeira <douglasdocouto@gmail.com>Tue, 31 May 2011 13:09:58 -0700 (PDT)

From comp.compilers

Related articles
Question about the structure of a program dependence graph douglasdocouto@gmail.com (Douglas do Couto Teixeira) (2011-05-31)
Re: Question about the structure of a program dependence graph zwinkau@kit.edu (Andreas Zwinkau) (2011-06-03)
Re: Question about the structure of a program dependence graph gneuner2@comcast.net (George Neuner) (2011-06-03)
Re: Question about the structure of a program dependence graph douglasdocouto@gmail.com (Douglas do Couto Teixeira) (2011-06-05)
Re: Question about the structure of a program dependence graph zwinkau@kit.edu (Andreas Zwinkau) (2011-06-06)
| List of all articles for this month |

 From: Douglas do Couto Teixeira Newsgroups: comp.compilers Date: Tue, 31 May 2011 13:09:58 -0700 (PDT) Organization: Compilers Central Keywords: analysis, question Posted-Date: 02 Jun 2011 19:28:29 EDT

Dear all,

Given a program P in SSA form, let its dependence graph G = (V, E)
be a graph with a vertex nv for each variable v in P, and an edge
(na->nb) if b is defined by an instruction that uses a.

If P is a general program with GOTOs, then it is possible to have a
graph G that is dense, i.e., has O(N^2) edges, where N is the number
of variables in P.

However, if P contains only IF and WHILE, then it seems that the
number of edges in P will be O(N). Could you tell me if that is the
case? Otherwise, could you provide me a counter example?

If I add a break with a label, or exceptions, like in Java, then I
am tempted to believe that the number of edges in the dependence graph
is still O(N). Could you tell me if this assumption is wrong?

Example:

Let L be a language with the following instructions:
x = ?; // Variable assignment
x = phi(x0, ..., xn) // phi function
if (?) {...} else {...}
print (x)

Let P be a program in L:

x0 = ?;
if (?) {
x1 = ?;
}
x2 =phi (x0, x1)
print (x2);

Then P's dependence graph is:
x0 -> x2
x1 -> x2

Thank you very much,

Douglas

Post a followup to this message