Compiler Design
Compiler Design
Bachelor of Technology
Computer Science and Engineering
Submitted By
OCTOBER 2019
1. Abstract
2. Introduction
3. Body
Machine-independent Optimization
Machine-dependent Optimization
Basic Blocks
Loop Optimization
Dead-code Elimination
Partial Redundancy
4. Conclusion
5. References
TMSL/CSE/Term-Paper/Semester-7 2
Abstract
The main motive of this paper is to present the need of the code optimization and
work done in the field of the code optimization. The improvement within the
quality of code remains an enormous issue from the sooner days. Typically it's
troublesome for a computer programmer to seek out that a part of code consumes a
lot of resources and thence result in an inefficient code. Antecedently most of the
improvement were done manually or are often same as statically those results in
variety of issues to the computer programmer and additionally had a number of the
restrictions. However, of late many compilers area unit obtainable that makes the
improvement to be performed dynamically. During this treatise work, an endeavor
has been created to style and implement a system that may mechanically optimize
the code so as to reduce the quality of the code specified the code becomes a lot of
economical. Keywords: Code Optimization, Compiler, Code Reduction, Inlining
TMSL/CSE/Term-Paper/Semester-7 3
Introduction
In compiler style, there's one in all the technique within which a region of code is
being reworked to provide additional economical still on improve the performance
such the output remains same, termed as “Optimization”. Code improvement aims
to create top quality code with best quality (time and space) such it mustn't have an
effect on the precise results of the code. it's chiefly supported the criterion to
preserve the linguistics equivalence of the program, such the rule should not be
changed. On a mean, the transformation ought to speed up the execution of the
program. Improvement includes finding a bottleneck, a important a part of the code
that is that the primary shopper of the required resources. Essentially Code
improvement issues on correctness, it suggests that the correctness of the generated
code mustn't be modified. The most aim of the code improvement is to create top
quality code with improved quality (time and space) while not moving the precise
results of the code. On victimization totally different improvement techniques, the
code is often optimized while not moving the first (actual) rule and final output
with the intent of high performance. Once performance is to be thought of, then
there ought to select associate rule that runs quickly and therefore the on the
market computing resources are getting used expeditiously. So, it are often
aforementioned that the target of improvement is to put in writing a code in such
the simplest way that may cut back each the memory still as speed. Basically, Code
improvement involves the utilization of rules and algorithms to the program phase
with the aim such the code becomes quicker, smaller, additional economical then
on. In theoretical perspective, the compiler improvement essentially refers to the
program improvement to realize performance within the execution. ASCII text file
improvement refers to the 3 aspects, a programming language code (front code),
associate programming language code that is generated by the compiler to the
acceptable programming language (intermediate code), the article code that is
generated from the programming language code for the execution of the particular
work. This work involves the implementation of 2 totally different techniques,
dead code elimination and customary sub expression elimination with the
employment of various tools so as to optimize the code.
TMSL/CSE/Term-Paper/Semester-7 4
BODY
Machine-independent Optimization
In this optimization, the compiler takes in the intermediate code and transforms a
part of the code that does not involve any CPU registers and/or absolute memory
locations. For example:
do
{
item = 10;
value = value + item;
TMSL/CSE/Term-Paper/Semester-7 5
} while(value<100);
This code involves repeated assignment of the identifier item, which if we put this
way:
Item = 10;
do
{
value = value + item;
} while(value<100);
should not only save the CPU cycles, but can be used on any processor.
Machine-dependent Optimization
Machine-dependent optimization is done after the target code has been generated
and when the code is transformed according to the target machine architecture. It
involves CPU registers and may have absolute memory references rather than
relative references. Machine-dependent optimizers put efforts to take maximum
advantage of memory hierarchy.
Basic Blocks
Source codes generally have a number of instructions, which are always executed
in sequence and are considered as the basic blocks of the code. These basic blocks
do not have any jump statements among them, i.e., when the first instruction is
executed, all the instructions in the same basic block will be executed in their
sequence of appearance without losing the flow control of the program.
A program can have various constructs as basic blocks, like IF-THEN-ELSE,
SWITCH-CASE conditional statements and loops such as DO-WHILE, FOR, and
REPEAT-UNTIL, etc.
TMSL/CSE/Term-Paper/Semester-7 6
Header statements and the statements following them form a basic block.
A basic block does not include any header statement of any other basic
block.
Basic blocks are important concepts from both code generation and optimization
point of view.
Basic blocks play an important role in identifying variables, which are being used
more than once in a single basic block. If any variable is being used more than
once, the register memory allocated to that variable need not be emptied unless
the block finishes execution.
TMSL/CSE/Term-Paper/Semester-7 7
Loop Optimization
Most programs run as a loop in the system. It becomes necessary to optimize the
loops in order to save CPU cycles and memory. Loops can be optimized by the
following techniques:
Invariant code : A fragment of code that resides in the loop and computes
the same value at each iteration is called a loop-invariant code. This code
can be moved out of the loop by saving it to be computed only once, rather
than with each iteration.
Induction analysis : A variable is called an induction variable if its value is
altered within the loop by a loop-invariant value.
Strength reduction : There are expressions that consume more CPU cycles,
time, and memory. These expressions should be replaced with cheaper
expressions without compromising the output of expression. For example,
multiplication (x * 2) is expensive in terms of CPU cycles than (x << 1) and
yields the same result.
Dead-code Elimination
Dead code is one or more than one code statements, which are:
TMSL/CSE/Term-Paper/Semester-7 8
Either never executed or unreachable,
Or if executed, their output is never used.
Thus, dead code plays no role in any program operation and therefore it can
simply be eliminated.
The above control flow graph depicts a chunk of program where variable „a‟ is
used to assign the output of expression „x * y‟. Let us assume that the value
assigned to „a‟ is never used inside the loop.Immediately after the control leaves
the loop, „a‟ is assigned the value of variable „z‟, which would be used later in the
program. We conclude here that the assignment code of „a‟ is never used
anywhere, therefore it is eligible to be eliminated.
TMSL/CSE/Term-Paper/Semester-7 9
Likewise, the picture above depicts that the conditional statement is always false,
implying that the code, written in true case, will never be executed, hence it can
be removed.
Partial Redundancy
Redundant expressions are computed more than once in parallel path, without any
change in operands.whereas partial-redundant expressions are computed more
than once in a path, without any change in operands. For example,
TMSL/CSE/Term-Paper/Semester-7 10
We assume that the values of operands (y and z) are not changed from assignment
of variable a to variable c. Here, if the condition statement is true, then y OP z is
computed twice, otherwise once. Code motion can be used to eliminate this
redundancy, as shown below:
If (condition)
{
...
tmp = y OP z;
a = tmp;
...
}
else
{
...
tmp = y OP z;
}
c = tmp;
Here, whether the condition is true or false; y OP z should be computed only once.
TMSL/CSE/Term-Paper/Semester-7 11
CONCLUSION
TMSL/CSE/Term-Paper/Semester-7 12
REFERENCE
[1] Mr. Chirag H. Bhatt, Dr. Harshad B. Bhadka , “Peephole Optimization
Technique for analysis and review of Compile Design and Construction”, IOSR
Journal of Computer Engineering (IOSR-JCE), Volume 9, Issue 4 (Mar. - Apr.
2013).
[5]https://www.tutorialspoint.com/compiler_design/compiler_design_code_optimi
zation.htm
TMSL/CSE/Term-Paper/Semester-7 13