Skip to content

Commit 81c0fde

Browse files
ppogotovigcbot
authored andcommitted
Merge scalar phi-nodes into vector one.
If there is a group of scalar phi-node whose input values are values extracted from a vector, it may be useful to replace this group with a vector phi. This can simplify the VISA emitter's job of register allocation.
1 parent a7c8c73 commit 81c0fde

File tree

8 files changed

+902
-0
lines changed

8 files changed

+902
-0
lines changed

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ SPDX-License-Identifier: MIT
7575

7676
#include "Compiler/CISACodeGen/SLMConstProp.hpp"
7777
#include "Compiler/Optimizer/OpenCLPasses/SplitStructurePhisPass/SplitStructurePhisPass.hpp"
78+
#include "Compiler/Optimizer/OpenCLPasses/MergeScalarPhisPass/MergeScalarPhisPass.hpp"
7879
#include "Compiler/Legalizer/AddRequiredMemoryFences.h"
7980
#include "Compiler/Optimizer/OpenCLPasses/GenericAddressResolution/GenericAddressDynamicResolution.hpp"
8081
#include "Compiler/Optimizer/OpenCLPasses/PrivateMemory/PrivateMemoryResolution.hpp"
@@ -229,6 +230,11 @@ void AddAnalysisPasses(CodeGenContext& ctx, IGCPassManager& mpm)
229230
mpm.add(createSplitLoadsPass());
230231
}
231232

233+
234+
if (IGC_IS_FLAG_ENABLED(EnableScalarPhisMerger)) {
235+
mpm.add(new MergeScalarPhisPass());
236+
}
237+
232238
// only limited code-sinking to several shader-type
233239
// vs input has the URB-reuse issue to be resolved.
234240
// Also need to understand the performance benefit better.
@@ -1940,6 +1946,7 @@ void OptimizeIR(CodeGenContext* const pContext)
19401946
mpm.add(createScalarizerPass(SelectiveScalarizer::Auto));
19411947
}
19421948

1949+
19431950
mpm.run(*pContext->getModule());
19441951
} // end scope
19451952
COMPILER_TIME_END(pContext, TIME_OptimizationPasses);

IGC/Compiler/InitializePasses.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ void initializeSimd32ProfitabilityAnalysisPass(llvm::PassRegistry&);
154154
void initializeSetFastMathFlagsPass(llvm::PassRegistry&);
155155
void initializeSPIRMetaDataTranslationPass(llvm::PassRegistry&);
156156
void initializeSplitStructurePhisPassPass(llvm::PassRegistry&);
157+
void initializeMergeScalarPhisPassPass(llvm::PassRegistry &);
157158
void initializeSpv2dBlockIOResolutionPass(llvm::PassRegistry&);
158159
void initializeSpvSubgroupMMAResolutionPass(llvm::PassRegistry&);
159160
void initializeSplitLoadsPass(llvm::PassRegistry&);

IGC/Compiler/Optimizer/OpenCLPasses/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ add_subdirectory(SpvSubgroupMMAResolution)
5656
add_subdirectory(StackOverflowDetection)
5757
add_subdirectory(StatelessToStateful)
5858
add_subdirectory(SplitStructurePhisPass)
59+
add_subdirectory(MergeScalarPhisPass)
5960
add_subdirectory(SubGroupFuncs)
6061
add_subdirectory(SubGroupReductionPattern)
6162
add_subdirectory(TransformUnmaskedFunctionsPass)
@@ -109,6 +110,7 @@ set(IGC_BUILD__SRC__Optimizer_OpenCLPasses_All
109110
${IGC_BUILD__SRC__OpenCLPasses_ScalarArgAsPointer}
110111
${IGC_BUILD__SRC__OpenCLPasses_SetFastMathFlags}
111112
${IGC_BUILD__SRC__OpenCLPasses_SplitStructurePhisPass}
113+
${IGC_BUILD__SRC__OpenCLPasses_MergeScalarPhisPass}
112114
${IGC_BUILD__SRC__OpenCLPasses_Spv2dBlockIOResolution}
113115
${IGC_BUILD__SRC__OpenCLPasses_SpvSubgroupMMAResolution}
114116
${IGC_BUILD__SRC__OpenCLPasses_StackOverflowDetection}
@@ -171,6 +173,7 @@ set(IGC_BUILD__HDR__Optimizer_OpenCLPasses_All
171173
${IGC_BUILD__HDR__OpenCLPasses_ScalarArgAsPointer}
172174
${IGC_BUILD__HDR__OpenCLPasses_SetFastMathFlags}
173175
${IGC_BUILD__HDR__OpenCLPasses_SplitStructurePhisPass}
176+
${IGC_BUILD__HDR__OpenCLPasses_MergeScalarPhisPass}
174177
${IGC_BUILD__HDR__OpenCLPasses_Spv2dBlockIOResolution}
175178
${IGC_BUILD__HDR__OpenCLPasses_SpvSubgroupMMAResolution}
176179
${IGC_BUILD__HDR__OpenCLPasses_StackOverflowDetection}
@@ -234,6 +237,7 @@ set(IGC_BUILD_Compiler_OpenCLPasses_Groups
234237
Compiler__OpenCLPasses_ScalarArgAsPointer
235238
Compiler__OpenCLPasses_SetFastMathFlags
236239
Compiler__OpenCLPasses_SplitStructurePhisPass
240+
Compiler__OpenCLPasses_MergeScalarPhisPass
237241
Compiler__OpenCLPasses_StackOverflowDetection
238242
Compiler__OpenCLPasses_StatelessToStateful
239243
Compiler__OpenCLPasses_SubGroupFuncs
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#=========================== begin_copyright_notice ============================
2+
#
3+
# Copyright (C) 2025 Intel Corporation
4+
#
5+
# SPDX-License-Identifier: MIT
6+
#
7+
#============================ end_copyright_notice =============================
8+
9+
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
10+
11+
12+
set(IGC_BUILD__SRC__MergeScalarPhisPass
13+
"${CMAKE_CURRENT_SOURCE_DIR}/MergeScalarPhisPass.cpp"
14+
)
15+
set(IGC_BUILD__SRC__OpenCLPasses_MergeScalarPhisPass ${IGC_BUILD__SRC__MergeScalarPhisPass} PARENT_SCOPE)
16+
17+
set(IGC_BUILD__HDR__MergeScalarPhisPass
18+
"${CMAKE_CURRENT_SOURCE_DIR}/MergeScalarPhisPass.hpp"
19+
)
20+
set(IGC_BUILD__HDR__OpenCLPasses_MergeScalarPhisPass ${IGC_BUILD__HDR__MergeScalarPhisPass} PARENT_SCOPE)
21+
22+
23+
igc_sg_register(
24+
Compiler__OpenCLPasses_MergeScalarPhisPass
25+
"MergeScalarPhisPass"
26+
FILES
27+
${IGC_BUILD__SRC__MergeScalarPhisPass}
28+
${IGC_BUILD__HDR__MergeScalarPhisPass}
29+
)

0 commit comments

Comments
 (0)