From ee2097f7fa64ffdaece3c55fc607d151f0c01376 Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Thu, 1 Apr 2021 16:51:15 -0700 Subject: [PATCH 1/3] Add loop alignment stats --- src/coreclr/jit/compiler.cpp | 9 ++++++++- src/coreclr/jit/compiler.h | 5 +++++ src/coreclr/jit/emit.cpp | 4 ++++ src/coreclr/jit/emitxarch.cpp | 2 ++ src/coreclr/jit/optimizer.cpp | 5 +++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index 421614c291fda6..cd5c04a30b4ed0 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -8255,7 +8255,10 @@ void JitTimer::PrintCsvHeader() fprintf(s_csvFile, "\"Min Opts\","); fprintf(s_csvFile, "\"Loops\","); fprintf(s_csvFile, "\"Loops Cloned\","); - +#if FEATURE_LOOP_ALIGN + fprintf(s_csvFile, "\"Alignment Candidates\","); + fprintf(s_csvFile, "\"Loops Aligned\","); +#endif // FEATURE_LOOP_ALIGN for (int i = 0; i < PHASE_NUMBER_OF; i++) { fprintf(s_csvFile, "\"%s\",", PhaseNames[i]); @@ -8329,6 +8332,10 @@ void JitTimer::PrintCsvMethodStats(Compiler* comp) fprintf(s_csvFile, "%u,", comp->opts.MinOpts()); fprintf(s_csvFile, "%u,", comp->optLoopCount); fprintf(s_csvFile, "%u,", comp->optLoopsCloned); +#if FEATURE_LOOP_ALIGN + fprintf(s_csvFile, "%u,", comp->loopAlignCandidates); + fprintf(s_csvFile, "%u,", comp->loopsAligned); +#endif // FEATURE_LOOP_ALIGN unsigned __int64 totCycles = 0; for (int i = 0; i < PHASE_NUMBER_OF; i++) { diff --git a/src/coreclr/jit/compiler.h b/src/coreclr/jit/compiler.h index b5528e7b5b7908..e3afb451f69955 100644 --- a/src/coreclr/jit/compiler.h +++ b/src/coreclr/jit/compiler.h @@ -6435,6 +6435,11 @@ class Compiler LoopDsc* optLoopTable; // loop descriptor table unsigned char optLoopCount; // number of tracked loops +#ifdef DEBUG + unsigned char loopAlignCandidates; // number of loops identified for alignment + unsigned char loopsAligned; // number of loops actually aligned +#endif // DEBUG + bool optRecordLoop(BasicBlock* head, BasicBlock* first, BasicBlock* top, diff --git a/src/coreclr/jit/emit.cpp b/src/coreclr/jit/emit.cpp index cd626cbd335d05..74b62dd4b208a8 100644 --- a/src/coreclr/jit/emit.cpp +++ b/src/coreclr/jit/emit.cpp @@ -4650,6 +4650,10 @@ void emitter::emitLoopAlignment() JITDUMP("Adding 'align' instruction of %d bytes in G_M%03u_IG%02u.\n", paddingBytes, emitComp->compMethodID, emitCurIG->igNum); + +#ifdef DEBUG + emitComp->loopAlignCandidates++; +#endif // DEBUG } //----------------------------------------------------------------------------- diff --git a/src/coreclr/jit/emitxarch.cpp b/src/coreclr/jit/emitxarch.cpp index 65a82c1c7b9ea3..fdf964c9b5c559 100644 --- a/src/coreclr/jit/emitxarch.cpp +++ b/src/coreclr/jit/emitxarch.cpp @@ -9434,6 +9434,8 @@ BYTE* emitter::emitOutputAlign(insGroup* ig, instrDesc* id, BYTE* dst) { assert(paddingToAdd == paddingNeeded); } + + emitComp->loopsAligned++; #endif return emitOutputNOP(dst, paddingToAdd); diff --git a/src/coreclr/jit/optimizer.cpp b/src/coreclr/jit/optimizer.cpp index 680c7b90719149..17b4a1858cea72 100644 --- a/src/coreclr/jit/optimizer.cpp +++ b/src/coreclr/jit/optimizer.cpp @@ -27,6 +27,11 @@ void Compiler::optInit() optLoopCount = 0; optLoopTable = nullptr; +#ifdef DEBUG + loopAlignCandidates = 0; + loopsAligned = 0; +#endif + /* Keep track of the number of calls and indirect calls made by this method */ optCallCount = 0; optIndirectCallCount = 0; From 24bef49cef6f5e1975f8b8c08e06edd7b191983f Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Thu, 1 Apr 2021 17:31:19 -0700 Subject: [PATCH 2/3] Include the stats only in DEBUG mode --- src/coreclr/jit/compiler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index cd5c04a30b4ed0..36107f935e2f9d 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -8256,8 +8256,10 @@ void JitTimer::PrintCsvHeader() fprintf(s_csvFile, "\"Loops\","); fprintf(s_csvFile, "\"Loops Cloned\","); #if FEATURE_LOOP_ALIGN +#ifdef DEBUG fprintf(s_csvFile, "\"Alignment Candidates\","); fprintf(s_csvFile, "\"Loops Aligned\","); +#endif // DEBUG #endif // FEATURE_LOOP_ALIGN for (int i = 0; i < PHASE_NUMBER_OF; i++) { @@ -8333,8 +8335,10 @@ void JitTimer::PrintCsvMethodStats(Compiler* comp) fprintf(s_csvFile, "%u,", comp->optLoopCount); fprintf(s_csvFile, "%u,", comp->optLoopsCloned); #if FEATURE_LOOP_ALIGN +#ifdef DEBUG fprintf(s_csvFile, "%u,", comp->loopAlignCandidates); fprintf(s_csvFile, "%u,", comp->loopsAligned); +#endif // DEBUG #endif // FEATURE_LOOP_ALIGN unsigned __int64 totCycles = 0; for (int i = 0; i < PHASE_NUMBER_OF; i++) From c218889aca2eab90f6954d3c94e71d4a14fff310 Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Tue, 6 Apr 2021 14:58:43 -0700 Subject: [PATCH 3/3] jit format --- src/coreclr/jit/compiler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index 36107f935e2f9d..0219f104b47f22 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -8338,7 +8338,7 @@ void JitTimer::PrintCsvMethodStats(Compiler* comp) #ifdef DEBUG fprintf(s_csvFile, "%u,", comp->loopAlignCandidates); fprintf(s_csvFile, "%u,", comp->loopsAligned); -#endif // DEBUG +#endif // DEBUG #endif // FEATURE_LOOP_ALIGN unsigned __int64 totCycles = 0; for (int i = 0; i < PHASE_NUMBER_OF; i++)