<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/69888>69888</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR][PDL] Invalid value from native rewrite
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            bug,
            mlir:pdl
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          qedawkins
      </td>
    </tr>
</table>

<pre>
    ## Problem Description

I have a native rewrite function registered with PDL that does an element-by-element rewrite of Values in a ValueRange that is seemingly failing to populate the PDL ByteCode result list with the new value. My rewrite function looks like
```
static ValueRange getI32TensorSizes(PatternRewriter &rewriter,
 ValueRange vals) {
  SmallVector<Value> flatI32TensorSizes;
  for (auto val : vals) {
    if (isa<IndexType>(val.getType())) {
 flatI32TensorSizes.push_back(rewriter.create<arith::IndexCastOp>(
 val.getLoc(), rewriter.getIntegerType(32), val));
    }   
  }
 return ValueRange(flatI32TensorSizes);
}
```
```
 patterns.getPDLPatterns().registerRewriteFunction(
 "convert_index_to_i32",
 getI32TensorSizes);
```
and I have pdl IR like
```
%workload = pdl.apply_native_rewrite "get_tensor_sizes"(%range : !pdl.range<value>) : !pdl.range<value>
%new_dims = pdl.apply_native_rewrite "convert_index_to_i32"(%workload : !pdl.range<value>) : !pdl.range<value>
```
If I run my interpreter pass with `--debug-only=pdl-bytecode`, it successfully prints the arguments of to the native rewrite, but fails to print the results.
```
loc("/home/quinn/SHARK-Runtime/samples/custom_dispatch/vulkan/shaders/pattern_module.mlir":62:19)
Executing ApplyRewrite:
  * Arguments: %dim = tensor.dim %1, %c0_0 : tensor<?xf32> * Result: Please report issues to https://github.com/openxla/iree/issues and include the crash backtrace.
```
(the full stack backtrace can be found here: https://gist.github.com/qedawkins/2f01e231caa8933c8c75c0b1a83b4d65, crashing here on this debug line: https://github.com/llvm/llvm-project/blob/a9136f0ad94bf7738c585c6d12ad5bbe1815f95b/mlir/lib/Rewrite/ByteCode.cpp#L1450)

If I print the surrounding IR immediately before returning from the native rewrite function, I see that the index_cast I wanted to insert is there
```
func.func @mixed_invocation(%arg0: !hal.buffer_view, %arg1: !hal.buffer_view) -> !hal.buffer_view attributes {iree.abi.stub} {
  %c0 = arith.constant 0 : index
  %0 = hal.buffer_view.dim<%arg0 : !hal.buffer_view>[0] : index
  %1 = hal.tensor.import %arg0 "input 0" : !hal.buffer_view -> tensor<?xf32>{%0}
  %2 = hal.buffer_view.dim<%arg1 : !hal.buffer_view>[0] : index
  %3 = hal.tensor.import %arg1 "input 1" : !hal.buffer_view -> tensor<?xf32>{%2}
  %c0_0 = arith.constant 0 : index
  %dim = tensor.dim %1, %c0_0 : tensor<?xf32>
  %4 = arith.index_cast %dim : index to i32
  %5 = arith.mulf %1, %3 : tensor<?xf32>
  %6 = arith.addf %5, %3 : tensor<?xf32>
  %dim_1 = tensor.dim %6, %c0 : tensor<?xf32>
  %7 = hal.tensor.export %6 "output 0" : tensor<?xf32>{%dim_1} -> !hal.buffer_view
  return %7 : !hal.buffer_view
}
```
```
%4 = arith.index_cast %dim : index to i32
```

cc @MaheshRavishankar 

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykV19vqzoS_zTOi1UEdiHkIQ9pcqKNtkdb5Vzd18jAELw1Ntc2abOffjWGpLQnvefPlSoaYOY3_34zY4Rz8qgBliR9IOlmJnrfGLv8Cyrx8iy1mxWmOi8J44Rx-mRNoaClG3CllZ2XRpN4Q-LVcN3RRpyACqqFlyegFl6s9EDrXpcoSy0cpfNgoaIv0jf0afNIfSM8rQw4KjQFBS1of1ec78afVxBT0z-F6sFRqakYfu-FPsKAIB11AK3UR3WmtZBK6iP1hnam65XwKAXB3sPZw9pU6J3rladKOj94gxIaXugJoSP69fx9AMqYZ0eVfIYx7iwe_8Kt88LLcurbEfyOsz9AO2O_yf-BIyx_Et6D1fsB3FLCstGQJWw9IE0xTkI5whaUzB_Gl_RbK5T6E0pvLOHrIEv4F1or8dEcv-rUBk3lovcGISnhq1vQlMoa5aQThK93uoLXP84dwhOWn4SKjuDDA5YTthj-JvrfuxB1vWsOhSifCcsvgUalBeGB8LWw0jeErwhfBWNr4fx_usHciDlafTTlxeiaXoEww9rDEezoFWejyEmo0UM-iY7MN3gd78l8M_604HurJ3knLL-RzwnaVfcDCz7c0m6ot0NXnzaPY_ndEEt06YmRDtuRam_RE8ZKo09g_UFigg7eHCQGyd7YcoNmEz_f-yN0RcdO7SpFd_vP-UxY-mLsszKiooRvUD4SXafOh6HDD5cGIYwdwR98cODgBg9YiDC1gcTINsISRAgPCF-fRtoGAv3N64srGl4OlWzdD135NF35-4D-oUfvc7Wr6Y7aXtP2TKX2YDsL2N2dcG6YLySL7-4qKPrjndHqTPimq9RdcfZQmgoQiK2p9NT1ZQnO1b1SZ9pZqb0Ls0nYY48j0eEs9GaYV-8mLQIUvQ_zz4Xph9pBcJh2Lrrpuxo7ixG2bUwLhG3_6qXWhG2__Wu1__fdvtdehudOtJ3C6m7L3nnTHirpOuHLhrDtqVfPApVcIyqwKDRy_9CaqlcQtUpaNMNXGV6S0J3BhS-vUPYeh_YKqzp2A86FS6eyFV1dMjAUJ61kG8gw8C4KtyxNMA2EpWV8iEMZh9eErwnfvtac4ahEuH3ICUo8KRAOk9QZi7vE4Z7xhjbed2iMsC1h26P0TV9EpWkJ25oO9KsShG2lBczMqIXtJXWp-mrYOaUVrqE4_rwVJdwuAGE5ymLJqfOifH5ToKXQtABam15XtAGLSfnOMeejd95d9zdhW1bHCTCelELkC87LvJynZVwkIufFfZWlmK7gJWYfDVCjqW-ko4GsVEl90-bEnFKny7-7zpr_QukJ2xbKFIRtxSLhWR2LanFf1PM5z8s0T8usSpio0qKAJE_SepGi6MCPrZJ4c-EA2152dlR2HWH8MblP4ytzJu33RnfXW4sJw5B2eyrbFiopPKgzLaA2FsZ5j-9ra9obzXTd-pifHZ4uhpMGSg6TpRTO0x19EdpDhXSR2kHgDwrZ2zMVUSO8UHIft_IVqoPUJ1OKy9RnqbDHeBw_jVBR0dc12MNJwsvIbGGPyWcCC3o38PvjKyq8t7LoPTjc18jaSBQycr4vcClOzgCheUJnhe0clUY7L7SnQz-F6Ceyg-gHc9iN2HJDOPQTd_kXkj7EJN3cBE6uwGOHyzY06BWUMam73tOYMPaJiSEdN0YAxsvS-O0EgLDsh6EkvxcK_9tQkrdQkt8Ohb0PZRx_P1nD3x-lE5D7ib1Ji1zhR7OhVTibKKYTxbZX9dQ2_wnD2URfVFXQT39Bv5LtIbkRf3aN_ydA5h9LDK-XEmdYX9P7d1z9tJDBG2zJTzr5YnM8so6mb5LyVw6qv1nAjyjhWobx9lU04Jq9OEnXCP0s7HjunlVLXi34QsxgmWSL-WKRz-Ns1iwXUNeLIhPz-6yEPM5YmuZxmiUQp4uSiWwmlyxmPIkZS_IkZ1kEi7QSRVIXBWQZz4Hcx9AKqSLcRZGxx1nYy8tskef5TIkClAvfuowV_XE8RDMWFg9fdZXCR-lmZpdhmRX90ZH7GD8S3Rukl16FL-avj7s9STckfXjaPGLr7_RJKFkN35DDZnm_VWa9Vctf3qTD2YKwbQjj_wEAAP__wkHNPg">