Skip to content

view.atomic.rmw

view dialect

Atomically read one scalar view element, combine it with a scalar update value, write the combined value back, and return the old value observed by that atomic operation.

Operation contract

Property Value
Semantic phase executable
Target contracts memory.atomic
Interfaces MemoryAccess
Memory effects readwrite view

Signature

Kind Name Type Cardinality Description
Operand value scalar required Scalar update value.
Operand view view required Typed destination view.
Operand indices index variadic Dynamic logical element indices.
Result result scalar required Old memory value read by the atomic operation.
Attribute kind enum AtomicKind required
Attribute ordering enum AtomicOrdering required Required atomic memory ordering.
Attribute scope enum AtomicScope required Required atomic synchronization scope.
Attribute cache_scope enum CacheScope optional Optional cache/coherency scope required by target lowering.
Attribute cache_temporal enum CacheTemporal optional Optional temporal cache policy required by target lowering.
Attribute static_indices i64_array required Static logical element indices with INT64_MIN sentinels for dynamics.

Verification constraints

  • SameElementType(value, view, result)
  • SameType(value, result)

Examples

%old = view.atomic.rmw<addi> %value, %view[%row, %col] {ordering = relaxed, scope = workgroup} : i32, view<[%M]x[%N]xi32, %layout> -> i32