@@ -314,6 +314,36 @@ static inline RegionMemScope getBarrierMaxFencedScope(const BarrierDesc &BD) {
314314 return getBarrierFencedScopeImpl<RegionMemScope::Global>(BD);
315315}
316316
317+ static bool isSPIRVBuiltinFunction (const StringRef FName) {
318+ return FName == " _Z22__spirv_BuiltInWorkDimv" ||
319+ FName == " _Z28__spirv_BuiltInWorkgroupSizei" ||
320+ FName == " _Z32__spirv_BuiltInLocalInvocationIdi" ||
321+ FName == " _Z33__spirv_BuiltInGlobalInvocationIdi" ||
322+ FName == " _Z26__spirv_BuiltInWorkgroupIdi" ||
323+ FName == " _Z27__spirv_BuiltInGlobalOffseti" ||
324+ FName == " _Z25__spirv_BuiltInGlobalSizei" ||
325+ FName == " _Z28__spirv_BuiltInNumWorkgroupsi" ||
326+ FName == " _Z30__spirv_BuiltInSubgroupMaxSizev" ||
327+ FName == " _Z25__spirv_BuiltInSubgroupIdv" ||
328+ FName == " _Z40__spirv_BuiltInSubgroupLocalInvocationIdv" ||
329+ FName == " _Z27__spirv_BuiltInSubgroupSizev" ||
330+ FName == " _Z27__spirv_BuiltInNumSubgroupsv" ||
331+ FName == " _Z35__spirv_BuiltInLocalInvocationIndexv" ||
332+ FName == " _Z29__spirv_BuiltInGlobalLinearIdv" ||
333+ FName == " _Z36__spirv_BuiltInEnqueuedWorkgroupSizei" ||
334+ FName == " _Z35__spirv_BuiltInNumEnqueuedSubgroupsv" ||
335+ FName == " _Z40__spirv_BuiltInSubgroupLocalInvocationIdv" ||
336+ FName == " _Z29__spirv_BuiltInSubgroupEqMaskv" ||
337+ FName == " _Z32__spirv_BuiltInSubgroupEqMaskKHRv" ||
338+ FName == " _Z29__spirv_BuiltInSubgroupGeMaskv" ||
339+ FName == " _Z32__spirv_BuiltInSubgroupGeMaskKHRv" ||
340+ FName == " _Z29__spirv_BuiltInSubgroupGtMaskv" ||
341+ FName == " _Z32__spirv_BuiltInSubgroupGtMaskKHRv" ||
342+ FName == " _Z29__spirv_BuiltInSubgroupLeMaskv" ||
343+ FName == " _Z32__spirv_BuiltInSubgroupLeMaskKHRv" ||
344+ FName == " _Z29__spirv_BuiltInSubgroupLtMaskv" ||
345+ FName == " _Z32__spirv_BuiltInSubgroupLtMaskKHRv" ;
346+ }
317347// Classify a single instruction's memory scope. Used to set/update memory
318348// scope of a basic block.
319349static RegionMemScope classifyMemScope (Instruction *I) {
@@ -323,6 +353,8 @@ static RegionMemScope classifyMemScope(Instruction *I) {
323353 if (FName == CONTROL_BARRIER || FName == MEMORY_BARRIER ||
324354 FName == ITT_BARRIER || FName == ITT_RESUME)
325355 return RegionMemScope::None;
356+ if (isSPIRVBuiltinFunction (FName))
357+ return RegionMemScope::None;
326358 if (FName.contains (" __spirv_Atomic" )) {
327359 // SPIR-V atomics all have the same signature:
328360 // arg0 = ptr, arg1 = SPIR-V Scope, arg2 = Semantics
0 commit comments