From: Maximilien Breughe Date: Mon, 22 Mar 2010 20:59:12 +0000 (-0400) Subject: inorder: fix squash bug in branch predictor X-Git-Tag: stable_2012_02_02~1445 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0170e851de4b06f8839f25bfa9551e02ec4f24b3;p=gem5.git inorder: fix squash bug in branch predictor --- diff --git a/src/cpu/inorder/resources/bpred_unit.cc b/src/cpu/inorder/resources/bpred_unit.cc index 0e8526fa1..c9674a0b5 100644 --- a/src/cpu/inorder/resources/bpred_unit.cc +++ b/src/cpu/inorder/resources/bpred_unit.cc @@ -343,6 +343,8 @@ BPredUnit::squash(const InstSeqNum &squashed_sn, // corresponding to the squash. In that case, don't bother trying to // fix up the entry. if (!pred_hist.empty()) { + if(pred_hist.front().seqNum==squashed_sn){ + assert(pred_hist.front().seqNum == squashed_sn); if (pred_hist.front().usedRAS) { ++RASIncorrect; @@ -353,6 +355,7 @@ BPredUnit::squash(const InstSeqNum &squashed_sn, BTB.update(pred_hist.front().PC, corr_target, tid); pred_hist.pop_front(); + } } } diff --git a/src/cpu/inorder/resources/branch_predictor.cc b/src/cpu/inorder/resources/branch_predictor.cc index ecac5fff0..ea9cf7207 100644 --- a/src/cpu/inorder/resources/branch_predictor.cc +++ b/src/cpu/inorder/resources/branch_predictor.cc @@ -56,6 +56,8 @@ BranchPredictor::regStats() .desc("Number of Branches Predicted As Not Taken (False)."); Resource::regStats(); + + branchPred.regStats(); } void @@ -140,7 +142,9 @@ BranchPredictor::squash(DynInstPtr inst, int squash_stage, InstSeqNum squash_seq_num, ThreadID tid) { DPRINTF(InOrderBPred, "Squashing...\n"); - branchPred.squash(squash_seq_num, tid); + Addr corr_targ=inst->readPredPC(); + bool taken=inst->predTaken(); + branchPred.squash(squash_seq_num,corr_targ,taken,tid); } void