llvm-project/llvm/tools
Andrea Di Biagio 373a4ccf6c [llvm-mca][MC] Add the ability to declare which processor resources model load/store queues (PR36666).
This patch adds the ability to specify via tablegen which processor resources
are load/store queue resources.

A new tablegen class named MemoryQueue can be optionally used to mark resources
that model load/store queues.  Information about the load/store queue is
collected at 'CodeGenSchedule' stage, and analyzed by the 'SubtargetEmitter' to
initialize two new fields in struct MCExtraProcessorInfo named `LoadQueueID` and
`StoreQueueID`.  Those two fields are identifiers for buffered resources used to
describe the load queue and the store queue.
Field `BufferSize` is interpreted as the number of entries in the queue, while
the number of units is a throughput indicator (i.e. number of available pickers
for loads/stores).

At construction time, LSUnit in llvm-mca checks for the presence of extra
processor information (i.e. MCExtraProcessorInfo) in the scheduling model.  If
that information is available, and fields LoadQueueID and StoreQueueID are set
to a value different than zero (i.e. the invalid processor resource index), then
LSUnit initializes its LoadQueue/StoreQueue based on the BufferSize value
declared by the two processor resources.

With this patch, we more accurately track dynamic dispatch stalls caused by the
lack of LS tokens (i.e. load/store queue full). This is also shown by the
differences in two BdVer2 tests. Stalls that were previously classified as
generic SCHEDULER FULL stalls, are not correctly classified either as "load
queue full" or "store queue full".

About the differences in the -scheduler-stats view: those differences are
expected, because entries in the load/store queue are not released at
instruction issue stage. Instead, those are released at instruction executed
stage.  This is the main reason why for the modified tests, the load/store
queues gets full before PdEx is full.

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

llvm-svn: 347857
2018-11-29 12:15:56 +00:00
..
bugpoint [TI removal] Make `getTerminator()` return a generic `Instruction`. 2018-10-15 10:42:50 +00:00
bugpoint-passes Remove redundant includes from tools. 2017-12-13 21:31:10 +00:00
dsymutil Make dsymutil more robust when parsing load commands. 2018-11-13 23:31:25 +00:00
gold [gold-plugin] Fix a bunch of build warnings 2018-11-01 23:34:12 +00:00
llc [llc] Fix sanitizer failure. 2018-06-23 19:04:10 +00:00
lli [Support] Make error banner optional in logAllUnhandledErrors 2018-11-11 01:46:03 +00:00
llvm-ar [llvm-ar] Strip trailing \r and format 2018-10-26 17:38:27 +00:00
llvm-as [ThinLTO] Parse module summary index from assembly 2018-06-26 13:56:49 +00:00
llvm-as-fuzzer make add_llvm_fuzzer calls slightly more consisten with other cmake 2018-05-11 17:58:52 +00:00
llvm-bcanalyzer [IR] Add a dedicated FNeg IR Instruction 2018-11-13 18:15:47 +00:00
llvm-c-test [LLVM-C] Improve Intrinsics Bindings 2018-11-06 01:38:14 +00:00
llvm-cat Pass a reference to a module to the bitcode writer. 2018-02-14 19:11:32 +00:00
llvm-cfi-verify Revert r342148 (and follow-on fix attempts r342154, r342180, r342182, r342193) 2018-09-15 19:04:27 +00:00
llvm-config llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
llvm-cov [Support] Make error banner optional in logAllUnhandledErrors 2018-11-11 01:46:03 +00:00
llvm-cvtres [opt] Change the parameter of OptTable::PrintHelp from Name to Usage and don't append "[options] <inputs>" 2018-10-10 00:15:31 +00:00
llvm-cxxdump [Support] Make error banner optional in logAllUnhandledErrors 2018-11-11 01:46:03 +00:00
llvm-cxxfilt Define InitLLVM to do common initialization all at once. 2018-04-13 18:26:06 +00:00
llvm-cxxmap Add flag to llvm-profdata to allow symbols in profile data to be remapped, and 2018-09-13 20:22:02 +00:00
llvm-demangle-fuzzer make add_llvm_fuzzer calls slightly more consisten with other cmake 2018-05-11 17:58:52 +00:00
llvm-diff [TI removal] Make `getTerminator()` return a generic `Instruction`. 2018-10-15 10:42:50 +00:00
llvm-dis [ThinLTO] Print module summary index to assembly 2018-05-26 02:34:13 +00:00
llvm-dwarfdump Revert r347490 as it breaks address sanitizer builds 2018-11-23 17:13:06 +00:00
llvm-dwp Reland rL341509: "[llvm-dwp] Use buffer_stream if output file is not seekable (e.g. "-")" 2018-09-06 20:26:54 +00:00
llvm-exegesis [llvm-exegesis][NFC] Some code style cleanup 2018-11-20 14:41:59 +00:00
llvm-extract Define InitLLVM to do common initialization all at once. 2018-04-13 18:26:06 +00:00
llvm-go [bindings/go] Add coroutine passes 2018-08-19 23:40:05 +00:00
llvm-isel-fuzzer CodeGen: Add a dwo output file argument to addPassesToEmitFile and hook it up to dwo output. 2018-05-21 20:16:41 +00:00
llvm-jitlistener Define InitLLVM to do common initialization all at once. 2018-04-13 18:26:06 +00:00
llvm-link Restore "[ThinLTO] Ensure we always select the same function copy to import" 2018-07-16 15:30:27 +00:00
llvm-lto [ThinLTO]Expose cache entry expiration time option in llvm-lto and fix a test 2018-10-03 13:00:20 +00:00
llvm-lto2 [LTO] Call InitLLVM from llvm-lto2 2018-10-16 17:37:45 +00:00
llvm-mc [MC] Separate masm integer literal lexer support from inline asm 2018-10-24 20:23:57 +00:00
llvm-mc-assemble-fuzzer [llvm-mc-assemble-fuzzer] Update API - Pass MCObjectWriter instead of a stream 2018-08-17 04:38:41 +00:00
llvm-mc-disassemble-fuzzer make add_llvm_fuzzer calls slightly more consisten with other cmake 2018-05-11 17:58:52 +00:00
llvm-mca [llvm-mca][MC] Add the ability to declare which processor resources model load/store queues (PR36666). 2018-11-29 12:15:56 +00:00
llvm-modextract Pass a reference to a module to the bitcode writer. 2018-02-14 19:11:32 +00:00
llvm-mt [llvm-mt] Accept and ignore notify_update flag 2018-11-07 18:36:50 +00:00
llvm-nm [llvm-nm] Fix use-after-free for MachOUniversalBinaries 2018-11-19 17:19:50 +00:00
llvm-objcopy [llvm-objcopy] Hook up the -V alias to --version, output "GNU strip" 2018-11-28 06:51:50 +00:00
llvm-objdump [llvm-objdump] Print a blank row at the end of sections 2018-11-17 08:12:48 +00:00
llvm-opt-fuzzer [NewPM] teach -passes= to emit meaningful error messages 2018-10-17 10:36:23 +00:00
llvm-opt-report Reland: [OptRemarks] Add library for parsing optimization remarks 2018-10-10 18:43:42 +00:00
llvm-pdbutil Fix a few small issues in llvm-pdbutil 2018-11-02 18:00:37 +00:00
llvm-profdata Add flag to llvm-profdata to allow symbols in profile data to be remapped, and 2018-09-13 20:22:02 +00:00
llvm-rc [llvm-rc] Support joined or separate spelling for /fo flag 2018-11-09 03:16:53 +00:00
llvm-readobj Revert r347490 as it breaks address sanitizer builds 2018-11-23 17:13:06 +00:00
llvm-rtdyld [Support] Make error banner optional in logAllUnhandledErrors 2018-11-11 01:46:03 +00:00
llvm-shlib Support of hurd in llvm-shlib 2018-10-18 20:07:44 +00:00
llvm-size [llvm-size] Use empty() and range-based for loop. NFC 2018-11-22 00:44:17 +00:00
llvm-special-case-list-fuzzer make add_llvm_fuzzer calls slightly more consisten with other cmake 2018-05-11 17:58:52 +00:00
llvm-split Pass a reference to a module to the bitcode writer. 2018-02-14 19:11:32 +00:00
llvm-stress [Support] Rename tool_output_file to ToolOutputFile, NFC 2017-09-23 01:03:17 +00:00
llvm-strings [llvm-strings] Fix whitespaces to match strings output. 2018-11-09 18:03:21 +00:00
llvm-symbolizer [llvm-symbolizer] Simplify 2018-05-26 02:29:14 +00:00
llvm-undname [llvm-undname] Use WithColor for error reporting 2018-11-11 22:11:47 +00:00
llvm-xray [Support] Make error banner optional in logAllUnhandledErrors 2018-11-11 01:46:03 +00:00
llvm-yaml-numeric-parser-fuzzer Use LLVM_BUILTIN_TRAP not __builtin_trap to appease windows builds. NFCI. 2018-08-20 09:49:20 +00:00
lto [libLTO] Expose LLVMCreateDisasmCPUFeatures from libLTO 2018-09-26 16:47:35 +00:00
msbuild Update Visual Studio Integration version number. 2018-08-29 16:57:37 +00:00
obj2yaml [WebAssembly] Add support for dylink section in object format 2018-11-14 18:36:24 +00:00
opt [DebugInfo] DISubprogram flags get their own flags word. NFC. 2018-11-19 18:29:28 +00:00
opt-remarks [CMake] Expose opt-remark tooling through libOptRemarks.dylib 2018-11-05 11:57:44 +00:00
opt-viewer [opt-viewer] Kill parser processes before moving onto rendering 2018-02-26 21:15:51 +00:00
sancov [sancov] Generalize the code to get the previous instruction to multiple architectures 2018-10-10 00:57:24 +00:00
sanstats [cfi] Help sanstats to find binary if they are not at the original location 2018-11-26 21:48:55 +00:00
verify-uselistorder Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
xcode-toolchain [CMake] Use LLVM_ENABLE_IDE instead of CMAKE_CONFIGURATION_TYPES 2018-10-15 21:20:02 +00:00
yaml2obj [yaml2obj] Treat COFF/ARM64 as a 64 bit architecture 2018-11-27 20:47:38 +00:00
CMakeLists.txt [RFC] Build LLVM-C.dll on MSVC that exports only the C API 2018-08-07 15:54:50 +00:00
LLVMBuild.txt Add a Microsoft Demangler. 2018-07-20 17:27:48 +00:00