Skip to content

Commit 0231525

Browse files
authored
[SYCL] Add barrier optimization pass (#19353)
It removes redundant barriers (both back-to-back and in general in CFG) and downgrades global barrier to local if there are no global memory accesses 'between' them. See description in SYCLOptimizeBackToBackBarrier.cpp for more details. --------- Signed-off-by: Sidorov, Dmitry <[email protected]> Signed-off-by: Dmitry Sidorov <[email protected]>
1 parent 5ca7ef2 commit 0231525

17 files changed

+1742
-199
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include "llvm/SYCLLowerIR/SYCLAddOptLevelAttribute.h"
5353
#include "llvm/SYCLLowerIR/SYCLConditionalCallOnDevice.h"
5454
#include "llvm/SYCLLowerIR/SYCLCreateNVVMAnnotations.h"
55+
#include "llvm/SYCLLowerIR/SYCLOptimizeBarriers.h"
5556
#include "llvm/SYCLLowerIR/SYCLPropagateAspectsUsage.h"
5657
#include "llvm/SYCLLowerIR/SYCLPropagateJointMatrixUsage.h"
5758
#include "llvm/SYCLLowerIR/SYCLVirtualFunctionsAnalysis.h"
@@ -1080,13 +1081,16 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10801081
MPM.addPass(ESIMDRemoveHostCodePass());
10811082
});
10821083

1083-
// Add the InferAddressSpaces pass for all the SPIR[V] targets
1084+
// Add the InferAddressSpaces and SYCLOptimizeBarriers passes for all
1085+
// the SPIR[V] targets
10841086
if (TargetTriple.isSPIR() || TargetTriple.isSPIRV()) {
10851087
PB.registerOptimizerLastEPCallback(
10861088
[](ModulePassManager &MPM, OptimizationLevel Level,
10871089
ThinOrFullLTOPhase) {
10881090
MPM.addPass(createModuleToFunctionPassAdaptor(
10891091
InferAddressSpacesPass(clang::targets::SPIR_GENERIC_AS)));
1092+
MPM.addPass(
1093+
createModuleToFunctionPassAdaptor(SYCLOptimizeBarriersPass()));
10901094
});
10911095
}
10921096

Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
//==- SYCLOptimizeBackToBackBarrier.h - SYCLOptimizeBackToBackBarrier Pass -==//
1+
//==- SYCLOptimizeBarriers.h - SYCLOptimizeBarriers Pass -==//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
55
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66
//
77
//===----------------------------------------------------------------------===//
88
//
9-
// This pass cleans up back-to-back ControlBarrier calls.
9+
// This pass cleans up ControlBarrier and MemoryBarrier calls.
1010
//
1111
//===----------------------------------------------------------------------===//
12-
#ifndef LLVM_SYCL_OPTIMIZE_BACK_TO_BACK_BARRIER_H
13-
#define LLVM_SYCL_OPTIMIZE_BACK_TO_BACK_BARRIER_H
12+
#ifndef LLVM_SYCL_OPTIMIZE_BARRIERS_H
13+
#define LLVM_SYCL_OPTIMIZE_BARRIERS_H
1414

1515
#include "llvm/IR/PassManager.h"
1616

1717
namespace llvm {
1818

19-
class SYCLOptimizeBackToBackBarrierPass
20-
: public PassInfoMixin<SYCLOptimizeBackToBackBarrierPass> {
19+
class SYCLOptimizeBarriersPass
20+
: public PassInfoMixin<SYCLOptimizeBarriersPass> {
2121
public:
22-
PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
22+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &);
2323

2424
static bool isRequired() { return true; }
2525
};
2626

2727
} // namespace llvm
2828

29-
#endif // LLVM_SYCL_OPTIMIZE_BACK_TO_BACK_BARRIER_H
29+
#endif // LLVM_SYCL_OPTIMIZE_BARRIERS_H

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
#include "llvm/SYCLLowerIR/SYCLConditionalCallOnDevice.h"
193193
#include "llvm/SYCLLowerIR/SYCLCreateNVVMAnnotations.h"
194194
#include "llvm/SYCLLowerIR/SYCLJointMatrixTransform.h"
195-
#include "llvm/SYCLLowerIR/SYCLOptimizeBackToBackBarrier.h"
195+
#include "llvm/SYCLLowerIR/SYCLOptimizeBarriers.h"
196196
#include "llvm/SYCLLowerIR/SYCLPropagateAspectsUsage.h"
197197
#include "llvm/SYCLLowerIR/SYCLPropagateJointMatrixUsage.h"
198198
#include "llvm/SYCLLowerIR/SYCLVirtualFunctionsAnalysis.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ MODULE_PASS("esimd-remove-host-code", ESIMDRemoveHostCodePass());
180180
MODULE_PASS("esimd-remove-optnone-noinline", ESIMDRemoveOptnoneNoinlinePass());
181181
MODULE_PASS("sycl-conditional-call-on-device", SYCLConditionalCallOnDevicePass())
182182
MODULE_PASS("sycl-joint-matrix-transform", SYCLJointMatrixTransformPass())
183-
MODULE_PASS("sycl-optimize-back-to-back-barrier", SYCLOptimizeBackToBackBarrierPass())
184183
MODULE_PASS("sycl-propagate-aspects-usage", SYCLPropagateAspectsUsagePass())
185184
MODULE_PASS("sycl-propagate-joint-matrix-usage", SYCLPropagateJointMatrixUsagePass())
186185
MODULE_PASS("sycl-add-opt-level-attribute", SYCLAddOptLevelAttributePass())
@@ -507,6 +506,7 @@ FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())
507506
FUNCTION_PASS("slsr", StraightLineStrengthReducePass())
508507
FUNCTION_PASS("stack-protector", StackProtectorPass(TM))
509508
FUNCTION_PASS("strip-gc-relocates", StripGCRelocates())
509+
FUNCTION_PASS("sycl-optimize-barriers", SYCLOptimizeBarriersPass())
510510
FUNCTION_PASS("tailcallelim", TailCallElimPass())
511511
FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass())
512512
FUNCTION_PASS("trigger-crash-function", TriggerCrashFunctionPass())

llvm/lib/SYCLLowerIR/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ add_llvm_component_library(LLVMSYCLLowerIR
7474
SYCLDeviceRequirements.cpp
7575
SYCLKernelParamOptInfo.cpp
7676
SYCLJointMatrixTransform.cpp
77-
SYCLOptimizeBackToBackBarrier.cpp
77+
SYCLOptimizeBarriers.cpp
7878
SYCLPropagateAspectsUsage.cpp
7979
SYCLPropagateJointMatrixUsage.cpp
8080
SYCLVirtualFunctionsAnalysis.cpp

llvm/lib/SYCLLowerIR/SYCLOptimizeBackToBackBarrier.cpp

Lines changed: 0 additions & 160 deletions
This file was deleted.

0 commit comments

Comments
 (0)