Skip to content

Commit 7002a65

Browse files
sys-igcigcbot
authored andcommitted
[Autobackout][FunctionalRegression]Revert of change: 4cecfb3: Remove tracking of bindless offset for images - PART 3
In case of bindless images, NEO runtime passes bindless offset in image arg of kernel. This bindless offset doesn't need to be tracked because arg tracking in OCLBIConverter pass is only needed to find image's BTI, which isn't used with bindless as it's the bindless offset that is used to find the image's surface state instead of values stored in the Binding Table. This commit is the third part of the tracking removal. It implements handling of inline samplers for bindless mode in two new passes. First, PrepareInlineSamplerForBindless visits instructions calling __bindless_sampler_initializer(int32) and maps the callee's argument for AddImplicitArgs pass and then creates inline sampler metadata. Second, ResolveInlineSamplerForBindless replaces calls to __bindless_sampler_initializer(int32) with corresponding inline sampler implicit args created by AddImplicitArgs. This commit also edits builtin __translate_sampler_initializer(int32) to return __bindless_sampler_initializer(int32) for bindless.
1 parent 4334c69 commit 7002a65

27 files changed

+352
-681
lines changed

IGC/AdaptorOCL/UnifyIROCL.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ SPDX-License-Identifier: MIT
6060
#include "Compiler/Optimizer/OpenCLPasses/ImageFuncs/ImageFuncsAnalysis.hpp"
6161
#include "Compiler/Optimizer/OpenCLPasses/ImageFuncs/ImageFuncResolution.hpp"
6262
#include "Compiler/Optimizer/OpenCLPasses/ImageFuncs/ResolveSampledImageBuiltins.hpp"
63-
#include "Compiler/Optimizer/OpenCLPasses/PrepareInlineSamplerForBindless/PrepareInlineSamplerForBindless.hpp"
64-
#include "Compiler/Optimizer/OpenCLPasses/ResolveInlineSamplerForBindless/ResolveInlineSamplerForBindless.hpp"
6563
#include "Compiler/Optimizer/OpenCLPasses/PrivateMemory/PrivateMemoryUsageAnalysis.hpp"
6664
#include "Compiler/Optimizer/OpenCLPasses/PrivateMemory/PrivateMemoryResolution.hpp"
6765
#include "Compiler/Optimizer/OpenCLPasses/ProgramScopeConstants/ProgramScopeConstantAnalysis.hpp"
@@ -556,12 +554,9 @@ static void CommonOCLBasedPasses(OpenCLProgramContext* pContext)
556554

557555
mpm.add(new ResolveOCLRaytracingBuiltins());
558556
mpm.add(createRayTracingIntrinsicAnalysisPass());
559-
mpm.add(new PrepareInlineSamplerForBindless());
560-
561557
// Adding implicit args based on Analysis passes
562558
mpm.add(new AddImplicitArgs());
563559

564-
mpm.add(new ResolveInlineSamplerForBindless());
565560
if (IGC_IS_FLAG_ENABLED(BufferBoundsChecking) || pContext->isBufferBoundsChecking())
566561
{
567562
mpm.add(new BufferBoundsCheckingPatcher());

IGC/BiFModule/Headers/bif_flag_controls.h

-1
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,4 @@ BIF_FLAG_CONTROL(int, MaxHWThreadIDPerSubDevice)
3838
BIF_FLAG_CONTROL(bool, UseAssumeInGetGlobalId)
3939
BIF_FLAG_CONTROL(int, JointMatrixLoadStoreOpt)
4040
BIF_FLAG_CONTROL(bool, UseOOBChecks)
41-
BIF_FLAG_CONTROL(bool, UseBindlessImage)
4241
#endif // __BIF_FLAG_CONTROL_H__

IGC/BiFModule/Implementation/images.cl

-6
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,8 @@ SPDX-License-Identifier: MIT
2222

2323
#include "../Headers/spirv.h"
2424

25-
__spirv_Sampler __bindless_sampler_initializer(uint sampler);
26-
2725
__spirv_Sampler __translate_sampler_initializer(uint sampler)
2826
{
29-
if(BIF_FLAG_CTRL_GET(UseBindlessImage))
30-
{
31-
return __bindless_sampler_initializer(sampler);
32-
}
3327
return __builtin_astype((ulong)sampler, __spirv_Sampler);
3428
}
3529

IGC/Compiler/Builtins/BIFFlagCtrl/BIFFlagCtrlResolution.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,6 @@ void BIFFlagCtrlResolution::FillFlagCtrl() {
117117
}
118118

119119
BIF_FLAG_CTRL_SET(UseOOBChecks, PtrCGC->platform.needsOutOfBoundsBuiltinChecks());
120-
121-
// NOTE: No need to check for UseLegacyBindlessMode,
122-
// as it's unrelated to images.
123-
BIF_FLAG_CTRL_SET(UseBindlessImage, PtrCGC->getModuleMetaData()->compOpt.UseBindlessMode);
124120
}
125121

126122
#undef BIF_FLAG_CTRL_SET

IGC/Compiler/InitializePasses.h

-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ void initializeOpenCLPrintfAnalysisPass(llvm::PassRegistry&);
118118
void initializeOpenCLPrintfResolutionPass(llvm::PassRegistry&);
119119
void initializePeepholeTypeLegalizerPass(llvm::PassRegistry&);
120120
void initializePositionDepAnalysisPass(llvm::PassRegistry&);
121-
void initializePrepareInlineSamplerForBindlessPass(llvm::PassRegistry&);
122121
void initializePrivateMemoryResolutionPass(llvm::PassRegistry&);
123122
void initializePrivateMemoryToSLMPass(llvm::PassRegistry&);
124123
void initializePrivateMemoryUsageAnalysisPass(llvm::PassRegistry&);
@@ -134,7 +133,6 @@ void initializePullConstantHeuristicsPass(llvm::PassRegistry&);
134133
void initializeScalarizerCodeGenPass(llvm::PassRegistry&);
135134
void initializeReduceLocalPointersPass(llvm::PassRegistry&);
136135
void initializeReplaceUnsupportedIntrinsicsPass(llvm::PassRegistry&);
137-
void initializeResolveInlineSamplerForBindlessPass(llvm::PassRegistry&);
138136
void initializePreCompiledFuncImportPass(llvm::PassRegistry&);
139137
void initializePurgeMetaDataUtilsPass(llvm::PassRegistry&);
140138
void initializeRemoveNonPositionOutputPass(llvm::PassRegistry&);

IGC/Compiler/Optimizer/OCLBIUtils.cpp

+219-175
Large diffs are not rendered by default.

IGC/Compiler/Optimizer/OCLBIUtils.h

-4
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,6 @@ namespace IGC
233233
/// @brief push the sampler value into the function argument list
234234
void prepareSamplerValue(void);
235235

236-
/// @brief create annotations for inline sampler based on the value used for initialization
237-
/// @brief this method doesn't fill out the 'index' field of InlineSamplersMD.
238-
static void CreateInlineSamplerAnnotations(llvm::Module* M, InlineSamplersMD& inlineSamplerMD, int samplerValue);
239-
240236
/// @brief create a call to the GetBufferPtr intrinsic pseudo-instruction
241237
/// @brief push the image index into the function argument list
242238
void createGetBufferPtr(void);

IGC/Compiler/Optimizer/OpenCLPasses/CMakeLists.txt

-8
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,10 @@ add_subdirectory(NamedBarriers)
4040
add_subdirectory(NontemporalLoadsAndStoresInAssert)
4141
add_subdirectory(OpenCLPrintf)
4242
add_subdirectory(PoisonFP64KernelsPass)
43-
add_subdirectory(PrepareInlineSamplerForBindless)
4443
add_subdirectory(PrivateMemory)
4544
add_subdirectory(ProgramScopeConstants)
4645
add_subdirectory(RayTracing)
4746
add_subdirectory(ReplaceUnsupportedIntrinsics)
48-
add_subdirectory(ResolveInlineSamplerForBindless)
4947
add_subdirectory(ResourceAllocator)
5048
add_subdirectory(RewriteLocalSize)
5149
add_subdirectory(ScalarArgAsPointer)
@@ -95,12 +93,10 @@ set(IGC_BUILD__SRC__Optimizer_OpenCLPasses_All
9593
${IGC_BUILD__SRC__OpenCLPasses_NontemporalLoadsAndStoresInAssert}
9694
${IGC_BUILD__SRC__OpenCLPasses_OpenCLPrintf}
9795
${IGC_BUILD__SRC__OpenCLPasses_PoisonFP64KernelsPass}
98-
${IGC_BUILD__SRC__OpenCLPasses_PrepareInlineSamplerForBindless}
9996
${IGC_BUILD__SRC__OpenCLPasses_PrivateMemory}
10097
${IGC_BUILD__SRC__OpenCLPasses_ProgramScopeConstants}
10198
${IGC_BUILD__SRC__OpenCLPasses_Raytracing}
10299
${IGC_BUILD__SRC__OpenCLPasses_ReplaceUnsupportedIntrinsics}
103-
${IGC_BUILD__SRC__OpenCLPasses_ResolveInlineSamplerForBindless}
104100
${IGC_BUILD__SRC__OpenCLPasses_ResourceAllocator}
105101
${IGC_BUILD__SRC__OpenCLPasses_RewriteLocalSize}
106102
${IGC_BUILD__SRC__OpenCLPasses_ScalarArgAsPointer}
@@ -155,12 +151,10 @@ set(IGC_BUILD__HDR__Optimizer_OpenCLPasses_All
155151
${IGC_BUILD__HDR__OpenCLPasses_NamedBarriers}
156152
${IGC_BUILD__HDR__OpenCLPasses_NontemporalLoadsAndStoresInAssert}
157153
${IGC_BUILD__HDR__OpenCLPasses_OpenCLPrintf}
158-
${IGC_BUILD__HDR__OpenCLPasses_PrepareInlineSamplerForBindless}
159154
${IGC_BUILD__HDR__OpenCLPasses_PrivateMemory}
160155
${IGC_BUILD__HDR__OpenCLPasses_ProgramScopeConstants}
161156
${IGC_BUILD__HDR__OpenCLPasses_Raytracing}
162157
${IGC_BUILD__HDR__OpenCLPasses_ReplaceUnsupportedIntrinsics}
163-
${IGC_BUILD__HDR__OpenCLPasses_ResolveInlineSamplerForBindless}
164158
${IGC_BUILD__HDR__OpenCLPasses_ResourceAllocator}
165159
${IGC_BUILD__HDR__OpenCLPasses_RewriteLocalSize}
166160
${IGC_BUILD__HDR__OpenCLPasses_ScalarArgAsPointer}
@@ -217,12 +211,10 @@ set(IGC_BUILD_Compiler_OpenCLPasses_Groups
217211
Compiler__OpenCLPasses_NontemporalLoadsAndStoresInAssert
218212
Compiler__OpenCLPasses_OpenCLPrintf
219213
Compiler__OpenCLPasses_PoisonFP64KernelsPass
220-
Compiler__OpenCLPasses_PrepareInlineSamplerForBindless
221214
Compiler__OpenCLPasses_PrivateMemory
222215
Compiler__OpenCLPasses_ProgramScopeConstants
223216
Compiler__OpenCLPasses_Raytracing
224217
Compiler__OpenCLPasses_ReplaceUnsupportedIntrinsics
225-
Compiler__OpenCLPasses_ResolveInlineSamplerForBindless
226218
Compiler__OpenCLPasses_RewriteLocalSize
227219
Compiler__OpenCLPasses_ScalarArgAsPointer
228220
Compiler__OpenCLPasses_SetFastMathFlags

IGC/Compiler/Optimizer/OpenCLPasses/ImageFuncs/ImageFuncsAnalysis.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,15 @@ void ImageFuncsAnalysis::visitCallInst(CallInst& CI)
209209
return;
210210
}
211211
}
212+
else if (m_useAdvancedBindlessMode)
213+
{
214+
IGC_ASSERT_MESSAGE(isa<ConstantInt>(callArg), "Expect inline sampler");
215+
auto *inlineSampler = cast<ConstantInt>(callArg);
216+
// Inline sampler doesn't associate with an explicit argument.
217+
// To avoid adding a new metadata entry, inline sampler value is stored as explicit argument number.
218+
m_argMap[ImplicitArg::INLINE_SAMPLER].insert(int_cast<int>(inlineSampler->getZExtValue()));
219+
return;
220+
}
212221
}
213222

214223
// Only these args should be hit by the indirect case

IGC/Compiler/Optimizer/OpenCLPasses/ImageFuncs/ResolveSampledImageBuiltins.cpp

+7-12
Original file line numberDiff line numberDiff line change
@@ -190,18 +190,13 @@ Value* ResolveSampledImageBuiltins::lowerGetSampler(CallInst& CI)
190190
// %queried_sampler = zext i32 16 to i64
191191
if (CallInst* samplerInitializer = dyn_cast<CallInst>(samplerArg))
192192
{
193-
// The __bindless_sampler_initializer calls are handled by PrepareInlineSamplerForBindless
194-
// and ResolveInlineSamplerForBindless. They are meant to be replaced with inline sampler implicit arg.
195-
if (!(samplerInitializer->getCalledFunction()->getName() == "__bindless_sampler_initializer"))
196-
{
197-
IGC_ASSERT(samplerInitializer->getCalledFunction()->getName() == "__translate_sampler_initializer");
198-
return ZExtInst::Create(
199-
Instruction::ZExt,
200-
samplerInitializer->getArgOperand(0),
201-
Int64Ty,
202-
"",
203-
&CI);
204-
}
193+
IGC_ASSERT(samplerInitializer->getCalledFunction()->getName() == "__translate_sampler_initializer");
194+
return ZExtInst::Create(
195+
Instruction::ZExt,
196+
samplerInitializer->getArgOperand(0),
197+
Int64Ty,
198+
"",
199+
&CI);
205200
}
206201

207202
// In the case of sampler as kernel argument, transform the following sequence:

IGC/Compiler/Optimizer/OpenCLPasses/PrepareInlineSamplerForBindless/CMakeLists.txt

-29
This file was deleted.

IGC/Compiler/Optimizer/OpenCLPasses/PrepareInlineSamplerForBindless/PrepareInlineSamplerForBindless.cpp

-98
This file was deleted.

IGC/Compiler/Optimizer/OpenCLPasses/PrepareInlineSamplerForBindless/PrepareInlineSamplerForBindless.hpp

-63
This file was deleted.

IGC/Compiler/Optimizer/OpenCLPasses/ResolveInlineSamplerForBindless/CMakeLists.txt

-29
This file was deleted.

0 commit comments

Comments
 (0)