Addressed use of uninitialized data test failures.

PiperOrigin-RevId: 682349568
Change-Id: Idd4ff16e3793222f9467c03d86367405282e099e
diff --git a/mpact/sim/util/memory/cache.cc b/mpact/sim/util/memory/cache.cc
index 6b9af5d..defa1b3 100644
--- a/mpact/sim/util/memory/cache.cc
+++ b/mpact/sim/util/memory/cache.cc
@@ -286,7 +286,7 @@
   } else {
     size = db->size<uint8_t>();
   }
-  int latency = (db == nullptr) ? 0 : db->latency();
+  int latency = (db != nullptr) ? db->latency() : tags->latency();
 
   (void)CacheLookup(address, size, /*is_read=*/true);
   if (tagged_memory_ == nullptr) return;
diff --git a/mpact/sim/util/memory/test/cache_test.cc b/mpact/sim/util/memory/test/cache_test.cc
index bff1111..f6067a1 100644
--- a/mpact/sim/util/memory/test/cache_test.cc
+++ b/mpact/sim/util/memory/test/cache_test.cc
@@ -42,6 +42,7 @@
     // Create a cache 16kB, 16B blocks, direct mapped.
     cache_ = new Cache("cache");
     db_ = db_factory_.Allocate<uint32_t>(1);
+    db_->set_latency(0);
     read_hits_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
         cache_->GetCounter("read_hit"));
     read_misses_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
@@ -215,6 +216,11 @@
   DataBuffer *ld_db4 = db_factory_.Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = db_factory_.Allocate<uint64_t>(1);
 
+  ld_db1->set_latency(0);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
+
   cache_->Load(0x1000, ld_db1, nullptr, nullptr);
   cache_->Load(0x1002, ld_db2, nullptr, nullptr);
   cache_->Load(0x1004, ld_db4, nullptr, nullptr);
@@ -245,6 +251,9 @@
   DataBuffer *ld_tag_db = db_factory_.Allocate<uint8_t>(16);
   DataBuffer *st_data_db = db_factory_.Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *st_tag_db = db_factory_.Allocate<uint8_t>(16);
+  ld_data_db->set_latency(0);
+  ld_tag_db->set_latency(0);
+
   cache_->Load(0x1000, ld_data_db, ld_tag_db, nullptr, nullptr);
   // The loaded data should be all zeros.
   for (int i = 0; i < 16; i++) {
diff --git a/mpact/sim/util/memory/test/flat_demand_memory_test.cc b/mpact/sim/util/memory/test/flat_demand_memory_test.cc
index 1b82e25..c432cf9 100644
--- a/mpact/sim/util/memory/test/flat_demand_memory_test.cc
+++ b/mpact/sim/util/memory/test/flat_demand_memory_test.cc
@@ -23,7 +23,6 @@
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
-#include "mpact/sim/generic/instruction.h"
 
 namespace {
 
@@ -67,6 +66,10 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db1->set_latency(0);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   mem->Load(0x1000, ld_db1, nullptr, nullptr);
   mem->Load(0x1002, ld_db2, nullptr, nullptr);
@@ -101,6 +104,10 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db1->set_latency(0);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -138,6 +145,7 @@
   DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
   DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
   DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  ld_db->set_latency(0);
   DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   auto ld_span = ld_db->Get<uint32_t>();
   auto st_span = st_db->Get<uint32_t>();
@@ -173,6 +181,9 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   mem->Load(0x1000, ld_db2, nullptr, nullptr);
   mem->Load(0x1001, ld_db4, nullptr, nullptr);
@@ -195,13 +206,14 @@
   auto mem = std::make_unique<FlatDemandMemory>();
   DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint8_t>(
       FlatDemandMemory::kAllocationSize * 2);
+  ld_db->set_latency(0);
   DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint8_t>(
       FlatDemandMemory::kAllocationSize * 2);
   // Set the store data to known value.
-  std::memset(st_db->raw_ptr(), 0xbe, FlatDemandMemory::kAllocationSize);
+  std::memset(st_db->raw_ptr(), 0xbe, FlatDemandMemory::kAllocationSize * 2);
   mem->Store(0x1234, st_db);
   // Set the load data buffer to a different value.
-  std::memset(ld_db->raw_ptr(), 0xff, FlatDemandMemory::kAllocationSize);
+  std::memset(ld_db->raw_ptr(), 0xff, FlatDemandMemory::kAllocationSize * 2);
   mem->Load(0x1234, ld_db, nullptr, nullptr);
   // Compare the values loaded to the store data.
   EXPECT_THAT(ld_db->Get<uint8_t>(),
diff --git a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
index d905252..5a40ba9 100644
--- a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
+++ b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
@@ -77,6 +77,10 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db1->set_latency(0);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   mem->Load(0x1000, ld_db1, nullptr, nullptr);
   mem->Load(0x1002, ld_db2, nullptr, nullptr);
@@ -111,6 +115,10 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db1->set_latency(0);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -153,6 +161,7 @@
   DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
   DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
   DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  ld_db->set_latency(0);
   DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   auto ld_span = ld_db->Get<uint32_t>();
   auto st_span = st_db->Get<uint32_t>();
@@ -189,6 +198,9 @@
   DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
   DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
   DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  ld_db2->set_latency(0);
+  ld_db4->set_latency(0);
+  ld_db8->set_latency(0);
 
   mem->Load(0x1000, ld_db2, nullptr, nullptr);
   mem->Load(0x1001, ld_db4, nullptr, nullptr);
@@ -214,10 +226,12 @@
   DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint8_t>(
       TaggedFlatDemandMemory::kAllocationSize * 2);
   // Set the store data to known value.
-  std::memset(st_db->raw_ptr(), 0xbe, TaggedFlatDemandMemory::kAllocationSize);
+  std::memset(st_db->raw_ptr(), 0xbe,
+              TaggedFlatDemandMemory::kAllocationSize * 2);
   mem->Store(0x1234, st_db);
   // Set the load data buffer to a different value.
-  std::memset(ld_db->raw_ptr(), 0xff, TaggedFlatDemandMemory::kAllocationSize);
+  std::memset(ld_db->raw_ptr(), 0xff,
+              TaggedFlatDemandMemory::kAllocationSize * 2);
   mem->Load(0x1234, ld_db, nullptr, nullptr);
   // Compare the values loaded to the store data.
   EXPECT_THAT(ld_db->Get<uint8_t>(),
@@ -235,6 +249,8 @@
   DataBuffer *data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  data_db->set_latency(0);
+  tag_db->set_latency(0);
   int expected_err_count = 0;
   for (uint64_t address = 0x1000; address < 0x1010; address++) {
     // Only expect errors when the address is not aligned with kTagGranule.
@@ -261,6 +277,10 @@
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16 - 1);
   DataBuffer *long_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16 + 1);
+  data_db->set_latency(0);
+  tag_db->set_latency(0);
+  short_data_db->set_latency(0);
+  long_data_db->set_latency(0);
 
   // The correct data and tag db's will work.
   mem->Load(0x1000, data_db, tag_db, nullptr, nullptr);
@@ -288,6 +308,10 @@
   DataBuffer *tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   DataBuffer *short_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(8);
   DataBuffer *long_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(18);
+  data_db->set_latency(0);
+  tag_db->set_latency(0);
+  short_tag_db->set_latency(0);
+  long_tag_db->set_latency(0);
 
   // The correct data and tag db's will work.
   mem->Load(0x1000, data_db, tag_db, nullptr, nullptr);
@@ -311,6 +335,8 @@
   DataBuffer *ld_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  ld_data_db->set_latency(0);
+  ld_tag_db->set_latency(0);
   DataBuffer *st_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
@@ -364,6 +390,8 @@
   DataBuffer *ld_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  ld_data_db->set_latency(0);
+  ld_tag_db->set_latency(0);
   DataBuffer *st_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
   DataBuffer *st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);