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>