cpu: remove conditional check (count > 0) on o3 IQ squashes
authorBrandon Potter <brandon.potter@amd.com>
Wed, 22 Apr 2015 14:52:03 +0000 (07:52 -0700)
committerBrandon Potter <brandon.potter@amd.com>
Wed, 22 Apr 2015 14:52:03 +0000 (07:52 -0700)
The o3 cpu instruction queue model uses the count variable to track the number
of unissued instructions in the queue. Previously, the squash method used
this variable to avoid executing the doSquash method when there were no
unissued instructions in the pipeline.  A corner case problem exists when
only issued instructions exist in the pipeline and a squash occurs; the
doSquash code is not invoked and subsequently does not clean up state properly.

src/cpu/o3/inst_queue_impl.hh

index 33e523f4d05d44b7d60bbe3d940d1e27c16869e1..fa621ffbf273f73141015398192f8af6697f4dd4 100644 (file)
@@ -1164,10 +1164,7 @@ InstructionQueue<Impl>::squash(ThreadID tid)
     // time buffer.
     squashedSeqNum[tid] = fromCommit->commitInfo[tid].doneSeqNum;
 
-    // Call doSquash if there are insts in the IQ
-    if (count[tid] > 0) {
-        doSquash(tid);
-    }
+    doSquash(tid);
 
     // Also tell the memory dependence unit to squash.
     memDepUnit[tid].squash(squashedSeqNum[tid], tid);