Our tiling implementation assumes a "tensor semantic" for the operation to
be tiled.
Prior to this patch, if we provide a tile-able op with "buffer semantic", we
will assert instead of gracefully reject the input.
This patch turns the assert in a proper error.