(ls:UOp)
| 203 | return idx.replace(src=(idx.src[0].src[0], idx_y.valid(valid), idx_x.valid(valid))) |
| 204 | |
| 205 | def image_fixup(ls:UOp): |
| 206 | # normal image load or store, with the CAST from expand_index |
| 207 | if isinstance(dt:=ls.src[0].src[0].dtype, ImageDType) and ls.src[0].op is Ops.CAST: |
| 208 | assert ls.src[0].dtype.count == 4, "image must be casted to 4" |
| 209 | return ls.replace(src=(get_image_idx(ls.src[0].src[0], dt.shape[1]),)+ls.src[1:]) |
| 210 | |
| 211 | # this is an unprocessed image without a cast, we should just make it a buffer |
| 212 | if isinstance(dt, ImageDType) and len(ls.src[0].src) == 2: |
| 213 | off = ls.src[0].src[1] |
| 214 | assert ls.src[0].src[0].op is Ops.RESHAPE, "image idx must be on reshape" |
| 215 | idx = ls.src[0].src[0].src[0].replace(dtype=(new_dt:=dtypes.half if dt.itemsize == 2 else dtypes.float).ptr(dt.size)).index(off) |
| 216 | return ls.replace(src=(idx,), dtype=new_dt).cast(dtypes.float) if ls.op is Ops.LOAD else ls.replace(src=(idx, ls.src[1].cast(new_dt))) |
| 217 | |
| 218 | correct_load_store = PatternMatcher([ |
| 219 | # split LOAD/STORE |
nothing calls this directly
no test coverage detected
searching dependent graphs…