DAG Representation in Compiler Design

Estudies4you
DAG Representation
  • DAG stands for Directed Acyclic Graph
  • Syntax tree and DAG both, are graphical representations. Syntax tree does not find the common sub expressions whereas DAG can
  • Another usage of DAG is the application of optimization technique in the basic block
  • To apply optimization technique on basic block, a DAG is a constructed three address code which is the output of an intermediate code generation
Characteristics of DAG are:
  • All internal nodes store operator values
  • External or leaf nodes are identifiers or variable names or constants
Algorithm for Construction of DAG
There are three possible cases to construct DAG on three address code:
Case 1: x = y op z
Case 2: x = op y
Case 3: x = y
DAG can be constructed as follows:
STEP 1:
If y is undefined then create a node with label y. Similarly create a node with label z.
STEP 2:
For case 1, create a node with label op whose left child is node y, and node z will be the right child. Also, check for any common sub expressions. For case 2, determine if a node is labelled op. such node will have a child node y. for case 3 node n will be node y.
STEP 3:
Delete x from list of identifiers for node x. append x to the list of attached identifiers for node n found in step 2.

Example:
Consider the following three address code statements.
                                                                       a = b * c
                                                                       d = b
                                                                       e = d * c
                                                                       b = e
                                                                       f = b + c
                                                                       g = f + d
Step 1
Consider the first statement, i.e., a = b * c. Create a leaf node with label b and c as left and right child respectively and parent of it will be *. Append resultant variable a to the node *.
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,

Step 2
For second statement, i.e., d = b, node b is already created. So, append d to this node.
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,

Step 3
For third statement e = d * c, the nodes for d, c and * are already create. Node e  is not created, so append node e to node *.
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,

Step 4
For fourth statement b = e, append b to node e.
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,

Step 5
For fifth statement f = b + c, create a node for operator + whose left child b and right child c and append f to newly created node +
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,

Step 6
For last statement g = f + d, create a node for operator + whose left child d and right child f and append g to newly created node +.
Algorithm for Construction of DAG,DAG Representation in compiler design, Directed Acyclic Graph,DAG Stands for, steps for constructing dag, applications of DAG, what is DAG, what is the use of dag, dag in code optimization, role of dag in code optimization, how to construct DAG, estudies4you, compiler design lecture notes pdf, compiler design classroom notes pdf, jntuh compiler design notes,


DAG Applications:
  • Determines the common sub expressions
  • Determines the names used inside the block, and the names that are computed outside the block
  • Determines which statements of the block could have their computed value outside the block
  • Code may be represented by a DAG describing the inputs and outputs of each of the arithmetic operations performed within the code; this representation allows the compiler to perform common subexpression elimination efficiently
  • Several programming languages describe systems of values that are related to each other by a directed acyclic graph. When one value changes, its successors are recalculate; each value is evaluated as a function of this predecessors in the DAG
To Top