summaryrefslogtreecommitdiff
path: root/src/cpu/o3/inst_queue_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/inst_queue_impl.hh')
-rw-r--r--src/cpu/o3/inst_queue_impl.hh9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/cpu/o3/inst_queue_impl.hh b/src/cpu/o3/inst_queue_impl.hh
index f0b682602..8f0249ced 100644
--- a/src/cpu/o3/inst_queue_impl.hh
+++ b/src/cpu/o3/inst_queue_impl.hh
@@ -1192,8 +1192,15 @@ InstructionQueue<Impl>::doSquash(ThreadID tid)
NonSpecMapIt ns_inst_it =
nonSpecInsts.find(squashed_inst->seqNum);
+ // we remove non-speculative instructions from
+ // nonSpecInsts already when they are ready, and so we
+ // cannot always expect to find them
if (ns_inst_it == nonSpecInsts.end()) {
- assert(squashed_inst->getFault() != NoFault);
+ // loads that became ready but stalled on a
+ // blocked cache are alreayd removed from
+ // nonSpecInsts, and have not faulted
+ assert(squashed_inst->getFault() != NoFault ||
+ squashed_inst->isMemRef());
} else {
(*ns_inst_it).second = NULL;