@@ -222,6 +222,12 @@ class SPIRVToOCLBase : public InstVisitor<SPIRVToOCLBase> {
222222 // / - OCL1.2: barrier
223223 virtual void visitCallSPIRVControlBarrier (CallInst *CI) = 0;
224224
225+ // / Transform split __spirv_ControlBarrierArriveINTEL and
226+ // / __spirv_ControlBarrierWaitINTEL barrier to:
227+ // / - OCL2.0: overload with a memory_scope argument
228+ // / - OCL1.2: overload with no memory_scope argument
229+ virtual void visitCallSPIRVSplitBarrierINTEL (CallInst *CI, Op OC) = 0;
230+
225231 // / Transform __spirv_EnqueueKernel to __enqueue_kernel
226232 virtual void visitCallSPIRVEnqueueKernel (CallInst *CI, Op OC) = 0;
227233
@@ -305,6 +311,11 @@ class SPIRVToOCL12Base : public SPIRVToOCLBase {
305311 // / barrier(flag(sema))
306312 void visitCallSPIRVControlBarrier (CallInst *CI) override ;
307313
314+ // / Transform split __spirv_ControlBarrierArriveINTEL and
315+ // / __spirv_ControlBarrierWaitINTEL barrier to overloads without a
316+ // / memory_scope argument.
317+ void visitCallSPIRVSplitBarrierINTEL (CallInst *CI, Op OC) override ;
318+
308319 // / Transform __spirv_OpAtomic functions. It firstly conduct generic
309320 // / mutations for all builtins and then mutate some of them seperately
310321 Instruction *visitCallSPIRVAtomicBuiltin (CallInst *CI, Op OC) override ;
@@ -394,6 +405,11 @@ class SPIRVToOCL20Base : public SPIRVToOCLBase {
394405 // / sub_group_barrier(flag(sema), map(memScope))
395406 void visitCallSPIRVControlBarrier (CallInst *CI) override ;
396407
408+ // / Transform split __spirv_ControlBarrierArriveINTEL and
409+ // / __spirv_ControlBarrierWaitINTEL barrier to overloads with a
410+ // / memory_scope argument.
411+ void visitCallSPIRVSplitBarrierINTEL (CallInst *CI, Op OC) override ;
412+
397413 // / Transform __spirv_Atomic* to atomic_*.
398414 // / __spirv_Atomic*(atomic_op, scope, sema, ops, ...) =>
399415 // / atomic_*(generic atomic_op, ops, ..., order(sema), map(scope))
0 commit comments