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

//===----------------------------------------------------------------------===//
// spv.ControlBarrier
//===----------------------------------------------------------------------===//

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

// -----

func @control_barrier_1() -> () {
  // expected-error @+1 {{expected string or keyword containing one of the following enum values}}
  spv.ControlBarrier Something, Device, "Acquire|UniformMemory"
  return
}


// -----

//===----------------------------------------------------------------------===//
// spv.MemoryBarrier
//===----------------------------------------------------------------------===//

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

// -----

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

// -----

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

