Skip to content

Commit e05cf8e

Browse files
dlei6ggfxbot
authored andcommitted
Fixes a previous regression where all kernels are being recompiled if any spill.
Only need to recompile the spilled kernel. Change-Id: I2a0fd515c6cde32f48ac5297ff6cf8ec52f4fae2
1 parent 8451988 commit e05cf8e

File tree

4 files changed

+18
-21
lines changed

4 files changed

+18
-21
lines changed

IGC/AdaptorOCL/OCL/sp/spp_g8.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@ CGen8OpenCLProgram::~CGen8OpenCLProgram()
5454
delete data.kernelDebugData;
5555
}
5656

57-
ClearKernelOutput();
58-
}
59-
60-
void CGen8OpenCLProgram::ClearKernelOutput()
61-
{
62-
// Should be called by CodeGen on each try to clear
63-
// the KernelShaderMap and the SystemThreadKernelOutput
6457
for (auto k : m_KernelShaderMap)
6558
{
6659
IGC::CShaderProgram* kernel = k.second;

IGC/AdaptorOCL/OCL/sp/spp_g8.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2929
#include "../util/BinaryStream.h"
3030
#include "usc.h"
3131
#include "sp_g8.h"
32-
33-
#include "common/LLVMWarningsPush.hpp"
34-
#include <llvm/ADT/MapVector.h>
35-
#include <llvm/IR/Function.h>
36-
#include "common/LLVMWarningsPop.hpp"
32+
#include <map>
3733

3834
namespace IGC
3935
{
@@ -58,8 +54,6 @@ class CGen8OpenCLProgram : DisallowCopy
5854

5955
~CGen8OpenCLProgram();
6056

61-
void ClearKernelOutput();
62-
6357
RETVAL GetProgramBinary(
6458
Util::BinaryStream& programBinary,
6559
unsigned int pointerSizeInBytes );
@@ -71,7 +65,7 @@ class CGen8OpenCLProgram : DisallowCopy
7165
void CreateProgramScopePatchStream(const IGC::SOpenCLProgramInfo& programInfo);
7266

7367
// Used to track the kernel info from CodeGen
74-
llvm::MapVector<llvm::Function*, IGC::CShaderProgram*> m_KernelShaderMap;
68+
std::map<std::string, IGC::CShaderProgram*> m_KernelShaderMap;
7569
USC::SSystemThreadKernelOutput* m_pSystemThreadKernelOutput = nullptr;
7670

7771
// Used to store per-kernel binary streams and kernelInfo

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1732,11 +1732,10 @@ void CodeGen(OpenCLProgramContext* ctx)
17321732
//Clear spill parameters of retry manager in the very begining of code gen
17331733
ctx->m_retryManager.ClearSpillParams();
17341734

1735-
// Clear the saved kernel outputs for each try
1736-
ctx->m_programOutput.ClearKernelOutput();
1737-
1738-
CodeGen(ctx, ctx->m_programOutput.m_KernelShaderMap);
1735+
CShaderProgram::KernelShaderMap shaders;
1736+
CodeGen(ctx, shaders);
17391737

1738+
if (ctx->m_programOutput.m_pSystemThreadKernelOutput == nullptr)
17401739
{
17411740
const auto options = ctx->m_InternalOptions;
17421741
if (options.IncludeSIPCSR ||
@@ -1769,15 +1768,27 @@ void CodeGen(OpenCLProgramContext* ctx)
17691768
}
17701769
}
17711770

1771+
ctx->m_retryManager.kernelSet.clear();
1772+
17721773
// gather data to send back to the driver
1773-
for (auto k : ctx->m_programOutput.m_KernelShaderMap)
1774+
for (auto k : shaders)
17741775
{
17751776
Function* pFunc = k.first;
17761777
CShaderProgram *pKernel = static_cast<CShaderProgram*>(k.second);
17771778
COpenCLKernel* simd8Shader = static_cast<COpenCLKernel*>(pKernel->GetShader(SIMDMode::SIMD8));
17781779
COpenCLKernel* simd16Shader = static_cast<COpenCLKernel*>(pKernel->GetShader(SIMDMode::SIMD16));
17791780
COpenCLKernel* simd32Shader = static_cast<COpenCLKernel*>(pKernel->GetShader(SIMDMode::SIMD32));
17801781

1782+
std::string kernelName = pFunc->getName().str();
1783+
if (ctx->m_programOutput.m_KernelShaderMap.find(kernelName) != ctx->m_programOutput.m_KernelShaderMap.end())
1784+
{
1785+
// Delete the old program created in previous try
1786+
delete ctx->m_programOutput.m_KernelShaderMap[kernelName];
1787+
}
1788+
1789+
// Save the shader program to the state processer to be handled later
1790+
ctx->m_programOutput.m_KernelShaderMap[kernelName] = pKernel;
1791+
17811792
if (ctx->m_DriverInfo.sendMultipleSIMDModes())
17821793
{
17831794
//Gather the kernel binary for each compiled kernel

IGC/Compiler/CodeGenPublic.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,6 @@ namespace IGC
611611
std::set<std::string> kernelSet;
612612

613613
void ClearSpillParams() {
614-
kernelSet.clear();
615614
lastSpillSize = 0;
616615
numInstructions = 0;
617616
}

0 commit comments

Comments
 (0)