OSDN Git Service

[MCA] Add an experimental MicroOpQueue stage.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 29 Mar 2019 12:15:37 +0000 (12:15 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 29 Mar 2019 12:15:37 +0000 (12:15 +0000)
commit3f27fbb514a3cfbcc917f9694faadd261c27861c
tree390b5e5164d5cd02c9a81951c81169d1ae9b1e40
parent142ef796c016576bc8eb3511ab43f0432f3729b3
[MCA] Add an experimental MicroOpQueue stage.

This patch adds an experimental stage named MicroOpQueueStage.
MicroOpQueueStage can be used to simulate a hardware micro-op queue (basically,
a decoupling queue between 'decode' and 'dispatch').  Users can specify a queue
size, as well as a optional MaxIPC (which - in the absence of a "Decoders" stage
- can be used to simulate a different throughput from the decoders).

This stage is added to the default pipeline between the EntryStage and the
DispatchStage only if PipelineOption::MicroOpQueue is different than zero. By
default, llvm-mca sets PipelineOption::MicroOpQueue to the value of hidden flag
-micro-op-queue-size.

Throughput from the decoder can be simulated via another hidden flag named
-decoder-throughput.  That flag allows us to quickly experiment with different
frontend throughputs.  For targets that declare a loop buffer, flag
-decoder-throughput allows users to do multiple runs, each time simulating a
different throughput from the decoders.

This stage can/will be extended in future. For example, we could add a "buffer
full" event to notify bottlenecks caused by backpressure. flag
-decoder-throughput would probably go away if in future we delegate to another
stage (DecoderStage?) the simulation of a (potentially variable) throughput from
the decoders. For now, flag -decoder-throughput is "good enough" to run some
simple experiments.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357248 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/MCA/Context.h
include/llvm/MCA/Stages/MicroOpQueueStage.h [new file with mode: 0644]
lib/MCA/CMakeLists.txt
lib/MCA/Context.cpp
lib/MCA/Stages/MicroOpQueueStage.cpp [new file with mode: 0644]
test/tools/llvm-mca/X86/uop-queue.s [new file with mode: 0644]
tools/llvm-mca/llvm-mca.cpp