]> granicus.if.org Git - llvm/commit
[MCA][Scheduler] Collect resource pressure and memory dependency bottlenecks.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 20 Feb 2019 18:01:49 +0000 (18:01 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Wed, 20 Feb 2019 18:01:49 +0000 (18:01 +0000)
commit68782b8c5a362068fe6363066d038210ed0ff711
tree284a38f8cf5096acb1b43d5e0411e0ad6a39d614
parentc8eeeb6fc0b627ed0d44fd8a1f5f3bbafccfe0e6
[MCA][Scheduler] Collect resource pressure and memory dependency bottlenecks.

Every cycle, the Scheduler checks if instructions in the ReadySet can be issued
to the underlying pipelines. If an instruction cannot be issued because one or
more pipeline resources are unavailable, then field
Instruction::CriticalResourceMask is updated with the resource identifier of the
unavailable resources.

If an instruction cannot be promoted from the PendingSet to the ReadySet because
of a memory dependency, then field Instruction::CriticalMemDep is updated with
the identifier of the dependending memory instruction.

Bottleneck information is collected after every cycle for instructions that are
waiting to execute. The idea is to help identify causes of bottlenecks; this
information can be used in future to implement a bottleneck analysis.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354490 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/MCA/HardwareUnits/Scheduler.h
include/llvm/MCA/Instruction.h
lib/MCA/HardwareUnits/Scheduler.cpp
lib/MCA/Stages/DispatchStage.cpp
lib/MCA/Stages/ExecuteStage.cpp