Skip to content

Commit 17e7651

Browse files
iwwusys_zuul
authored andcommitted
Enhance -timestats reporting
Change-Id: I90e9beaf26f00295680d9fb43a62ea205934d538
1 parent 8621841 commit 17e7651

File tree

5 files changed

+158
-1
lines changed

5 files changed

+158
-1
lines changed

IGC/Compiler/CISACodeGen/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ set(IGC_BUILD__SRC__CISACodeGen_Common
7070
"${CMAKE_CURRENT_SOURCE_DIR}/ResolvePredefinedConstant.cpp"
7171
"${CMAKE_CURRENT_SOURCE_DIR}/ShaderCodeGen.cpp"
7272
"${CMAKE_CURRENT_SOURCE_DIR}/Simd32Profitability.cpp"
73+
"${CMAKE_CURRENT_SOURCE_DIR}/TimeStatsCounter.cpp"
7374
"${CMAKE_CURRENT_SOURCE_DIR}/TypeDemote.cpp"
7475
"${CMAKE_CURRENT_SOURCE_DIR}/UniformAssumptions.cpp"
7576
"${CMAKE_CURRENT_SOURCE_DIR}/VariableReuseAnalysis.cpp"
@@ -160,6 +161,7 @@ set(IGC_BUILD__HDR__CISACodeGen_Common
160161
"${CMAKE_CURRENT_SOURCE_DIR}/ShaderCodeGen.hpp"
161162
"${CMAKE_CURRENT_SOURCE_DIR}/ShaderUnits.hpp"
162163
"${CMAKE_CURRENT_SOURCE_DIR}/Simd32Profitability.hpp"
164+
"${CMAKE_CURRENT_SOURCE_DIR}/TimeStatsCounter.h"
163165
"${CMAKE_CURRENT_SOURCE_DIR}/TranslationTable.hpp"
164166
"${CMAKE_CURRENT_SOURCE_DIR}/TypeDemote.h"
165167
"${CMAKE_CURRENT_SOURCE_DIR}/UniformAssumptions.hpp"

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6464
#include "Compiler/CISACodeGen/ResolvePredefinedConstant.h"
6565
#include "Compiler/CISACodeGen/Simd32Profitability.hpp"
6666
#include "Compiler/CISACodeGen/SimplifyConstant.h"
67+
#include "Compiler/CISACodeGen/TimeStatsCounter.h"
6768
#include "Compiler/CISACodeGen/TypeDemote.h"
6869
#include "Compiler/CISACodeGen/UniformAssumptions.hpp"
6970
#include "Compiler/Optimizer/LinkMultiRateShaders.hpp"
@@ -222,6 +223,8 @@ namespace IGC
222223
TODO("remove the following once all IGC passes are registered to PassRegistery in their constructor")
223224
initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
224225

226+
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Analysis, STATS_COUNTER_START));
227+
225228
// transform pull constants and inputs into push constants and inputs
226229
mpm.add(new PushAnalysis());
227230
mpm.add(CreateSampleCmpToDiscardPass());
@@ -293,6 +296,9 @@ namespace IGC
293296
}
294297

295298
mpm.add(new Layout());
299+
300+
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Analysis, STATS_COUNTER_END));
301+
296302
}
297303

298304
static void UpdateInstTypeHint(CodeGenContext& ctx)
@@ -316,6 +322,9 @@ namespace IGC
316322

317323
inline void AddLegalizationPasses(CodeGenContext& ctx, IGCPassManager& mpm)
318324
{
325+
326+
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Legalization, STATS_COUNTER_START));
327+
319328
// update type of instructions to know what passes are needed.
320329
UpdateInstTypeHint(ctx);
321330

@@ -659,6 +668,8 @@ namespace IGC
659668
}
660669

661670
mpm.add(new WAFMinFMax());
671+
672+
mpm.add(createTimeStatsCounterPass(&ctx, TIME_CG_Legalization, STATS_COUNTER_END));
662673
}
663674

664675
inline void AddCodeGenPasses(CodeGenContext& ctx, CShaderProgram::KernelShaderMap& shaders, IGCPassManager& Passes, SIMDMode simdMode, bool canAbortOnSpill, ShaderDispatchMode shaderMode = ShaderDispatchMode::NOT_APPLICABLE, PSSignature* pSignature = nullptr)
@@ -698,6 +709,7 @@ namespace IGC
698709
{
699710
COMPILER_TIME_START(ctx, TIME_CodeGen);
700711

712+
COMPILER_TIME_START(ctx, TIME_CG_Add_Passes);
701713
IGCPassManager PassMgr(ctx, "CG");
702714
const PixelShaderInfo& psInfo = ctx->getModuleMetaData()->psInfo;
703715

@@ -762,8 +774,13 @@ namespace IGC
762774
AddCodeGenPasses(*ctx, shaders, PassMgr, SIMDMode::SIMD32, earlyExit, ShaderDispatchMode::NOT_APPLICABLE, pSignature);
763775
}
764776
}
777+
778+
COMPILER_TIME_END(ctx, TIME_CG_Add_Passes);
779+
765780
PassMgr.add(new DebugInfoPass(shaders));
781+
766782
PassMgr.run(*(ctx->getModule()));
783+
767784
DumpLLVMIR(ctx, "codegen");
768785

769786
COMPILER_TIME_END(ctx, TIME_CodeGen);
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*===================== begin_copyright_notice ==================================
2+
3+
Copyright (c) 2017 Intel Corporation
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a
6+
copy of this software and associated documentation files (the
7+
"Software"), to deal in the Software without restriction, including
8+
without limitation the rights to use, copy, modify, merge, publish,
9+
distribute, sublicense, and/or sell copies of the Software, and to
10+
permit persons to whom the Software is furnished to do so, subject to
11+
the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included
14+
in all copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23+
24+
25+
======================= end_copyright_notice ==================================*/
26+
27+
#include "Compiler/CISACodeGen/TimeStatsCounter.h"
28+
#include "Compiler/IGCPassSupport.h"
29+
30+
#include "common/LLVMWarningsPush.hpp"
31+
#include <llvm/Pass.h>
32+
#include "common/LLVMWarningsPop.hpp"
33+
34+
using namespace llvm;
35+
using namespace IGC;
36+
37+
namespace {
38+
class TimeStatsCounter : public FunctionPass {
39+
CodeGenContext* ctx;
40+
COMPILE_TIME_INTERVALS type;
41+
TimeStatsCounterMode mode;
42+
43+
public:
44+
static char ID;
45+
46+
TimeStatsCounter() : FunctionPass(ID) {
47+
initializeTimeStatsCounterPass(*PassRegistry::getPassRegistry());
48+
}
49+
50+
TimeStatsCounter(CodeGenContext* _ctx, COMPILE_TIME_INTERVALS _type, TimeStatsCounterMode _mode) : FunctionPass(ID) {
51+
initializeTimeStatsCounterPass(*PassRegistry::getPassRegistry());
52+
ctx = _ctx;
53+
type = _type;
54+
mode = _mode;
55+
}
56+
57+
bool runOnFunction(Function&) override;
58+
59+
private:
60+
61+
};
62+
} // End anonymous namespace
63+
64+
FunctionPass* IGC::createTimeStatsCounterPass(CodeGenContext* _ctx, COMPILE_TIME_INTERVALS _type, TimeStatsCounterMode _mode) {
65+
return new TimeStatsCounter(_ctx, _type, _mode);
66+
}
67+
68+
char TimeStatsCounter::ID = 0;
69+
70+
#define PASS_FLAG "time-stats-counter"
71+
#define PASS_DESC "Utility to start and stop timestats counter"
72+
#define PASS_CFG_ONLY false
73+
#define PASS_ANALYSIS false
74+
namespace IGC {
75+
IGC_INITIALIZE_PASS_BEGIN(TimeStatsCounter, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS)
76+
IGC_INITIALIZE_PASS_END(TimeStatsCounter, PASS_FLAG, PASS_DESC, PASS_CFG_ONLY, PASS_ANALYSIS)
77+
}
78+
79+
bool TimeStatsCounter::runOnFunction(Function& F) {
80+
if (mode == STATS_COUNTER_START)
81+
{
82+
COMPILER_TIME_START(ctx, type);
83+
}
84+
else
85+
{
86+
COMPILER_TIME_END(ctx, type);
87+
}
88+
89+
return true;
90+
}
91+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*===================== begin_copyright_notice ==================================
2+
3+
Copyright (c) 2017 Intel Corporation
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a
6+
copy of this software and associated documentation files (the
7+
"Software"), to deal in the Software without restriction, including
8+
without limitation the rights to use, copy, modify, merge, publish,
9+
distribute, sublicense, and/or sell copies of the Software, and to
10+
permit persons to whom the Software is furnished to do so, subject to
11+
the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included
14+
in all copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23+
24+
25+
======================= end_copyright_notice ==================================*/
26+
27+
#pragma once
28+
29+
#include "common/LLVMWarningsPush.hpp"
30+
#include <llvm/Pass.h>
31+
#include "common/LLVMWarningsPop.hpp"
32+
#include "Compiler/CodeGenPublic.h"
33+
#include "common/Stats.hpp"
34+
35+
namespace IGC {
36+
enum TimeStatsCounterMode
37+
{
38+
STATS_COUNTER_START,
39+
STATS_COUNTER_END
40+
};
41+
42+
llvm::FunctionPass* createTimeStatsCounterPass(CodeGenContext* _ctx, COMPILE_TIME_INTERVALS _type, TimeStatsCounterMode _mode);
43+
void initializeTimeStatsCounterPass(llvm::PassRegistry&);
44+
} // End namespace IGC

IGC/common/timeStats.def

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ DEFINE_TIME_STAT( TIME_ASMToLLVMIR, "ASMToLLVMIR",
1212
DEFINE_TIME_STAT( TIME_UnificationPasses, "UnificationPasses", TIME_TOTAL, false, false, true, true )
1313
DEFINE_TIME_STAT( TIME_OptimizationPasses, "OptimizationPasses", TIME_TOTAL, false, false, true, true )
1414
DEFINE_TIME_STAT( TIME_CodeGen, "CodeGen", TIME_TOTAL, false, false, true, false )
15+
DEFINE_TIME_STAT( TIME_CG_Add_Passes, "CodeGen Add Passes", TIME_CodeGen, false, false, true, true )
16+
DEFINE_TIME_STAT( TIME_CG_Legalization, "CodeGen LegalizationPasses", TIME_CodeGen, false, false, true, true )
17+
DEFINE_TIME_STAT( TIME_CG_Analysis, "CodeGen AnalysisPasses", TIME_CodeGen, false, false, true, true )
1518
DEFINE_TIME_STAT( TIME_CG_vISAEmitPass, "vISAEmitpass", TIME_CodeGen, false, false, true, true )
1619
DEFINE_TIME_STAT( TIME_vISAEmitInit, "vISAEmitInit", TIME_CG_vISAEmitPass, false, false, false, false )
1720
DEFINE_TIME_STAT( TIME_vISAEmitLoop, "vISAEmitLoop", TIME_CG_vISAEmitPass, false, false, false, false )
@@ -47,7 +50,7 @@ DEFINE_TIME_STAT( TIME_VISA_NOSRCDEPSET, "VISA NoSrcDepS
4750
DEFINE_TIME_STAT( TIME_VISA_ENCODE_PER_KERNEL_ENCOD, "VISA per kernel encoding", TIME_VISA_Total, true, false, false, false )
4851
DEFINE_TIME_STAT( TIME_VISA_Unaccounted, "VISA Total Unaccounted", TIME_VISA_Total, false, true, false, false )
4952
DEFINE_TIME_STAT( TIME_vISACompile_Unaccounted, "vISACompile Unaccounted", TIME_CG_vISACompile, false, true, false, false )
50-
DEFINE_TIME_STAT( TIME_CG_Unaccounted, "CodeGen Unaccounted", TIME_CodeGen, false, true, true, true )
53+
DEFINE_TIME_STAT( TIME_CG_Unaccounted, "CodeGen Unaccounted", TIME_CodeGen, false, true, true, true )
5154
DEFINE_TIME_STAT( TIME_VulkanFrontend, "VulkanFrontend", TIME_TOTAL, false, false, true, true )
5255
DEFINE_TIME_STAT( TIME_VkFe_ParseSpirV, "VkFeParsing", TIME_VulkanFrontend, false, false, true, false )
5356
DEFINE_TIME_STAT( TIME_VkFe_TranslateSpirV, "VkFeTranslation", TIME_VulkanFrontend, false, false, true, false )

0 commit comments

Comments
 (0)