1. Mar 05, 2024
    • Matthias Springer's avatar
      [mlir][bufferization] Add "bottom-up from terminators" analysis heuristic · 7248f4e2
      Matthias Springer authored
      One-Shot Bufferize currently does not support loops where a yielded value bufferizes to a buffer that is different from the buffer of the region iter_arg. In such a case, the bufferization fails with an error such as:
      ```
      Yield operand #0 is not equivalent to the corresponding iter bbArg
          scf.yield %0 : tensor<5xf32>
      ```
      
      One common reason for non-equivalent buffers is that an op on the path from the region iter_arg to the terminator bufferizes out-of-place. Ops that are analyzed earlier are more likely to bufferize in-place.
      
      This commit adds a new heuristic that gives preference to ops that are reachable on the reverse SSA use-def chain from a region terminator and are within the parent region of the terminator. This is expected to work better than the existing heuristics for loops where an iter_arg is written to multiple times within a loop, but only one write is fed into the terminator.
      
      Current users of One-Shot Bufferize are not affected by this change. "Bottom-up" is still the default heuristic. Users can switch to the new heuristic manually.
      
      This commit also turns the "fuzzer" pass option into a heuristic, cleaning up the code a bit.
      7248f4e2
  2. Mar 04, 2024