diff options
-rw-r--r-- | src/cpu/o3/lsq_unit_impl.hh | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh index 9d71c2093..164a768bb 100644 --- a/src/cpu/o3/lsq_unit_impl.hh +++ b/src/cpu/o3/lsq_unit_impl.hh @@ -543,7 +543,7 @@ LSQUnit<Impl>::checkSnoop(PacketPtr pkt) // Check that this snoop didn't just invalidate our lock flag // [InvisiSpec] also make sure the instruction has been sent out // otherwise, we cause unneccessary squash - if (ld_inst->effAddrValid() && !ld_inst->fenceDelay() + if (ld_inst->effAddrValid() && (useIFT || !ld_inst->fenceDelay()) && (load_addr_low == invalidate_addr || load_addr_high == invalidate_addr) && ld_inst->memReqFlags & Request::LLSC) @@ -564,7 +564,7 @@ LSQUnit<Impl>::checkSnoop(PacketPtr pkt) // [SafeSpce] check snoop violation when the load has // been sent out; otherwise, unneccessary squash if (!ld_inst->effAddrValid() || ld_inst->strictlyOrdered() - || ld_inst->fenceDelay()) { + || (!useIFT && ld_inst->fenceDelay()) ) { incrLdIdx(load_idx); continue; } @@ -742,7 +742,7 @@ LSQUnit<Impl>::checkViolations(int load_idx, const DynInstPtr &inst) // [InvisiSpec] no need to check violation for unsent load // otherwise, unneccessary squash if (!ld_inst->effAddrValid() || ld_inst->strictlyOrdered() - || ld_inst->fenceDelay()) { + || (!useIFT && ld_inst->fenceDelay()) ) { incrLdIdx(load_idx); continue; } |