aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-mca/llvm-mca.cpp
diff options
context:
space:
mode:
authorAndrew Savonichev <andrew.savonichev@gmail.com>2020-12-29 19:49:09 +0300
committerAndrew Savonichev <andrew.savonichev@gmail.com>2021-03-04 14:08:19 +0300
commitd791695cb5172b527e1b0717458d8852abcf34d1 (patch)
treed483cd6ed35fd509a1577fd1c0feab2c62d5474a /llvm/tools/llvm-mca/llvm-mca.cpp
parent1584e55a2602cd9fe0db059b06a217822ffac7cd (diff)
downloadllvm-d791695cb5172b527e1b0717458d8852abcf34d1.zip
llvm-d791695cb5172b527e1b0717458d8852abcf34d1.tar.gz
llvm-d791695cb5172b527e1b0717458d8852abcf34d1.tar.bz2
[MCA] Add support for in-order CPUs
This patch adds a pipeline to support in-order CPUs such as ARM Cortex-A55. In-order pipeline implements a simplified version of Dispatch, Scheduler and Execute stages as a single stage. Entry and Retire stages are common for both in-order and out-of-order pipelines. Differential Revision: https://reviews.llvm.org/D94928
Diffstat (limited to 'llvm/tools/llvm-mca/llvm-mca.cpp')
-rw-r--r--llvm/tools/llvm-mca/llvm-mca.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/llvm/tools/llvm-mca/llvm-mca.cpp b/llvm/tools/llvm-mca/llvm-mca.cpp
index 13a2c63..830a619 100644
--- a/llvm/tools/llvm-mca/llvm-mca.cpp
+++ b/llvm/tools/llvm-mca/llvm-mca.cpp
@@ -257,14 +257,15 @@ static void processOptionImpl(cl::opt<bool> &O, const cl::opt<bool> &Default) {
O = Default.getValue();
}
-static void processViewOptions() {
+static void processViewOptions(bool IsOutOfOrder) {
if (!EnableAllViews.getNumOccurrences() &&
!EnableAllStats.getNumOccurrences())
return;
if (EnableAllViews.getNumOccurrences()) {
processOptionImpl(PrintSummaryView, EnableAllViews);
- processOptionImpl(EnableBottleneckAnalysis, EnableAllViews);
+ if (IsOutOfOrder)
+ processOptionImpl(EnableBottleneckAnalysis, EnableAllViews);
processOptionImpl(PrintResourcePressureView, EnableAllViews);
processOptionImpl(PrintTimelineView, EnableAllViews);
processOptionImpl(PrintInstructionInfoView, EnableAllViews);
@@ -327,9 +328,6 @@ int main(int argc, char **argv) {
return 1;
}
- // Apply overrides to llvm-mca specific options.
- processViewOptions();
-
if (MCPU == "native")
MCPU = std::string(llvm::sys::getHostCPUName());
@@ -339,10 +337,10 @@ int main(int argc, char **argv) {
if (!STI->isCPUStringValid(MCPU))
return 1;
- if (!PrintInstructionTables && !STI->getSchedModel().isOutOfOrder()) {
- WithColor::error() << "please specify an out-of-order cpu. '" << MCPU
- << "' is an in-order cpu.\n";
- return 1;
+ bool IsOutOfOrder = STI->getSchedModel().isOutOfOrder();
+ if (!PrintInstructionTables && !IsOutOfOrder) {
+ WithColor::warning() << "support for in-order CPU '" << MCPU
+ << "' is experimental.\n";
}
if (!STI->getSchedModel().hasInstrSchedModel()) {
@@ -358,6 +356,9 @@ int main(int argc, char **argv) {
return 1;
}
+ // Apply overrides to llvm-mca specific options.
+ processViewOptions(IsOutOfOrder);
+
std::unique_ptr<MCRegisterInfo> MRI(TheTarget->createMCRegInfo(TripleName));
assert(MRI && "Unable to create target register info!");
@@ -539,6 +540,11 @@ int main(int argc, char **argv) {
std::make_unique<mca::SummaryView>(SM, Insts, DispatchWidth));
if (EnableBottleneckAnalysis) {
+ if (!IsOutOfOrder) {
+ WithColor::warning()
+ << "bottleneck analysis is not supported for in-order CPU '" << MCPU
+ << "'.\n";
+ }
Printer.addView(std::make_unique<mca::BottleneckAnalysis>(
*STI, *IP, Insts, S.getNumIterations()));
}