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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Invalid scf -> cf lowering when the `scf.index_switch` case values are greater than `i32`
        </td>
    </tr>

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

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

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

<pre>
    Input:
```mlir
func.func @foo(%arg: index) {
    scf.index_switch %arg
    case 4294967296 { // 2^32
      "op.op"() : () -> ()
      scf.yield
    }
    case 8589934592 { // 2^33
      "op.op"() : () -> ()
      scf.yield
 }
    default {
      "op.op"() : () -> ()
      scf.yield
 }
    return
}
```

Using latest `mlir-opt`
```mlir
// mlir-opt --convert-scf-to-cf --allow-unregistered-dialect
module {
 func.func @foo(%arg0: index) {
    %0 = arith.index_cast %arg0 : index to i32
    cf.switch %0 : i32, [
      default: ^bb3,
      0: ^bb1,
      0: ^bb2
    ]
  ^bb1:  // pred: ^bb0
    "op.op"() : () -> ()
    cf.br ^bb4
  ^bb2:  // pred: ^bb0
    "op.op"() : () -> ()
    cf.br ^bb4
  ^bb3:  // pred: ^bb0
    "op.op"() : () -> ()
    cf.br ^bb4
  ^bb4:  // 3 preds: ^bb1, ^bb2, ^bb3
 return
  }
}
```

This is caused by an overflow here: https://github.com/llvm/llvm-project/blob/3c6041d28c6c185c9d7bc1de6d93148e383b58ed/mlir/lib/Conversion/SCFToControlFlow/SCFToControlFlow.cpp#L672, where the case values are actually `int64_t`.

Link to Goldbolt: https://godbolt.org/z/bvbW51WM4
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VV9vpDYQ_zTeFwtkxsDCAw-5JFRRcy_tVfd4MvawuHXwyja7TT99ZWA3JGkqndSetPIaz4x_M7_5Y-G9PoyIDSk-keJuJ6YwWNf8PDnEXWfVc_MwHqdA-A1hd4TdkJItvyej3XLUT6NM40JJznprCVQECuEOhN9QPSr8k0BNyf7Tok4ppV726Sz55s86yIGuBlcFKTzSHOq8LvdQl9GaEmgJtBRIcc_hRZVSAmCPqT0SgBm7phF53SaE36_7rU304FmjUS-HZH_3xoGqqOqa50UN7xzg_7UDr9AV9mIy4TVp_wOOwzC5cc3sRXBN8fo5r795PR6oEQF9oGv6E3sML2rvC2Pl66JKk0Ta8YQuJF72SbCJ7GmSCGPsOZlGhwftAzpUidLCoAzLLU9WTQY3VHxYb-zjgiNQMEr4HRVOh2GtPSliLIspvdrSYKneFpjs05cqXRU5ELilsWc2VK9Zm3NS3HcdJ3C7lbOrJPtQssElxTVTqxGP24XUo0N1NWLbQL-3RGSfdm65J3-FBz8Yj_9gvHyLx2dE_ypDFxouu0vPb7tmMzb-vYG-DNpT7akUk0dFu2cqRmpP6Hpjz3RAhxF7COEYnVi8OugwTF0q7ROB1pjT5S85Ovt7bBBoO2M7Ai2XJcszBZUsZVYVslb7TmYKS1XzLK-QV7wrKlQE2rk_oTU62t3ODem1HQm0v962X-ytHYOzpjX2_A9HqTweCfDHcj_Tco5-0zDgMi9PwkzoqXBIhQyTMOY5zgo9hjL_FkdFumXkUY9_xGb7yRrV2aVv3sRvZ0Fq3YFA-1cM99R9LbKvn_OdariqeS122GR7qHIAKLPd0GRCClb2XV1U9Z4pUfQCsz2qusxyxTu-0w0wyDPGKsiyfc7SvutRVrzvC8Uy0UuSM3wS2qSR6oi9095P2GRZVlT1zogOjZ_fS4CFTIgvp2vm1HTTwZOcGe2Df7kh6GDmN_bz48MvpLijD-NJGK3ieF7KVvbU2DO6OGbPA44zq6Rkb59KUrJ3ZB8cioCOhkGMM-EcSMl2kzPNdxfUHKsn0K7hnhr4OwAA___tnzDj">