Basic Blocks in Compiler Design (original) (raw)

Last Updated : 12 Jul, 2025

**Basic Block is a straight line code sequence that has no branches in and out branches except to the entry and at the end respectively. Basic Block is a set of statements that always executes one after other, in a sequence.

The first task is to partition a sequence of three-address codes into basic blocks. A new basic block is begun with the first instruction and instructions are added until a jump or a label is met. In the absence of a jump, control moves further consecutively from one instruction to another. The idea is standardized in the algorithm below:

**Algorithm: Partitioning three-address code into basic blocks.

**Input: A sequence of three address instructions.

**Process: Instructions from intermediate code which are leaders are determined. The following are the rules used for finding a leader:

  1. The first three-address instruction of the intermediate code is a leader.
  2. Instructions that are targets of unconditional or conditional jump/goto statements are leaders.
  3. Instructions that immediately follow unconditional or conditional jump/goto statements are considered leaders.

Each leader thus determined its basic block contains itself and all instructions up to excluding the next leader.

**Basic blocks are sequences of instructions in a program that have no branches except at the entry and exit.

**Example 1:

The following sequence of three-address statements forms a basic block:

**t1 := a*a

**t2 := a*b

**t3 := 2*t2

**t4 := t1+t3

**t5 := b*b

**t6 := t4 +t5

A three address statement x:= y+z is said to define x and to use y and z. A name in a basic block is said to be live at a given point if its value is used after that point in the program, perhaps in another basic block.

**Example 2:
Intermediate code to set a 10*10 matrix to an identity matrix:

  1. i=1 //Leader 1 (First statement)
  2. j=1 //Leader 2 (Target of 11th statement)
  3. t1 = 10 * i //Leader 3 (Target of 9th statement)
  4. t2 = t1 + j
  5. t3 = 8 * t2
  6. t4 = t3 - 88
  7. a[t4] = 0.0
  8. j = j + 1
  9. if j <= 10 goto (3)
  10. i = i + 1 //Leader 4 (Immediately following Conditional goto statement)
  11. if i <= 10 goto (2)
  12. i = 1 //Leader 5 (Immediately following Conditional goto statement)
  13. t5 = i - 1 //Leader 6 (Target of 17th statement)
  14. t6 = 88 * t5
  15. a[t6] = 1.0
  16. i = i + 1
  17. if i <= 10 goto (13)

The given algorithm is used to convert a matrix into identity matrix i.e. a matrix with all diagonal elements 1 and all other elements as 0.

Steps (3)-(6) are used to make elements 0, step (14) is used to make an element 1. These steps are used recursively by goto statements.

There are **6 Basic Blocks in the above code :
B1) Statement 1
B2) Statement 2
B3) Statement 3-9
B4) Statement 10-11
B5) Statement 12
B6) Statement 13-17