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.
This commit is contained in:
parent
6019d73db4
commit
7db542c0dd
|
@ -1192,8 +1192,15 @@ InstructionQueue<Impl>::doSquash(ThreadID tid)
|
||||||
NonSpecMapIt ns_inst_it =
|
NonSpecMapIt ns_inst_it =
|
||||||
nonSpecInsts.find(squashed_inst->seqNum);
|
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()) {
|
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 {
|
} else {
|
||||||
|
|
||||||
(*ns_inst_it).second = NULL;
|
(*ns_inst_it).second = NULL;
|
||||||
|
|
Loading…
Reference in a new issue