summaryrefslogtreecommitdiff
path: root/src/cpu/o3
diff options
context:
space:
mode:
authorBrandon Potter <brandon.potter@amd.com>2015-04-22 07:52:03 -0700
committerBrandon Potter <brandon.potter@amd.com>2015-04-22 07:52:03 -0700
commita70a83155bfe4c3877894c29f9dea720beb40f9c (patch)
treea775f559a8c58b6f06cb6ac2a7b8286bcf258b62 /src/cpu/o3
parent4991c2996516b3226c37cde7ea4b05552e66277a (diff)
downloadgem5-a70a83155bfe4c3877894c29f9dea720beb40f9c.tar.xz
cpu: remove conditional check (count > 0) on o3 IQ squashes
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.
Diffstat (limited to 'src/cpu/o3')
-rw-r--r--src/cpu/o3/inst_queue_impl.hh5
1 files changed, 1 insertions, 4 deletions
diff --git a/src/cpu/o3/inst_queue_impl.hh b/src/cpu/o3/inst_queue_impl.hh
index 33e523f4d..fa621ffbf 100644
--- a/src/cpu/o3/inst_queue_impl.hh
+++ b/src/cpu/o3/inst_queue_impl.hh
@@ -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);