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);