From ae233c7723caf0c441e251883d887c98134e0482 Mon Sep 17 00:00:00 2001 From: Srikant Bharadwaj Date: Tue, 26 Feb 2019 14:44:40 -0500 Subject: [PATCH] cpu: Fix indirect branch history updates Recent changes to indirect branch predictor interface accesses non-existent buffers even when indirect predictor is not in use. Change-Id: I0df9ac4d5f6f3cb63e4d1bd36949c27f7611eef6 Reviewed-on: https://gem5-review.googlesource.com/c/16668 Reviewed-by: Anthony Gutierrez Maintainer: Anthony Gutierrez --- src/cpu/pred/bpred_unit.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cpu/pred/bpred_unit.cc b/src/cpu/pred/bpred_unit.cc index a768cc19e..2bfd90140 100644 --- a/src/cpu/pred/bpred_unit.cc +++ b/src/cpu/pred/bpred_unit.cc @@ -371,7 +371,9 @@ BPredUnit::squash(const InstSeqNum &squashed_sn, ThreadID tid) // This call should delete the bpHistory. squash(tid, pred_hist.front().bpHistory); - iPred.deleteDirectionInfo(tid, pred_hist.front().indirectHistory); + if (useIndirect) { + iPred.deleteDirectionInfo(tid, pred_hist.front().indirectHistory); + } DPRINTF(Branch, "[tid:%i]: Removing history for [sn:%i] " "PC %s.\n", tid, pred_hist.front().seqNum, @@ -452,8 +454,10 @@ BPredUnit::squash(const InstSeqNum &squashed_sn, pred_hist.front().bpHistory, true, pred_hist.front().inst, corrTarget.instAddr()); - iPred.changeDirectionPrediction(tid, pred_hist.front().indirectHistory, - actually_taken); + if (useIndirect) { + iPred.changeDirectionPrediction(tid, + pred_hist.front().indirectHistory, actually_taken); + } if (actually_taken) { if (hist_it->wasReturn && !hist_it->usedRAS) { -- 2.30.2