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

    <tr>
        <th>Summary</th>
        <td>
            [flang] SimplifyIntrinsics pass asserts in findShape
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    FIR produced from this Fortran code:
```
subroutine foo(a, v)
  real, allocatable :: a(:, :)
  REAL :: v(:)
  v = SUM(a,DIM=1)
end subroutine foo
```

FIR to reproduce the issue:
```
module attributes {fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.target_triple = "x86_64-unknown-linux-gnu"} {
  func.func @_QPfoo(%arg0: !fir.ref<!fir.box<!fir.heap<!fir.array<?x?xf32>>>> {fir.bindc_name = "a"}, %arg1: !fir.box<!fir.array<?xf32>> {fir.bindc_name = "v"}) {
    %0 = fir.alloca !fir.box<!fir.heap<!fir.array<?xf32>>>
    %c0 = arith.constant 0 : index
    %1:3 = fir.box_dims %arg1, %c0 : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)
    %2 = fir.array_load %arg1 : (!fir.box<!fir.array<?xf32>>) -> !fir.array<?xf32>
    %3 = fir.load %arg0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?xf32>>>>
    %c0_0 = arith.constant 0 : index
    %4:3 = fir.box_dims %3, %c0_0 : (!fir.box<!fir.heap<!fir.array<?x?xf32>>>, index) -> (index, index, index)
    %c1 = arith.constant 1 : index
    %5:3 = fir.box_dims %3, %c1 : (!fir.box<!fir.heap<!fir.array<?x?xf32>>>, index) -> (index, index, index)
    %6 = fir.box_addr %3 : (!fir.box<!fir.heap<!fir.array<?x?xf32>>>) -> !fir.heap<!fir.array<?x?xf32>>
    %7 = fir.shape_shift %4#0, %4#1, %5#0, %5#1 : (index, index, index, index) -> !fir.shapeshift<2>
    %8 = fir.embox %6(%7) : (!fir.heap<!fir.array<?x?xf32>>, !fir.shapeshift<2>) -> !fir.box<!fir.array<?x?xf32>>
    %c1_i32 = arith.constant 1 : i32
    %9 = fir.absent !fir.box<i1>
    %10 = fir.zero_bits !fir.heap<!fir.array<?xf32>>
    %c0_1 = arith.constant 0 : index
    %11 = fir.shape %c0_1 : (index) -> !fir.shape<1>
    %12 = fir.embox %10(%11) : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>) -> !fir.box<!fir.heap<!fir.array<?xf32>>>
    fir.store %12 to %0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>
    %13 = fir.address_of(@_QQcl.2E2F7474742E66393000) : !fir.ref<!fir.char<1,10>>
    %c4_i32 = arith.constant 4 : i32
    %14 = fir.convert %0 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> !fir.ref<!fir.box<none>>
    %15 = fir.convert %8 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
    %16 = fir.convert %13 : (!fir.ref<!fir.char<1,10>>) -> !fir.ref<i8>
    %17 = fir.convert %9 : (!fir.box<i1>) -> !fir.box<none>
    %18 = fir.call @_FortranASumDim(%14, %15, %c1_i32, %16, %c4_i32, %17) : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
    %19 = fir.load %0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>
    %c0_2 = arith.constant 0 : index
    %20:3 = fir.box_dims %19, %c0_2 : (!fir.box<!fir.heap<!fir.array<?xf32>>>, index) -> (index, index, index)
    %21 = fir.box_addr %19 : (!fir.box<!fir.heap<!fir.array<?xf32>>>) -> !fir.heap<!fir.array<?xf32>>
    %22 = fir.shape_shift %20#0, %20#1 : (index, index) -> !fir.shapeshift<1>
    %23 = fir.array_load %21(%22) : (!fir.heap<!fir.array<?xf32>>, !fir.shapeshift<1>) -> !fir.array<?xf32>
    %c1_3 = arith.constant 1 : index
    %c0_4 = arith.constant 0 : index
    %24 = arith.subi %1#1, %c1_3 : index
    %25 = fir.do_loop %arg2 = %c0_4 to %24 step %c1_3 unordered iter_args(%arg3 = %2) -> (!fir.array<?xf32>) {
      %26 = fir.array_fetch %23, %arg2 : (!fir.array<?xf32>, index) -> f32
      %27 = fir.array_update %arg3, %26, %arg2 : (!fir.array<?xf32>, f32, index) -> !fir.array<?xf32>
      fir.result %27 : !fir.array<?xf32>
    }
    fir.array_merge_store %2, %25 to %arg1 : !fir.array<?xf32>, !fir.array<?xf32>, !fir.box<!fir.array<?xf32>>
    fir.freemem %21 : !fir.heap<!fir.array<?xf32>>
    return
  }
  func.func private @_FortranASumDim(!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none attributes {fir.runtime}
  fir.global linkonce @_QQcl.2E2F7474742E66393000 constant : !fir.char<1,10> {
    %0 = fir.string_lit "./ttt.f90\00"(10) : !fir.char<1,10>
    fir.has_value %0 : !fir.char<1,10>
  }
}
```

`fir-opt --simplify-intrinsics ttt.fir`:
```
 #9 0x0000000001539f0d llvm::MutableArrayRef<mlir::OpOperand>::operator[](unsigned long) const /local/home/szakharin/llvm-project/llvm/include/llvm/ADT/ArrayRef.h:0:7
#10 0x0000000001539da6 mlir::Operation::getOpOperand(unsigned int) /local/home/szakharin/llvm-project/llvm/../mlir/include/mlir/IR/Operation.h:306:5
#11 0x0000000001539d2b mlir::Operation::getOperand(unsigned int) /local/home/szakharin/llvm-project/llvm/../mlir/include/mlir/IR/Operation.h:267:61
#12 0x000000000174654f findShape(mlir::Value) /local/home/szakharin/llvm-project/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp:305:20
```

It fails to `getOperand(0)` on `%0 = fir.alloca !fir.box<!fir.heap<!fir.array<?xf32>>>`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWVmT2jgQ_jXmRQVlyRc88EBCqJqqTWVz7L5Ssi2DNr5Klskkv35b8m1sBpLZYwYMOvvrr1utlvCz8Pv28PQJ5SILy4CFKBJZguSZF-iQCSloioIsZIa1M8y9Ye4M16xfuliUvshKyVOGoiwzyJoa5C26GGRTtSMkGI1VHY3jLKCS-jFDajZrh6DvWn2FVv3Rjvn0bvdb0-nSdGpbL9C0R5__eF-L2z-9hwrc9mBpiEa4pqBXT6W7zABlTQCozhAvinJW5QT6gQ5USsH9UrICGd6biItVyCJaxvIrB_kKoUEIxYEdrrkd28KGotJU9VRdEpo3veqWOL4kK0nFickjzJ1ronSH57V7dO1lmX5Ns2_pMuZp-bw8paUa6O2V_IabqEyDlXogwzaPH3-vjGIQB6Y1FZ0GwQqBYJFhva0LfvbcFc6M5l2JCkG_q6J1eFbvyCKG9a59Nar7oFBwTGnSQqYVNm1bLR33pA8E9kW0089PfGkm3vT1RkqKqfvoObWzTYqb12-gW3_eoJqYCi7PqyBLC0lTiVTlDgE-9jzorRS1WiQg-xjypGhZqAgJqtHaNndSokZW0kD1peaIrOuKtqXrMsBEOmbU1Mc4o2GD6CeAtPLnOvVld1z0pDbqv6Yzjmx2fMhq9qzVrNZkx5tGewDrL1gywFNa4RmtnJe1umn_f0cnd4CQhqFo_OZVgA299d6RfYBeC7A405wdizOPZOU1xDJrJtX3Znk7vXr1vSV5lpFr9nArT4sDkFdLa93iYgnQo7mswr2n4-OAv3sV16hnhI_QzcaKeSoDfOQWueHDMKrff9NFLr9gqRyK5ng8P-42gR9MZEefy-Jl089gNY-Tq2028uOhn_Tm6Bt_wsIA41oTcm1dbFbmxfgR-87athF7y6yP7pd6cpkJVusAyVW9Nf9SvL8V63EX4lTwYEVxzCJFjEqBPgbxirwjB89W_-Sd61obyzTNjsBrTMGZCs0NeQuMTziGPefE9qQTY7sFCD0vTMg-J-tXpGVkyYkp0yxlUxw6UxDX9yYHNxOEoeCBVHdKKh6H_heNM6k2X1-J86bEjRdSP7Tcr0kXiwPIPnX6XR-gdp_LZM-TeuXa9baAnXYHVs7U1LpNrd2vnQjnt03bLfRhk9pnmmmvqLpqHI2tudDlge5dkG5SvH90vUNMnVx8c3GZmLNpEN502R35uYTjtbIggtFUGoSn3fNBWPfmQNMbISFoJgECartMRxdmU50bic3V3kd6EX1wYCG4WkbqxPwKG-AAwGPHGli21iOpODiY_ZDT9nsXpc-rs2WXY9YAJsd2wTzMgLssr49dpD5FV2iqrRkEFZLl7ZRlmomQCRYiLpk4wqiivUKwmvGk7-DzhI0P6RU6d2TciMngXJm9uy8Yr8ap2ce-FfX33UqWN5JV5iGVrJbRiCPuo3KjKk5OuvYtx6nyI0hRyli2-HZ3uZy3HyZZlT4JEydYj03C1ewY4AGVdXsn_Bvq3NN4x8XAAF8kGEtY0oa2FsJD0UcwWYq0KfdI6G66csEv2qbTW-7_YLecuCwUZSp5wvoKQe0pznwao5inX7M0qFSazWBRG0N65I6zoxuXZAVgSk_HmCtPJCuDHKSUq2hjGs5blR-Dbms8zpOvsq-Bzc-0OF5oXLKrHGBuXEtA92XqmhaKMMsyyyVaLgue5DGPvi95qlQoeFAgDZ0LNWzm3haQWBtkPpvNH3asTWSG-t61umx-X-r76Z1yyU_a1EkMc-q2D_mHnIFrhdpnVE2myrDwDOeN4eyBrBKgnFIInHGWnhRv2kAg96BuI2P4PGdgcnIoftCvwAdPVRNIX-Yi-4sFsi7CB0-DuAxZV7Hbf1HPGtnqDPKVpl6tKmwL5li3kLqoj1-h5VlaFU9Mdhr1oAOl2uI_gXmlXEgL7OOvK54-waPFoPFbpgtPp9MAX2lA_Bc0-C_xE9eDp4s7BchAAc92HTuCdZGGn_Vpm6w7Zf5Uq-RhpFFMlWcdYu5rOBBC-A-m8H0BIoooEwls1ofP9QJ5atfHKshzTbm6ESTmjZX2JFFEeVzo_cM1ByyrYAB1KEtV0yvfuLvmasG22HVNvLbWtrcIt1a4sTZ0IbmM2RaWWaW-s0fXCqKcFgWCNxzqCvCCjvZFKeLtWcq80D8jHeB1gpyq9CEHSzrrj5jWPwEpLh3P9MjivA1DFgFe1_Y2pmfbru9vCMbEdLCPPcfZLGLqs7hQMCF0puxb_SsShFFnv-BbYhJirjE2CTZtd-XSwKHMd21g1VuzACI9S4D3lf4VKBOnhdhqSH4J-ZdtxryQRdcIiip_16yo-Wkpz5nYXmrXWWjZW439b2SZrTk">