Basic Block is a straight line code sequence which has no branches in and out branches except to the entry and at the end respectively. Basic Block is a set of statements which always executes one after other, in a sequence.
The first task is to partition a sequence of three-address code 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 jump control moves further consecutively from one instruction to another. The idea is standardized in the algorithm below:
Partitioning three-address code into basic blocks.
Input: A sequence of three address instructions.
Process: Instructions from intermediate code which are leaders are determined. Following are the rules used for finding leader:
- The first three-address instruction of the intermediate code is a leader.
- Instructions which are targets of unconditional or conditional jump/goto statements are leaders.
- Instructions which immediately follows unconditional or conditional jump/goto statements are considered as leaders.
For each leader thus determined its basic block contains itself and all instructions up to excluding the next leader.
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 <= 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 0 and all other elements as 1. Steps (3)-(6) are used to make elements 0 and 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
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Why FIRST and FOLLOW in Compiler Design?
- Introduction of Compiler Design
- Bootstrapping in Compiler Design
- Error Handling in Compiler Design
- Peephole Optimization in Compiler Design
- Loop Optimization in Compiler Design
- Runtime Environments in Compiler Design
- Input Buffering in Compiler Design
- Semantic Analysis in Compiler Design
- Labeling Algorithm in Compiler Design
- Code Optimization in Compiler Design
- Types of Parsers in Compiler Design
- Syntax Directed Translation in Compiler Design
- Introduction to Syntax Analysis in Compiler Design
- Introduction of Object Code in Compiler Design
- Intermediate Code Generation in Compiler Design
- Transition diagram for Identifiers in Compiler Design
- Compiler Design | Syntax Directed Definition
- Compiler Design | Detection of a Loop in Three Address Code
- Difference between Native compiler and Cross compiler
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.