]> granicus.if.org Git - llvm/commit
[MCA][LSUnit] Track loads and stores until retirement.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 8 Oct 2019 10:46:01 +0000 (10:46 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 8 Oct 2019 10:46:01 +0000 (10:46 +0000)
commitc16d7eeac521332d590cf717d6eb5c7d2f233fab
tree48a1fe7fa5b31177dc1eaaf8556ae23e975970bf
parentb8534ab920075a8977f9057f0c51691784c05106
[MCA][LSUnit] Track loads and stores until retirement.

Before this patch, loads and stores were only tracked by their corresponding
queues in the LSUnit from dispatch until execute stage. In practice we should be
more conservative and assume that memory opcodes leave their queues at
retirement stage.

Basically, loads should leave the load queue only when they have completed and
delivered their data. We conservatively assume that a load is completed when it
is retired. Stores should be tracked by the store queue from dispatch until
retirement. In practice, stores can only leave the store queue if their data can
be written to the data cache.

This is mostly a mechanical change. With this patch, the retire stage notifies
the LSUnit when a memory instruction is retired. That would triggers the release
of LDQ/STQ entries.  The only visible change is in memory tests for the bdver2
model. That is because bdver2 is the only model that defines the load/store
queue size.

This patch partially addresses PR39830.

Differential Revision: https://reviews.llvm.org/D68266

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374034 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/MCA/HardwareUnits/LSUnit.h
include/llvm/MCA/Stages/RetireStage.h
lib/MCA/Context.cpp
lib/MCA/HardwareUnits/LSUnit.cpp
lib/MCA/Stages/RetireStage.cpp
test/tools/llvm-mca/X86/BdVer2/load-store-throughput.s
test/tools/llvm-mca/X86/BdVer2/load-throughput.s
test/tools/llvm-mca/X86/BdVer2/store-throughput.s