<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54405>54405</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR] AffineScalar Replacement fails on affine.parallel
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir:affine
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wsmoses
</td>
</tr>
</table>
<pre>
```mlir
module {
func @bpnn_train_cuda(%27 : memref<16xf32>, %a : f32, %c : i1) {
affine.parallel (%arg4) = (0) to (16) {
affine.store %a, %27[%arg4] : memref<16xf32>
scf.if %c {
%40 = affine.load %27[%arg4] : memref<16xf32>
%44 = arith.addf %40, %40 : f32
affine.store %44, %27[%arg4] : memref<16xf32>
}
}
return
}
}
```
yields
```
wmoses@beast:~/git/Polygeist/proj/rodinia/cuda/backprop ((HEAD detached at origin/master)) $ ~/git/Polygeist/build/bin/polygeist-opt aff2.mlir -affine-scalrep
polygeist-opt: /home/wmoses/git/Polygeist/llvm-project/mlir/lib/Analysis/Presburger/IntegerRelation.cpp:1010: void mlir::presburger::IntegerRelation::mergeLocalIds(mlir::presburger::IntegerRelation&): Assertion `PresburgerSpace::isEqual(other) && "Spaces should match."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/wmoses/git/Polygeist/build/bin/polygeist-opt aff2.mlir -affine-scalrep
#0 0x0000562331da2e60 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (.localalias.0) /home/wmoses/git/Polygeist/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:0
#1 0x0000562331da2f17 PrintStackTraceSignalHandler(void*) /home/wmoses/git/Polygeist/llvm-project/llvm/lib/Support/Unix/Signals.inc:632:0
#2 0x0000562331da0bc6 llvm::sys::RunSignalHandlers() (.localalias.3) /home/wmoses/git/Polygeist/llvm-project/llvm/lib/Support/Signals.cpp:97:0
#3 0x0000562331da27e1 SignalHandler(int) /home/wmoses/git/Polygeist/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:0
#4 0x00007fa02d332980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#5 0x00007fa02c404e87 raise /build/glibc-uZu3wS/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
#6 0x00007fa02c4067f1 abort /build/glibc-uZu3wS/glibc-2.27/stdlib/abort.c:81:0
#7 0x00007fa02c3f63fa __assert_fail_base /build/glibc-uZu3wS/glibc-2.27/assert/assert.c:89:0
#8 0x00007fa02c3f6472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
#9 0x000056233151dd4d mlir::presburger::IntegerRelation::mergeLocalIds(mlir::presburger::IntegerRelation&) /home/wmoses/git/Polygeist/llvm-project/mlir/lib/Analysis/Presburger/IntegerRelation.cpp:1010:0
#10 0x00005623314e4219 mlir::MemRefAccess::getAccessRelation(mlir::FlatAffineRelation&) const (.localalias.2) /home/wmoses/git/Polygeist/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:490:0
#11 0x00005623314e46b4 mlir::checkMemrefAccessDependence(mlir::MemRefAccess const&, mlir::MemRefAccess const&, unsigned int, mlir::FlatAffineValueConstraints*, llvm::SmallVector<mlir::DependenceComponent, 2u>*, bool) (.localalias.0) /home/wmoses/git/Polygeist/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:619:0
#12 0x0000562330bd3d43 bool hasNoInterveningEffect<mlir::MemoryEffects::Write, mlir::AffineReadOpInterface>(mlir::Operation*, mlir::AffineReadOpInterface)::'lambda'(mlir::Operation*)::operator()(mlir::Operation*) const /home/wmoses/git/Polygeist/llvm-project/mlir/lib/Dialect/Affine/Utils/Utils.cpp:721:0
#13 0x0000562330bd69e7 std::_Function_handler<void (mlir::Operation*), bool hasNoInterveningEffect<mlir::MemoryEffects::Write, mlir::AffineReadOpInterface>(mlir::Operation*, mlir::AffineReadOpInterface)::'lambda'(mlir::Operation*)>::_M_invoke(std::_Any_data const&, mlir::Operation*&&) /usr/include/c++/7/bits/std_function.h:318:0
#14 0x0000562330bdf2c1 std::fu
```
whereas the following succeeds.
```mlir
module {
func @bpnn_train_cuda(%arg0: memref<16xf32>, %arg1: f32, %arg2: i1) {
affine.for %arg3 = 0 to 16 {
affine.store %arg1, %arg0[%arg3] : memref<16xf32>
scf.if %arg2 {
%0 = arith.addf %arg1, %arg1 : f32
affine.store %0, %arg0[%arg3] : memref<16xf32>
}
}
return
}
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWFlv3DYQ_jXyC2FBorTS7sM-bHwgAZLWsJsU6MuCEqldNpSokpKPf98ZUntIPuDGbgrUMFY85_hmOENOofnDMojOg2gVZJH_r5U0fqjWvFeCBPkH3yek6puSBGlUtE2z7gyTzbrsOQvoPKAzmpMgWZFa1EZUQXIWZ_dVQoPkIqBnBOaZm8Yh3y9dX8YBXRzzwD9WVbIRYcsMU0oo4hkws0nd4uQcRyJsdxqbcfYEkT0Z22kjnAQDZ5oHsw87grPz58Qe0SLEllUoq0HyKSv8g5k0ctINjJVm_Mf5eYKpJ2hktw0Z55XnMiji2HlMH22eKp-mb9I-yM-Ph0ZdI7reNLv-furQ2PnW0HW_D1Iobo9HJsvuam2FRW8TzHYgZZCDK11uZAe_V1o9bIS02G6N_hM-RnPZSLDxpffJy4KV32Gu9e4z_3ixOidcdKzcCk5YR7SRG9nAwhroCwMu5LyIAuTPcCp6qTh-3bZ2N3Oq2w7xpiEeHnLqoT-1JVNGtF6b0WKEHAhsdS3gMyj6FEOlbutT1E-U2HVnE0ZlAb-rhqkHK3HjlRG26M0Glbj81HQCWtdCsU7qJizbFvjFURwh21stOXF0ANBk1R52uv5ksx-sBSz4rEGdT2AxOn_9dooHE9murBUGhwjY9yDuTctK4bdKe_FXzxSQ193WWYO47Rl8qFtnid3qXoH4rCu3IQwHEHMqJpXgoUf56vPF6uaC2L6oJZiEFP0GvLPVpsNIse261iI3eunR3vZFWOp6APox3tLa3lmGsIYT2ZSq54KAeKQ0zG4JehiEwVIM7G_Aub4T3teIuB-KYGpxZfTGsBqO8aavRdPZVzvAGzwOGCQRie4j-JtlNElizqjIIuJ0dZjbB-sbV0Y2nZP-N1QHjHBYZNjdWtvOCFY7g5wBEJ03zxxCHLBkSjIbRn7sn3v1Dnvn1Td9i-aC1tdG3uOA3ICj2xDQB2Fm2Qx-o4OG8VTDKs7JRB1P4iPYUKFjzfEMBHT1M-TNMJgey0sn8kZFmT1lkeu-GYltXRB7BHryzkrspPdBY5GPhU-mYOciJlN0997x7yKbRhPh0kG4vGIR5UlCF_OIrNcQazAFriEEOAgH6vfzbJ2lp0o2_f3ppun9RNttwc95aDW684foPkYqGMP2bGbHbMo0SsU8J3AVsphl9-d1A8TK0_6PPrm72XdpCLmXXlqnBzTCEHsPlosW4em9mjBw66QByTCtIenQ-X48VjibSJLlVUxYoZ2mr5Ok4x4Nt8sxmU-Y5CMmSZUlFQNUmYvnawy-64K9Xne_b9_wLBdjlvMpyzSnr7BdiVbLnNWSCLaMrLYYee4s5jz92WnwP8r4u0sXhMpxNkhFSuPFEQhfRH0tqlUJmXYIQhvR-e5BkyOtL2Fs5RLPRNFSN7abRir6LhCcS6b8sOc8RsWP7QYGHNLFBIZ4CkNWpEcwwPWw_P7FXYi98ueiFQ0XjcuLT8PlVR7S4yuW9A0GAcF9Kj3ecgD1G1O9OMNN-NCCOwNmrLOjXHFTw-voG6ChYe_ZgcRB3jNdt7oRngft3VvMESm0Vu-Zwt9qoyxejG00SpNRwROeJk5qsmX2F40eb25FI5vNRVUhs2MAAHZtHvzE4Mm_wwNKjJHeuS7jv7aOXuXuohcjI__aCjO49uo1291t110xc8XqAt8h-QsEh9XaDWrjc_xL6_dn6_1t9LWTyu6-g11yGo_tkkzski1ETiCNeGHXkMNKFHa9Ha4DyZl7cLwIweCP_zvLXgygfFnL5lZ_x-hxQGrVPKw569gzkWNMLDtkkN6iEYenCLRKSHju_zJ3zwSME5jX19VginAL5JJ4PrZjOrFjRcv4YMeqf-HhfgevM3iRu2dQpZXSd2AreHJBlBPchk--6H-4qAQvpuiZAsVQVTIbdNGjuhKM4J37qcrSUBOptBkWJq66EuHjMM6eqUIdykfIas8j2ldRktdVUQ71I5TwcQkJJqInij1jrvHTBZ-pqNEb5ByVdt5S5znhy4QvkgU76WSnxBIE-fL50zVK4Y_YDSYeQ65Fq-CE4cPYveYt0c20BHjSG7X88ff7LE2j2cl2WRSCpZBMEkoTNs_ofFYtxIJzGhdlSRfFiWKFUHbpMKPDcWRDhKQg-Ylc0ojSKIkz_NI8LCNB5yXlcFkVLGYReLKoQYsQZQm12ZyYpROr6DdYzVIQnO1hEu7BeBNw6CB91ndbbZZ31sX1E6fB0on_N6FAe-w">