If movement ops on src collapse to a contiguous range, return BUFFER_VIEW.reshape(src.shape). Otherwise None.
(src:UOp)
| 56 | if assigned_to.op is not Ops.BUFFER: return src.contiguous(tag=u.tag) |
| 57 | |
| 58 | def _make_buffer_view(src:UOp) -> UOp|None: |
| 59 | """If movement ops on src collapse to a contiguous range, return BUFFER_VIEW.reshape(src.shape). Otherwise None.""" |
| 60 | if (offset := src.contiguous_view_offset()) is None: return None |
| 61 | buf = src.base |
| 62 | if buf.op is Ops.BUFFER_VIEW: offset, buf = offset + buf.arg[1], buf.src[0] |
| 63 | return UOp(Ops.BUFFER_VIEW, src.dtype, (buf,), (src.numel(), offset)).reshape(src.shape) |
| 64 | |
| 65 | def contiguous_mops_to_view(c:UOp, src:UOp): |
| 66 | """CONTIGUOUS(MOPS(BUFFER)) → CONTIGUOUS(BUFFER_VIEW) when movement ops collapse to a contiguous range.""" |
no test coverage detected
searching dependent graphs…