tree cea20b7587bd52ba6d8da2599a348ad796a73ae7
parent 4576683cfe93ff25ea7cdec6c3daefc3ad7825bf
author Christopher McGirr <mcgirr@roofline.ai> 1782119821 +0200
committer GitHub <noreply@github.com> 1782119821 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJqOP2NCRC1aQ7uu5UhlAAALbwQADIxrd05RyLk15xVWTEK/lVM
 PGfj/rMSfzWP5rbS7VLzZnTMlyI+rmlrOJb7B9VMBU+NfAgJSmAZFPLci41RYR4x
 iFFpmWRPhMD87nDA5MlZkagGpcAcww36cKRuMQFbsGg/9IBCTfV6ybGLlB8lTYFJ
 sw3WqDtg8AX0j21K1FRKFReY3wVsY/aJ54dLh0u8FS6TnW9oTRmxa3c3RAJB3hxe
 o47m9syse7Y2q/H1dtvbay9ymBzxmMKp1JOCddOQITliSoRH9LGjqHRjh+JOG4SK
 +bY9Oea3UW6sSUuhgmMFuxMiaV6vh2K+HR+vtUEuQXGY52NZvAjK5FLqOJW+44mz
 yfX0cn93eUTISx5MyrViwglcww/ns3/g/tqOfe2zcGZEOFleQIT1zsgbKD8zDA1D
 0epHqO85kNKKH+NWhPECOyZj1jn9R08Xelf7bthmFS4x2B2yqAlIhdGJtm4xCANQ
 Aryo74v9rMqe8owFSH/kdDpj1EsvShQcRI/sOWnEsFWcO6kQXXC01OqjYSuYkjJ3
 KhsHBQkFm2UqX1QEuP5+k8jQ6sbMnK5pHnpPxlcKHSOEqXxowMuQkJy3lPQrxF3E
 PNfAnUk2g1v1xmbl7IgBCMzjzH9AuQfZqRMWmsrwmNyEuR1WRzZSvbi+ZeAcVU+V
 F+d02x5Mf5pdoqnhvSm2
 =DQ42
 -----END PGP SIGNATURE-----
 

[Codegen][GlobalOpt] Detach non-splat constant inits (#24605)

A constant used directly as the `outs` (init/destination) of a
`linalg.matmul` or convolution e.g. a fully-connected/conv bias imported
from TFLite via TOSA survives into dispatch formation. It is then cloned
into the workgroup on the written (output) side and bufferizes as a
read-only global, which fails workgroup-distribution verification with
the following error:

```
'linalg.generic' op write affecting operations on global resources are restricted to workgroup distributed contexts
'func.func' op failed on workgroup distribution verification
```

This kind of IR was seen in TFLite -> TOSA conversion flows and and the
IR below is an example of that:

```mlir
util.func public @main(%a: tensor<1x1xf32>, %w: tensor<1x9xf32>) -> tensor<1x9xf32> {
  %bias = arith.constant dense<[[1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0]]> : tensor<1x9xf32>
  %0 = linalg.matmul ins(%a, %w : tensor<1x1xf32>, tensor<1x9xf32>)
                     outs(%bias : tensor<1x9xf32>) -> tensor<1x9xf32>
  util.return %0 : tensor<1x9xf32>
}
```

The chosen solution is to use is the `DetachElementwiseFromNamedOps`
pattern which exists to keep non-writable inits out of dispatches. It
only covers two of our three relevant cases. The pass will
1. Take a non-const init and detach it into a zero-fill plus a trailing
add
2. Take a splat constant init and convert it to a fill.

Our use-case of a non-splat constant init would not be handled. Here we
extend the elementwise detach pattern so a non-splat constant init is
detached the same way a computed init is. A fresh zero-fill is created
and the constant is added back as a read-only input. This form of IR can
be then handled by codegen.

After the fix the reproducer compiles and the bias survives read-only:

```
%bias = arith.constant ... : tensor<1x9xf32>
%z  = linalg.fill ins(%c0 : f32) outs(%empty : tensor<1x9xf32>) -> tensor<1x9xf32>
%mm = linalg.matmul ins(%a, %w) outs(%z) -> tensor<1x9xf32>
%0  = linalg.generic ins(%mm, %bias) outs(%z) { ... }   // %mm + %bias
```

---

_Code Examples and Tests Assisted-by Claude_