cpu-o3: Check predication before the SQ size for a debug print
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Thu, 27 Jul 2017 22:36:17 +0000 (23:36 +0100)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Fri, 13 Oct 2017 08:41:08 +0000 (08:41 +0000)
The size of the store entry in the LSQ is used to indicate a fault in
the execution of the store. At the same time, a store that is
predicated false will also have 0 size in the corresponding store
queue entry. This changeset ensures that we check if the store was
predicated false before checking the size field. This way we avoid
printing stores as faulting when they are only predicated false.

Change-Id: Ie07982197bd73d7b44d26a3257d54ecb103a952a
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/4821
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/cpu/o3/lsq_unit_impl.hh

index 65abaa438fe86812ea21e162f3b0b7d947432831..ca6a7f399c4c0e3b74a35de04cb83ecfec9bc9bc 100644 (file)
@@ -679,18 +679,18 @@ LSQUnit<Impl>::executeStore(DynInstPtr &store_inst)
         store_fault == NoFault)
         return store_fault;
 
-    if (!store_inst->readPredicate())
+    if (!store_inst->readPredicate()) {
+        DPRINTF(LSQUnit, "Store [sn:%lli] not executed from predication\n",
+                store_inst->seqNum);
         store_inst->forwardOldRegs();
+        return store_fault;
+    }
 
     if (storeQueue[store_idx].size == 0) {
         DPRINTF(LSQUnit,"Fault on Store PC %s, [sn:%lli], Size = 0\n",
                 store_inst->pcState(), store_inst->seqNum);
 
         return store_fault;
-    } else if (!store_inst->readPredicate()) {
-        DPRINTF(LSQUnit, "Store [sn:%lli] not executed from predication\n",
-                store_inst->seqNum);
-        return store_fault;
     }
 
     assert(store_fault == NoFault);