Skip to content

Commit 33546b4

Browse files
committed
SYCLOptimizeBarriers: handle __spirv_BuiltIn* call instead of __spirv_BuiltIn* global variables
1 parent 2105b83 commit 33546b4

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

llvm/lib/SYCLLowerIR/SYCLOptimizeBarriers.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
319349
static 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

llvm/test/SYCLLowerIR/SYCLOptimizeBarriers/basic-optimizations.ll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,24 @@ define spir_kernel void @bb_remove_get_id() {
3636
ret void
3737
}
3838

39+
define spir_kernel void @bb_remove_get_id_call() {
40+
; CHECK-LABEL: define spir_kernel void @bb_remove_get_id_call() {
41+
; CHECK-NEXT: [[ID1:%.*]] = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 0)
42+
; CHECK-NEXT: call void @_Z22__spirv_ControlBarrieriii(i32 noundef 2, i32 noundef 2, i32 noundef 0)
43+
; CHECK-NEXT: [[ID2:%.*]] = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 1)
44+
; CHECK-NEXT: [[ID3:%.*]] = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 2)
45+
; CHECK-NEXT: ret void
46+
;
47+
%id1 = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 0)
48+
call void @_Z22__spirv_ControlBarrieriii(i32 noundef 2, i32 noundef 2, i32 noundef 0)
49+
%id2 = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 1)
50+
call void @_Z22__spirv_ControlBarrieriii(i32 noundef 2, i32 noundef 2, i32 noundef 0)
51+
%id3 = call spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef 2)
52+
ret void
53+
}
54+
55+
declare spir_func i64 @_Z26__spirv_BuiltInWorkgroupIdi(i32 noundef)
56+
3957
define spir_kernel void @bb_private_access() {
4058
; CHECK-LABEL: define spir_kernel void @bb_private_access() {
4159
; CHECK-NEXT: [[TMP:%.*]] = alloca i32, align 4

0 commit comments

Comments
 (0)