<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119664>119664</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] --fold-memref-alias-ops crashes in FoldMemRefAliasOps.cpp
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: 953838dceaf
system: `Ubuntu 18.04.6 LTS`
reproduce with: `mlir-opt --fold-memref-alias-ops crashes a.mlir`
a.mlir:
```
#map = affine_map<() -> (1)>
#map1 = affine_map<() -> (31)>
#map2 = affine_map<(d0)[s0] -> (d0 * s0)>
#map3 = affine_map<() -> (19)>
#map4 = affine_map<(d0)[s0] -> (d0 mod s0)>
#map5 = affine_map<(d0)[s0] -> (d0 floordiv s0)>
#map6 = affine_map<() -> ()>
module {
llvm.func @malloc(i64) -> !llvm.ptr
func.func @func1(%arg0: memref<1x31x19xi32, strided<[?, ?, ?], offset: ?>>, %arg1: memref<1x31x19xi32, strided<[?, ?, ?], offset: ?>>) -> memref<1x31x19xf32> {
%30 = llvm.mlir.constant(1 : index) : i64
%31 = llvm.mlir.constant(31 : index) : i64
%32 = llvm.mlir.constant(19 : index) : i64
%33 = llvm.mlir.constant(1 : index) : i64
%34 = llvm.mlir.constant(589 : index) : i64
%35 = llvm.mlir.constant(589 : index) : i64
%36 = llvm.mlir.zero : !llvm.ptr
%37 = llvm.getelementptr %36[%35] : (!llvm.ptr, i64) -> !llvm.ptr, f32
%38 = llvm.ptrtoint %37 : !llvm.ptr to i64
%39 = llvm.mlir.constant(64 : index) : i64
%40 = llvm.add %38, %39 : i64
%41 = llvm.call @malloc(%40) : (i64) -> !llvm.ptr
%42 = llvm.ptrtoint %41 : !llvm.ptr to i64
%43 = llvm.mlir.constant(1 : index) : i64
%44 = llvm.sub %39, %43 : i64
%45 = llvm.add %42, %44 : i64
%46 = llvm.urem %45, %39 : i64
%47 = llvm.sub %45, %46 : i64
%48 = llvm.inttoptr %47 : i64 to !llvm.ptr
%49 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%50 = llvm.insertvalue %41, %49[0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%51 = llvm.insertvalue %48, %50[1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%52 = llvm.mlir.constant(0 : index) : i64
%53 = llvm.insertvalue %52, %51[2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%54 = llvm.insertvalue %30, %53[3, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%55 = llvm.insertvalue %31, %54[3, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%56 = llvm.insertvalue %32, %55[3, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%57 = llvm.insertvalue %34, %56[4, 0] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%58 = llvm.insertvalue %32, %57[4, 1] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%59 = llvm.insertvalue %33, %58[4, 2] : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)>
%60 = builtin.unrealized_conversion_cast %59 : !llvm.struct<(ptr, ptr, i64, array<3 x i64>, array<3 x i64>)> to memref<1x31x19xf32>
%61 = affine.apply #map()
%62 = affine.apply #map1()
%63 = affine.apply #map2(%61)[%62]
%64 = affine.apply #map3()
%65 = affine.apply #map2(%63)[%64]
%alloc = memref.alloc() : memref<1x31x19xf32>
affine.for %arg2 = 0 to %65 {
%66 = affine.apply #map4(%arg2)[%64]
}
affine.for %arg2 = max #map6() to min #map6() {
affine.for %arg3 = 0 to 31 {
affine.for %arg4 = 0 to 19 {
%66 = affine.load %alloc[%arg2, %arg3, %arg4] : memref<1x31x19xf32>
affine.store %66, %60[%arg2, %arg3, %arg4] : memref<1x31x19xf32>
}
}
}
memref.dealloc %alloc : memref<1x31x19xf32>
return %60 : memref<1x31x19xf32>
}
}
```
stack trace:
```
mlir-opt: /data/szy/MLIR/llvm-release/llvm-project/mlir/lib/Dialect/Affine/IR/AffineOps.cpp:2201: auto foldLoopBounds(AffineForOp)::(anonymous class)::operator()(bool) const: Assertion `boundMap.getNumResults() >= 1 && "bound maps should have at least one result"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt a.mlir --fold-memref-alias-ops
#0 0x0000556f68eb8158 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1136158)
#1 0x0000556f68eb5c6e llvm::sys::RunSignalHandlers() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1133c6e)
#2 0x0000556f68eb8aed SignalHandler(int) Signals.cpp:0:0
#3 0x00007fac476ae420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007fac46ceb00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007fac46cca859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007fac46cca729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007fac46cca729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007fac46cdbfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x0000556f68f849a3 foldLoopBounds(mlir::affine::AffineForOp)::$_0::operator()(bool) const AffineOps.cpp:0:0
#10 0x0000556f68f58061 mlir::affine::AffineForOp::fold(mlir::affine::AffineForOpGenericAdaptor<llvm::ArrayRef<mlir::Attribute>>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11d6061)
#11 0x0000556f68f94ab2 llvm::LogicalResult mlir::Op<mlir::affine::AffineForOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::AttrSizedOperandSegments, mlir::OpTrait::SingleBlock, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::affine::AffineYieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::BytecodeOpInterface::Trait, mlir::OpTrait::AutomaticAllocationScope, mlir::ConditionallySpeculatable::Trait, mlir::OpTrait::HasRecursiveMemoryEffects, mlir::LoopLikeOpInterface::Trait, mlir::RegionBranchOpInterface::Trait>::foldHook<mlir::affine::AffineForOp>(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1212ab2)
#12 0x0000556f68f92620 mlir::RegisteredOperationName::Model<mlir::affine::AffineForOp>::foldHook(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1210620)
#13 0x0000556f6c49eadd mlir::Operation::fold(llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x471cadd)
#14 0x0000556f6c49ee83 mlir::Operation::fold(llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x471ce83)
#15 0x0000556f6c373314 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#16 0x0000556f6c37062f mlir::applyPatternsAndFoldGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x45ee62f)
#17 0x0000556f6a7aa13b (anonymous namespace)::FoldMemRefAliasOpsPass::runOnOperation() FoldMemRefAliasOps.cpp:0:0
#18 0x0000556f6c2f92b6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x45772b6)
#19 0x0000556f6c2f9be0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4577be0)
#20 0x0000556f6c2fc1b2 mlir::PassManager::run(mlir::Operation*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x457a1b2)
#21 0x0000556f6c2f4a5a performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#22 0x0000556f6c2f46ad llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#23 0x0000556f6c3a0b25 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x461eb25)
#24 0x0000556f6c2ee695 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456c695)
#25 0x0000556f6c2ee93f mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456c93f)
#26 0x0000556f6c2eec6e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456cc6e)
#27 0x0000556f68e98c47 main (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1116c47)
#28 0x00007fac46ccc083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#29 0x0000556f68e987be _start (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11167be)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcW1lz2z6S_zT0C8oqEuD54Af50PxTFY9ddna2dl9UIAnK2IAAFwD9t_LppwCQ4qHLmcSeo8qJRbKPXx9odIMWVopuOCFXXnTtRbcXuNUvQl7d1ZRt8Ru5yEW5vdpQDV6JVFRwDy1BFqEUpWVBcOX5S89fqq3SpDaPvNj_r7zlugVBuvDDRQy-fnv2Yt_RSdJIUbYFAX9S_dLR14zKS9FocHlZCVZe1qSWpLrEjGJ1KRoFConVC1EALwzpTpjnL7s7Ro6_NA_sj72AqMYN8NAtwFVFOVnXuPHQjQdTD2bg0kN3wINp4MHMQ3c7huAsB5qzwIMspW_Iomvle9Htjrn0gQeXQPkzGeg80GzGEv6c2lqU-2qjn5NRMSFkSV_3BcVn8e8YalG2jAAvufb8JQCMvdaLquUF8EK_xoyJwoMpjcMRc2CJGi0tBzDUOxbzO7DyIyw3vkkFlz8eugneUPAWZG8UQQ_eAKUlLUlpsEXXHlqZe6Nf0a35JKpKEW0zCq0MYnRnCaz44GPEd4buCa4QtA7oXAUMCuRbV1uPmNxfFIIrjbk2OQKMYMpL8maE2os4HPEGx3nRWWZ4QnF2jhn9AurwOG-UntUc_RJ3POP-QaSwZLOsNLTJQLshmjBSE64bLZ0gkxQGjllTTkA6lgFvwLGkhzfAZEKnJR20NFpqQbneaZ_AAlrMjMmOuyIOz3giHOUdLksHpVsZ6BD9KNcKzNhkeVt5vZpzy91Kg4etDoOzVoe_kHrhKPVUmztbO6Ot3Dl9tOekEPb04QH6UXq1ktROximvJnuAdvRW2Jx-lC2Uay26dAyTntb467DL59nS8pJUE3crLdtCu1rfJeo4lW8AlhJvPXSDwJu95Wrpobvd5tDpjvwxbEWkfsWsJS7ivblmi_KH1fQhkMAIU3AcU78QIt-LroNPxHSiJvtncjtCR-2J-pyNAi-6hp9oT3gUE_J7TMiLrpG5-MzgR8eB9QkZhT2wz8yA-DiwXRSjHthnhjI5DizsgZlNMfzsUKbv8FjSA_vMUGbHgaEeWNoD-8RQxq4a5y1lmvJFyyXBjP4g5boQvJsK1wVWemfFx6HS4libPMI7HuIWuGnYFrgxpZtDBkp4jDLYI0XHSKFraOLATU1WrOn2B9bwGCva0xKd04IGLeFEi-2tLLdz0GJotlxITvutU1kJ2c06zjW-6w8ssN0Y4qDGx6CGu3EMHgab3J5WWuO3TlTc4Tdhp3x2cwxoTxIa4JvRZkR6gDgciINsRnzAWCZwuXO5s88Z28-JaPgY9uv0tPsnwJQWkji1naDY_31qBvePPw-fuvQpSZdRQ2qdky6JbiXflYzT5E5h97_7GZ_fKI2L70BLXBAPHSLoT41ctVmVWGMPrtSPrQdX91-_PHlwZSrQpSSMYEX6y0aK_yOF9uDKnhzBFaO5B1e3FDN3e2lj4MGVFeGuHhq1KJrGQ0sIfXsIgFstQCVY-VWI5lq0vFQeTB31SsiHxtarpfmBKeaCb2vRKlAwrNTukWiIxFrIrgrANBeCmcy2bZxRs1RmH6CCAy_2c6PmHjdmuvxrWz8R1TKtdiv8zmRoADwYezAGHoSWHtS4UUC9iJaV4AW_EoA1MB7RQHACpBXiQejBBFSYMlIuPH_5-PVu-XwHVJvXVAMM8nYDJGmE1GaNvGjdKGvayoOrDdUvbb4oRN35eN_VVKmWKA-uAOYloLxgbUmAfiHuaA_kuPhuQ210P9vIl23duMD7C5erj1JsJK4BlpvWTNbqH4682clK85vyLg_s8aM7TDx2Cunmb-QD_833fT-K4ipOSZ4GUWr3bBdStVXuw6OkXFtTvtkchulAJPGfa6G0JLi20boB1LTsmTsT-G0GefDafwsCFAdRv8t4EAUzA6IiJocMeGr5M91wzP7AvGRE7hLtQzCiIiYDRjh3MiYlmKDxYNr5zN3u16dv_zkpqJOSVLgIkxiTEPpgvZbE1te11J0trgK8pfE6Di8Z5e3b5Ya37kGjXyTB5UKJhe-whiH0B6ThWEdckNz3cyAxVaZ-72zeMJoXl1-LL9B_213ChRkdVsri9-BqsTBXW1WSxiyVltM3d-PVQuGtubSiF4WHlpGpQ0EHI5rCKHAaZQDnwtr4Phi6dH6wXFZDajQknYZ4riGBGdgQvXaI14pszKJc9z3ru5RSro3lZj-t1abATm_km_qYdoqTQ4rXnK0N17oUNbaNwS_oyxKTNSjsFKZThWVelfE7MqUwORLbHEGoKuMhR7JJNldpmGG0v3d0LzI8tHRdgPt8eEcJ1_57dhAw37361WHKwLSQVVHqxwE4D8LeMODfA_kvhBNJi2WJGwMS3Qx1Zmk6_CfbHAxillpLmreaDAfvA8dzjRn7Gym0kF_qhk0YH5qVYKXbES1j_GGlqox91-o7N07LaZWFOIcj0F_FhhaYOWRgDHiC_2jIbyY83ySmurvg5IlsqOAnaP6GJcUlLXadwlHK_yVSPLdFQZQS8hRhL_LBJJ5N3KOkJpjPZkzsaJ9dhTjF8kz5hpFrJorv76MyiUALqr8RWVOOXZKdcuv_UMJK4_w7d9dm0gkvN1_4qzF5D_f1VpNClMRQaCKrrk9FS8d9wi2tFjXWtFiarhqb5u65EA2ZstwIXlLzDDO2fW5I0TKscc7eqeQPrJ5I0UpFX8k9qYXc3lUVKeZGmAL0lX5_lxEu264l5sXLEfreqaY8_CHE93eluFmt6dgMU9FsXi-n6_98xfgXLBcwgDiHQ7mAs3IBY-jPnKw0kd2iMX74K647r92LkrD3-nQaiP9oD_tx35EZD6Oxh4swI7gswSHrxzvZv7cPwiQocFkOPgjnPiAp-gkf_MsYRVI0GBVNjEIJMnZOpmuOa6IaO211rdJfJCHl9hFrTSR_In9KqsmtpK-ks6aRwux5_y3kd0aV7kac41wH-qh4BsuPYTXuo5qG9aLUkpfGe1Y-ZdvJsux383hadldS_CA9iE7OM9HdEcGc2iHvqG8Er-jGELiucPlRkYoIiWE1RCoZuwQnGAcoPxcp45d7Uj-Ramkm7odGPWLVjaKy5Q98VLZskPYZDgQnnQQHVhnM45G7SqIxZbv9Uzw0RumuXe10T8JkUbnCebykjioHx2yrqLrHHG-IHIJxA1pu__Cq_MDhP4ySBObxEJls7o-c-D_tj0faEGbPyCa7iiHdmRn_dgeNmYyqL1xpaQ-CzPizPEUwqnU99kcsCddfeCX6lfRxqyNJcjJsUNCfxaAIcjiD3jvjYAZOfflRmHEwaltgMMMc4giDhshKyHpZGDDqzAmX0mV3wPSCJSnXjZ7Og8-ilQW530gP3R0pbsaqG8E1edN7Ab9nVD40-h5T7sreSEYGRk_3iwSEc-NiXB4d4Yb7Vcut5Wt3xH2MwYPpzvaW0_9vyZ7trkO_bqvKLYAdfUkq3DK9Lgkjpvk4xnNgWp5HINs1hQVmLMfF93XFJzv7yEnvjeWH2zOg6w7oXYMst_vJcSoBJucmZt5ggm8-15ITkTmTntOGFmE_h9HIcNUwqpe8fHStTI_1n5J0_4ZL4iTFpNPXkvKNmQyO3f6YUhwHJIfRUIqnvT0kJM6iw-vgP20Vf8xOFxdxNnJvNHdvhqqj7u0ak-IFuxZk-bMpc843H2ZzhoZ-HcZzm4uY_Bab_0nG7d4lGeOS6bukLC3CBHQvDT7geDiIizAZtM9eJhSFnyKwXjOaF2ulsdTrn3l_Uai2f1HkPtqHVo59k4FCaP7vdGdzy5OcAKf1o2xP8t7z47f1F-UVKjOU4QtyFSQIZWkSZPHFyxWO_DwkISJp5QdhitMAJwXEYeqnfpnB6IJeQR-GAQygn_gxihdJnmd-kGdxFsIsDCsv9EmNKVvYvzYScnNh3zVfBUEWx-EFwzlhyn61BUL3wh960e2FvLJ25e1GeaFvRn81SNBUM_t1GMsQ3Z79XgrlR6bRi1ayq3_8bXlnxOsV_HsAAAD__8FtOLI">