@Vicky rix @reena_kandari @rahul @chottu ji
The final conclusions : (Comment if something wrong)
1) Operand forwarding is used to avoid RAW hazards but it is not necessary that it will always avoid them.
2) Register renaming can be used to avoid WAR and WAW hazards (I think this is NOT always successful)
From a computer architecture point of view, an additional problem for write-after-read hazards is dealing with load and store operations to main memory. Register renaming won't help with this problem
3) Now,Only out of order execution can produce WAR and WAW hazards --> This statement is false.
here, we are executing the two instructions inorder but, still write by I2 is performed first and then write by I1(This is wrong,first I1 should write R1 and then I2).
3) There are no WAR hazards .. there are only WAR dependencies ... A dependency if it causes a pipeline to stall then that dependency is called as a hazard ... Here though we have 3 WAR dependencies ... none of them produces stall cycles ... so 0 WAR hazards ...
4) Keeping in mind point (3) above, the answer to (c) part is Yes because after using operand forwarding in this case we are successful in eliminating all hazards.