llvm/mlir/test/Dialect/SPIRV/IR/barrier-ops.mlir

// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s

//===----------------------------------------------------------------------===//
// spirv.ControlBarrier
//===----------------------------------------------------------------------===//

func.func @control_barrier_0() -> () {
  // CHECK: spirv.ControlBarrier <Workgroup>, <Device>, <Acquire|UniformMemory>
  spirv.ControlBarrier <Workgroup>, <Device>, <Acquire|UniformMemory>
  return
}

// -----

func.func @control_barrier_1() -> () {
  // expected-error @+2 {{to be one of}}
  // expected-error @+1 {{failed to parse SPIRV_ScopeAttr}}
  spirv.ControlBarrier <Something>, <Device>, <Acquire|UniformMemory>
  return
}


// -----

//===----------------------------------------------------------------------===//
// spirv.MemoryBarrier
//===----------------------------------------------------------------------===//

func.func @memory_barrier_0() -> () {
  // CHECK: spirv.MemoryBarrier <Device>, <Acquire|UniformMemory>
  spirv.MemoryBarrier <Device>, <Acquire|UniformMemory>
  return
}

// -----

func.func @memory_barrier_1() -> () {
  // CHECK: spirv.MemoryBarrier <Workgroup>, <Acquire>
  spirv.MemoryBarrier <Workgroup>, <Acquire>
  return
}

// -----

func.func @memory_barrier_2() -> () {
 // expected-error @+1 {{expected at most one of these four memory constraints to be set: `Acquire`, `Release`,`AcquireRelease` or `SequentiallyConsistent`}}
  spirv.MemoryBarrier <Device>, <Acquire|Release>
  return
}