Three address code

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In computer science, three-address code (often abbreviated to TAC or 3AC) is a form of representing intermediate code used by compilers to aid in the implementation of code-improving transformations. Each instruction in three-address code can be described as a 4-tuple: (operator, operand1, operand2, result).

Each statement has the general form of:

\text{result} := \text{operand}_1 \, \operatorname{operator} \, \text{operand}_2\,

such as:

x := y \, \operatorname{op} \, z\,

where x, y and z are variables, constants or temporary variables generated by the compiler. op represents any operator, e.g. an arithmetic operator.

Expressions containing more than one fundamental operation, such as:

p := x + y \times z\,

are not representable in three-address code as a single instruction. Instead, they are decomposed into an equivalent series of instructions, such as

t_1 := y \times z\,

p := x + t_1\,

The term three-address code is still used even if some instructions use more or fewer than two operands. The key features of three-address code are that every instruction implements exactly one fundamental operation, and that the source and destination may refer to any available register.

A refinement of three-address code is static single assignment form (SSA).

[edit] Example

 int main(void)
 {
     int i;
     int b[10];
     for (i = 0; i < 10; ++i) {
         b[i] = i*i; 
     }
 }

The preceding C program, translated into three-address code, might look something like the following:

      i := 0                  ; assignment
L1:   if i >= 10 goto L2      ; conditional jump
      t0 := i*i
      t1 := &b                ; address-of operation
      t2 := t1 + i            ; t2 holds the address of b[i]
      *t2 := t0               ; store through pointer
      i := i + 1
      goto L1
L2:

Another example:

if(a<b)
{
  x=x+1;
}
else if(c<d)
{
  y=y+1
}
1..if(a<b) then goto 4 
2..if(c<d) then goto 7
3..go to next 
4..t1=x+1
5..x=t1
6..go to 2
7..t2=y+1
8..t2=y
9..go to next

[edit] See also

[edit] External links

Personal tools
Namespaces
Variants
Actions
Navigation
Interaction
Toolbox
Print/export
Languages