def func(:A0: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64, :A1: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64, :A2: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64) -> BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64:
    :i0_size: ExtentFType(start=int64, end=int64) = dimension(:A0, 0)
    :i1_size: ExtentFType(start=int64, end=int64) = dimension(:A0, 1)
    :i2_size: ExtentFType(start=int64, end=int64) = dimension(:A1, 1)
    :A0_slot: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64 = unpack(:A0)
    :A1_slot: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64 = unpack(:A1)
    :A2_slot: BufferizedNDArray_i64_shape_i64_i64_strides_i64_i64 = unpack(:A2)
    declare(:A2_slot, 0, add, [':i0_size', ':i2_size'])
    loop(:i0, :i0_size):
        loop(:i1, :i1_size):
            loop(:i2, :i2_size):
                increment(update(:A2_slot, [':i0', ':i2'], add), mul(unwrap(read(:A0_slot, [':i0', ':i1'])), unwrap(read(:A1_slot, [':i1', ':i2']))))
    freeze(:A2_slot, add)
    repack(:A0_slot, :A0)
    repack(:A1_slot, :A1)
    repack(:A2_slot, :A2)
    return :A2
