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

    <tr>
        <th>Summary</th>
        <td>
            [mlir][TensorOps][Canonicalize][FoldDimOfExpandShape]
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    https://github.com/llvm/llvm-project/blame/476b208e0115e766605e9f850982996a1d51c287/mlir/lib/Dialect/Tensor/IR/TensorOps.cpp#L1988

@matthias-springer 

Why the assert?

```
    // `dim` is the only dynamic dimension in `group`. (Otherwise, the
    // ExpandShapeOp would be ambiguous.)
    int64_t product = 1;
    ReassociationIndices grp = expandShapeOp.getReassociationIndices()[srcDim];
    bool multiDynamicDim = false;
    for (int64_t d : grp) {
      if (d != dim) {
 if (resultType.isDynamicDim(d)) {
          multiDynamicDim = true;
 break;
        }
        // assert(!resultType.isDynamicDim(d) && "expected static dim");
 product *= resultType.getDimSize(d);
      }
    }
 LLVM_DEBUG(llvm::dbgs() << expandShapeOp << "\n";);
    int dynIndex = 0;
    for (int i = 0; i < *dim; i++) {
      if (ShapedType::isDynamic(expandShapeOp.getStaticOutputShape()[i]))
 dynIndex++;
    }
    for (auto tmp : expandShapeOp.getOutputShape()) {
      LLVM_DEBUG(llvm::dbgs() << tmp << "\n";);
    }
    for (auto tmp : expandShapeOp.getStaticOutputShape()) {
 LLVM_DEBUG(llvm::dbgs() << tmp << "\n";);
    }

    if (multiDynamicDim) {
      rewriter.replaceOp(dimOp, expandShapeOp.getOutputShape()[dynIndex]);
      return success();
 }
```

can we do this for better handling?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2PozgT_jXOxZrIlAOEQw5JGF611K8iTc_uHkcGV4N3ACPbTHf2169s8kWne3fmsBGC2NTHU_U8UAhrVd0jbki8I3G-EKNrtNk0uvp-PC5KLY-bxrnBEr4lUBAoauWasVxWuiNQtO2P8-XTYPSfWDkCRdmKDgkUqzQpga2RRVGMaZIkLMbseR2zbA1ZlohIxlEF65RA0bXK-ECqJFDkSrRTpK_YW-1vPHy5rA6DXVbDQIA_Rtl6TVhO2PZ0XrFOONcoYT_Zwai-RkNvDf5ojtQ1SIW1aBzhxcw7YacjLCmldCqZkoRJ1ZGEUWWDv-7bI5XHXnSqolJ12Fule6p6b1obPQ4kYUtKYH1wDZoXZZHA3rvexf78OohePjViwMNAX_TYSloiFV2p6lGPdkkguzqp3iWrb44ORsuxcpTwnEaE764WX1BYqyslnNL9Qy9VhZbWZgimeJtsWaN7z5rA2ueMd9ZUuepInM8SlFq3tBtbp_KpAbnqQvBn0VqcmT5r43twBi0p4VuPhUBGSXpjSKl69paSEoh8LN_umdF036AdW_f1OOBS2Wt67-kh34f1v_ewOjPeQC0Niu8z5IGgNH-zMTF2Eo_vUvTPgCiBhEBCCQC-Dlg5lNQ64SbREAAP-pL2wilsPcSb0DW6XHVP6i88VzrHOkN6XTw-_v7_b_nn3W__I7AOjyrfEr6VZX3imBK-J3w_l8V508OL972_8N3bnKp3Xv8PvcTX0FD2AfFUXW6Hvz7u1hfv1wR24fhADQGQ9B2YgF86TGB9p-Sn0NfD6IbRhe2LjJVXcFDHKcUZ-Cn9LfBZJ09ViNFp6rohqPcu733G-3J-mogpy7-3_9dhftSeGdj_DueNcgK1b57Jd3pm8MUoh2ZpcGhFhYfBa191_rr_GRri3YXniX_-Jr4bTU_tWFVoz--8i8kV-HwoTOdK9PQFqdTUNcoGAkp0Dg1tRC9b1deEFwu54TLjmVjgJko5RClnGVs0G8SMcSiraiUYkwlnseSQoohBQBkl2UJtgMEqiiBiaRRxtkwEgASZQlquuCzXZMWwE6pdeo6W2tQLZe2ImyhKoyhbtKLE1oaJDjBNVvCz3WzCoC7H2pIVa5V19hrBKdeGr4DgEOck3l3m7bTci173qhKtfw-FnUK3Mlfd4flmiPlEo2l__ashlGAJFKcqfmzg7wAAAP__egl3fg">