Last Updated : 19 Nov, 2018

Consider the following code sequence having five instructions I1 to I5. Each of these instructions has the following format.

    OP Ri, Rj, Rk 

where operation OP is performed on contents of registers Rj and Rk and the result is stored in register Ri.

   I1 : ADD R1, R2, R3
   I2 : MUL R7, R1, R3
   I3 : SUB R4, R1, R5
   I4 : ADD R3, R2, R4
   I5 : MUL R7, R8, R9 

Consider the following three statements:

S1: There is an anti-dependence between instructions I2 and I5.
S2: There is an anti-dependence between instructions I2 and I4.
S3: Within an instruction pipeline an anti-dependence always 
    creates one or more stalls. 

Which one of above statements is/are correct?

(A) Only S1 is true
(B) Only S2 is true
(C) Only S1 and S2 are true
(D) Only S2 and S3 are true


Answer: (B)

Explanation: The given instructions can be written as below:

I1: R1 = R2 + R3
I2: R7 = R1 * R3
I3: R4 = R1 - R5 
I4: R3 = R2 + R4
I5: R7 = R8 * R9 

An anti-dependency, also known as write-after-read (WAR), occurs when an instruction requires a value that is later updated.

S1: There is an anti-dependence between instructions I2 and I5.
False, I2 and I5 don\'t form any write after read situation.  
They both write R7.

S2: There is an anti-dependence between instructions I2 and I4.
True, I2 reads R3 and I4 writes it.

S3: Within an instruction pipeline an anti-dependence always 
    creates one or more stalls. 
Anti-dependency can be removed by renaming variables. 
See following example.
1. B = 3
2. A = B + 1
3. B = 7
Renaming of variables could remove the dependency.
1. B = 3
N. B2 = B
2. A = B2 + 1
3. B = 7


Quiz of this Question


Share your thoughts in the comments