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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] Crash when using -lower-affine
        </td>
    </tr>

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

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

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

<pre>
    I am trying to lower mlir, but the compiler crashes. 
I think this bug is caused by specific optimization sequences ```-affine-loop-coalescing "-affine-data-copy-generate=generate-dma=false fast-mem-space=0 skip-non-unit-stride-loops" -affine-parallelize```.

The execution crashes with following backtrace:
```
mlir-opt: /home/data/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp:49: mlir::Value buildMinMaxReductionSeq(mlir::Location, mlir::arith::CmpIPredicate, mlir::ValueRange, mlir::OpBuilder&): Assertion `!values.empty() && "empty min/max chain"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./mlir-opt /home/ty/affine_test.mlir -lower-affine
 #0 0x00005627c14b26ea llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x1a76ea)
 #1 0x00005627c14afcfc SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f79a88a7980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007f79a799fe87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007f79a79a17f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007f79a79913fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007f79a7991472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x00005627c244f0e0 lowerAffineMapMin(mlir::OpBuilder&, mlir::Location, mlir::AffineMap, mlir::ValueRange) AffineToStandard.cpp:0:0
 #8 0x00005627c244f38d lowerAffineMapMax(mlir::OpBuilder&, mlir::Location, mlir::AffineMap, mlir::ValueRange) AffineToStandard.cpp:0:0
 #9 0x00005627c244fcf8 (anonymous namespace)::AffineParallelLowering::matchAndRewrite(mlir::AffineParallelOp, mlir::PatternRewriter&) const AffineToStandard.cpp:0:0
#10 0x00005627c244d516 mlir::detail::OpOrInterfaceRewritePatternBase<mlir::AffineParallelOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (./mlir-opt+0x1142516)
#11 0x00005627c2efb2cd mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) (./mlir-opt+0x1bf02cd)
#12 0x00005627c2bb3d17 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) DialectConversion.cpp:0:0
#13 0x00005627c2bb470f (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) DialectConversion.cpp:0:0
#14 0x00005627c2bb8270 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) (./mlir-opt+0x18ad270)
#15 0x00005627c2457f7d (anonymous namespace)::LowerAffinePass::runOnOperation() AffineToStandard.cpp:0:0
#16 0x00005627c2b3e319 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x1833319)
#17 0x00005627c2b3f0a9 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.489) Pass.cpp:0:0
#18 0x00005627c2b3f7dd mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x18347dd)
#19 0x00005627c2b3158b performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) (.constprop.273) MlirOptMain.cpp:0:0
#20 0x00005627c2b31c88 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#21 0x00005627c2b3208f mlir::LogicalResult llvm::function_ref<mlir::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>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#22 0x00005627c2bf33b0 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (./mlir-opt+0x18e83b0)
#23 0x00005627c2b30446 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) (./mlir-opt+0x1825446)
#24 0x00005627c2b324cb mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (./mlir-opt+0x18274cb)
#25 0x00005627c147f360 main (./mlir-opt+0x174360)
#26 0x00007f79a7982c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#27 0x00005627c1491dea _start (./mlir-opt+0x186dea)
Aborted (core dumped)
```
[Following IR](https://github.com/llvm/llvm-project/files/10392059/test.mlir.txt) is a function in [release/15.x/mlir/test/Dialect/Tosa/ops.mlir](https://github.com/llvm/llvm-project/blob/release/15.x/mlir/test/Dialect/Tosa/ops.mlir), you can use it to reproduce this bug:
```
func.func @test_bitwise_xor(%arg0: tensor<13x21x1xi32>, %arg1: tensor<13x21x3xi32>) -> tensor<13x21x3xi32> {
  %0 = "tosa.bitwise_xor"(%arg0, %arg1) : (tensor<13x21x1xi32>, tensor<13x21x3xi32>) -> tensor<13x21x3xi32>
  return %0 : tensor<13x21x3xi32>
}
```
Steps to reproduce :
```
mlir-opt  test.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg))" -o output.mlir
mlir-opt  output.mlir -func-bufferize  -linalg-bufferize -convert-linalg-to-affine-loops -affine-loop-coalescing -affine-data-copy-generate="generate-dma=false fast-mem-space=0 skip-non-unit-stride-loops"   -affine-parallelize -lower-affine
```





</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWl9vo7zS_zTujZUIDAlw0Yu03ejtq1at2uq5eG4iY4bEZ43N2mab7Kc_siEp0KTN7tlznpXaBLA985s_nhkzocbwtQS4RLMrNLu5oI3dKH15BVT8DfVmpy9yVewubzGtsNU7LtfYKizUK2hcCa4RucZ5Y7HdAGaqqrkAjZmmZgNmilFwg4LFLbYbLr-6T4PzZo25wYw2Bgqc77CpgfGSM6xqyyv-g1quJDbwrQHJwGA0D9q_CS1LLmEilKonTFEBhjk8iJD9UEEtnTBV7yZrkKCpBRTd7C8nRUVRdFNSYQCX1NhJBdXE1JS5WQE2X3k9kUpOGsntxFjNi5aZQYTgPYuaaioECP4DDsimrZzt58sGMGyBNV6OThX4ldsNLpUQ6tVhzin7arXn3C07EGtvnW4nqrYoWmBElhtVASJLJx8iy1bxS8FzRJbXSn4HbbiSiCwXHuSLerZUFlQXRx5NWV2jaBFnjrSnFC1QtPiLigZw3nBR3HN5T7dPUDTMyfAM3xBJ32beKeZt5Ez_9pRqbjft5XVV3z5qKDhzBhjM8lyeqFyPnj_UV44zaETmiHhoC2NAex06pZDwu1tqplDVdodIikiG_eS5cwD_FFfc6aCiW8w21F0TRBJcUi6g6Gz0ePdl8fwFmyavuMXUu6OGWmnr_HpjbW0cIrJEZLnmdtPkU6Yqp2zxff81qbX6FzCLyJIb04BBZImpLDCXTDQFtJvBGf7Nzh37Z0vZV1w0VX0wvPOe7FGrtaYVpnrdVCCtA4GnnamdH_ScwIm_bL1xZcHYqZuDJ35Pdl7aUsaIRAEOtkEQBLM5SVgY52QOFHtZvN7NzrQXj5pL69G9eLck6dskTV9XylgNtPIav8Zc2lb_aR8jIlfBNqTJHKiz4QFDOMRAS1Yy_MzXkor_o7IQzuppR7J9bDonDfz_gRDpCCVlktE0pUmWBni10mCs0rDSTkvpYWNs0_lqHk8El812spZNO1DbjQZaTI2aBi1gkqXBAG_UZ5NkWQlpgjXlBpwV_BZx3iF4zibXf_3_69_54ZZMSYLI0ngpEFlOnX7MzhTgosiykXzbPvju0cjG3XrSU4aixSwcChwPkdAwKUNMc-UlPQ-JLVpt-FWeSTpiMhuJG0YlxasV9ftv5XbPKqfny96uO1y0LLMhy_mYZZyQM2zHnNXm3mpRECdkYLWk72UkjssAgjZRtRHwntb3Liakp6JOPx4dj3EHQqeDWoZPxNuRK6djtFFajNHS7Z-CNhujZWXq7EWlkrtKNQZLWkGbSn30PrB_7NLlnRONy3U7VlHLNgtZPMGr5i5HpGPY-3UPI_SP1FrQslvYpQvMlDT2DFlcMApGshSzcN5jUIClXOw1_qBvpQVdUgYdyw7AFTWAousPYEdfPpf1oXaVibfc4nw5j4bdMCazcH7YEU7SQdwlUOaEFe9ZLOpauEyt9O_Ge91LNGUjfTGx0lCi6DpXSuAB6Y5AK-K-CvjyIZHvihf_MZH-LlpzRsUTmEbY8-ieSIF5GRBWDGxBBrbI86gIk8920EHbd7CmruDs0Iju9kzTvBWIx53qhlMBzL5NO75vopEEcRKUZ0vQErd7CVh7exg2g3pjoTXdPY2sM5Dvpx3jhtO1VMZyNrDemaLHI9FTkgT90reuxe6Rasup6FfjP2mdF6rXYN8F96VWP0AOo88z2J4v9jVxA9LAM9jTuns__Z7Wt7JUHy5xKvUh7Yt_cMLxU1qQJBg4_mwYbmdJmRSfuc3dWx58pKarUHUjH2QPVnpe-nIY5kP7RRCF2cmQ_6Ieasd1UdD6EBR1I0cBwZh3pjxt5IWkYme4uaeSrqE9NCsl3Hcj_QG8-LCmTqMoCrOBXpORTGVAf16mR16DcOeFoa-6qQeo898u5DBvGHMrjdX-2KP0kcTSn9Bybgc67I9Ug7TOgfdb4uCf_r7Wqp7GqdMedsSOu0g6VmdSFCMUe7mOOsRQLSfNGCfFMC9kI77hLM1xDbpUulqw97Hx_Vlsr-P9t7FFd7bbUA3FqrYaRddvFJ5VoxncrzWKvgyCyJsw93e3T9dKWtjadxHj19Ln0J_2SXkIfWwzkkTu4b3g-qG295Qfj84kGKuQpSmutWJgzFVTlv54-ZEGDxprJP_WwDuN3UOl9G5Pqje_gJI2wq4KEGDh9Joubr631Wff_x21D9Kiy39PsObG6t27bPLiz8qPHs3iLGOEI2OQIC3xKbS_It7_zlinXSY7FPeMCpFT9nVVygHsnp7-GOf7Z5zpZ12-iwUtSUQSQau8oIgkf5LtSSqUXP9T5nsH6fNtOTp-lFGU9ytYUwtuF7J4HEXNP9s5_wjdfzrjeJp7XxtAGuWD0pmMTlxREMf9NxV_YowZxot9iXZ990i1AX2i3PidgeMzLZNZHA_ekpB4nLFilp_Ucle_sg1tK9VRcfRsNZdrd3Q9W8CTQJOY5QOgs-Fr9KSM5gGuKJfHKSRxNB_60-ita0pYmuDVSvCcrYyl2q46ame952Wm2b_gbi_9oKfj3_lGcTyMQckQfxYWQHHL-IQO5kWvk7DIlbbgz45MafBNFOgV08P-GZpdLQ_dttsnNLtBJP3p9k7Jhe_uhEGUkWCWIbI8dFymdusPbNxgivdBCzv9za40CKAG3MrZdPvWsXOLEVl2_oDI8kUZishS1cbT_EWYuVDOPL_MlWTOH3eqwYxK3BjA3LfDNNRaFQ2DQ-sWnWhXOvmn7gOjOHD8Vjm3r9zAauvOdCkiM6rXLilhC9K4I-h1GG1JuA23PCJd9GhnhUdmRYdZGZ64g8uJcYySq-61taMWYBTdYESIVYZOB5BID1WPtduPvuWafoDzF8HtgWmwjZZ7fKdlbRWd3BzV-LOF2gyNdMo4hx4i7rULa2rMpN6f_6MbRIjb9ZbLaaWKRgAi6cGqTh3K0IlVE8ElFWvvMpnviyusGls3Ld0xw94QnjhKk9xnDP4DMO5o9R5NuheD-xGr-k1_g0_9BODD_j8i5Pf8BAAf-xHAscbrOBad-LwoLqMiizJ6AZfhPIniKE2D6GJzWZaQzYuAFSTNozSOQhpEhKSzGYQkCqL5Bb8kAYmCMAxDEszjaEryJGRhnofzaM7SElAcQEW5mLpIMVV6feE71ZezLCPZhaA5CON_8kGIhFfsB92emN1c6EsfXfJmbVAcCG6seaNiuRX-tyL3dz6o4mvf5n7dgIsb3hR9dVw0Wlz-elPdo_13AAAA__8E9LAl">