Consider the following ANSI C code segment:
z = x + 3 + y->f1 + y->f2;
for (i = 0; i < 200; i = i + 2){
if (z > i) {
p = p + x + 3;
q = q + y->f1;
} else {
p = p + y->f2;
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 \rightarrow f1\) or \(y \rightarrow f2\)) in the optimized code, respectively, are:
Step 1: Identify common sub-expressions.
The expressions \(x + 3\), \(y \rightarrow f1\), and \(y \rightarrow f2\) are loop-invariant and repeatedly used. With CSE applied, these expressions are computed only once and stored in temporary registers.
Let:
\[
t_1 = x + 3, t_2 = y \rightarrow f1, t_3 = y \rightarrow f2
\]
Step 2: Count dereference operations.
The dereferences \(y \rightarrow f1\) and \(y \rightarrow f2\) are each performed exactly once before the loop due to CSE.
\[
\text{Total dereference operations} = 2
\]
Step 3: Analyze addition operations.
• Computation of \(z = x + 3 + y \rightarrow f1 + y \rightarrow f2\):
This requires 3 additions.
• The loop runs from \(i = 0\) to \(i < 200\) with step size 2, so the number of iterations is:
\[
\frac{200}{2} = 100
\]
• In each iteration, exactly one addition is executed for updating either \(p\) or \(q\), depending on the branch taken, and another addition for updating the other variable. Hence, 3 additions per iteration occur (two inside the body and one for incrementing \(i\)).
Thus, total additions inside the loop:
\[
100 \times 3 = 300
\]
Step 4: Total addition count.
\[
3 \text{ (initial)} + 300 \text{ (loop)} = 303
\]
Step 5: Final conclusion.
After common sub-expression elimination, the optimized code performs:
• \(303\) addition operations
• \(2\) dereference operations
Consider the following statements about the use of backpatching in a compiler for intermediate code generation:
1. Backpatching can be used to generate code for Boolean expressions in one pass.
2. Backpatching can be used to generate code for flow-of-control statements in one pass.
Which ONE of the following options is CORRECT?
For a statement \(S\) in a program, in the context of liveness analysis, the following sets are defined:
\(USE(S)\) : the set of variables used in \(S\)
\(IN(S)\) : the set of variables that are live at the entry of \(S\)
\(OUT(S)\) : the set of variables that are live at the exit of \(S\)
Consider a basic block that consists of two statements, \(S_1\) followed by \(S_2\). Which one of the following statements is correct?
In the diagram, the lines QR and ST are parallel to each other. The shortest distance between these two lines is half the shortest distance between the point P and the line QR. What is the ratio of the area of the triangle PST to the area of the trapezium SQRT?
Note: The figure shown is representative

A square paper, shown in figure (I), is folded along the dotted lines as shown in figures (II) and (III). Then a few cuts are made as shown in figure (IV). Which one of the following patterns will be obtained when the paper is unfolded?
Consider the relationships among P, Q, R, S, and T:
• P is the brother of Q.
• S is the daughter of Q.
• T is the sister of S.
• R is the mother of Q.
The following statements are made based on the relationships given above.
(1) R is the grandmother of S.
(2) P is the uncle of S and T.
(3) R has only one son.
(4) Q has only one daughter.
Which one of the following options is correct?