diff -r 04772aca657c -r 1ff2c6f15a6a src/cpu/o3/iew_impl.hh --- a/src/cpu/o3/iew_impl.hh Mon Dec 06 16:05:36 2010 -0800 +++ b/src/cpu/o3/iew_impl.hh Mon Dec 06 16:08:05 2010 -0800 @@ -1293,11 +1293,17 @@ // instruction first, so the branch resolution order will be correct. ThreadID tid = inst->threadNumber; - if (!fetchRedirect[tid] || - !toCommit->squash[tid] || - toCommit->squashedSeqNum[tid] > inst->seqNum) { + // Prevent testing for misprediction on non-speculative, load instructions, + // that have not been executed. + bool nonSpecNotExecuted = (inst->isNonSpeculative() + && !inst->isExecuted() + && inst->isLoad()); - if (inst->mispredicted()) { + if ((!fetchRedirect[tid] || + !toCommit->squash[tid] || + toCommit->squashedSeqNum[tid] > inst->seqNum)) { + + if (inst->mispredicted() && !nonSpecNotExecuted) { fetchRedirect[tid] = true; DPRINTF(IEW, "Execute: Branch mispredict detected.\n");