wiz-icon
MyQuestionIcon
MyQuestionIcon
1
You visited us 1 times! Enjoying our articles? Unlock Full Access!
Question

Consider the following ANSI C code segment:

z=x+3+yf1+yf2;

for(i=0;i<200;i=i+2){

if(z>i){

p=p+x+3;

q=q+yf1;

}else{

p=p+yf2;

q=q+x+3;
}
}
Assume that the variable y points to a struct (allocated on the heap) containing two fields f1 and f2, and the local variables x, y, z, p, q, and i are allotted registers. Common sub-expression elimination (CSE) optimization is applied on the code. The number of addition and dereference operations (of the form y f1 or y f2) in the optimized code, respectively, are :


A
403 and 102
No worries! We‘ve got your back. Try BYJU‘S free classes today!
B
203 and 2
No worries! We‘ve got your back. Try BYJU‘S free classes today!
C
303 and 102
No worries! We‘ve got your back. Try BYJU‘S free classes today!
D
303 and 2
Right on! Give the BNAT exam to get a 100% scholarship for BYJUS courses
Open in App
Solution

The correct option is D 303 and 2

t1=yf1(1dereference)

t2=yf2(1dereference)

t3=x+3(1add)

z=t3+t1+t2(2additions)

For (i = 0; i < 200; i + = 2)
{
if (z > i)
{
p = p + t3
q = q + t1(2 add)
}
else
{
p = p + p2
q = q + t3 (2 add)
}
}
If else condition
Either if is executed (or) else is executed.
At any iteration 2 addition operations will be executed.
So, in loop the iterations are (2002)=100times.
In loop the number of additions = 100 × 2 = 200 additions
Total additions = 200 + 1 + 2 + 100 loop additions (inside for loop) = 303
and 2 dereferences.
Correct answer is 303 and 2 which is option (a).


flag
Suggest Corrections
thumbs-up
0
Join BYJU'S Learning Program
similar_icon
Related Videos
thumbnail
lock
Binary Operations
MATHEMATICS
Watch in App
Join BYJU'S Learning Program
CrossIcon