Skip to content

buffer.restrict.begin

← buffer dialect

Begin a source-language restrict access scope over buffer roots and typed views. Restricted references name independent access paths; peers name the other incoming storage paths covered by the same scope. The results preserve physical storage identity and differ only in access-provenance facts. A restrict scope may prove that overlapping accesses do not occur in a defined program only when at least one access writes. It does not prove that roots are physically disjoint, and shared read-only storage remains valid. buffer.restrict.end removes the scope from values that leave it.

Operation contract

Property Value
Semantic phase executable
Traits Pure, FactIdentity

Signature

Kind Name Type Cardinality Description
Operand restricted any variadic Buffer or view references accessed through distinct restricted paths.
Operand peers any variadic Other incoming buffer or view references covered by the same access scope.
Result results any variadic Same references carrying the active access-scope association.

Examples

%source_r = buffer.restrict.begin %source : buffer
%source_r, %output_r, %scratch_peer = buffer.restrict.begin %source, %output peers %scratch : buffer, view<16xf32>, view<16xf32>