From 7db542c0ddf8904bda00d3c73408172136cd48a3 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Fri, 24 Jan 2014 15:29:29 -0600 Subject: [PATCH] cpu: Relax check on squashed non-speculative instructions This patch relaxes the check performed when squashing non-speculative instructions, as it caused problems with loads that were marked ready, and then stalled on a blocked cache. The assertion is now allowing memory references to be non-faulting. --- src/cpu/o3/inst_queue_impl.hh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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::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; -- 2.30.2