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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]-affine-super-vectorize="virtual-vector-size=128 test-fastest-varying=0 vectorize-reductions=true" triggers Assertion Failure `(isTopLevelValue(val) || isAffineInductionVar(val)) && "non-terminal symbol / loop IV expected"'
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    Test on commit: https://github.com/llvm/llvm-project/commit/38fffa630ee80163dc65e759392ad29798905679
steps to reproduce:
```
mlir-opt test.mlir -affine-super-vectorize="virtual-vector-size=128 test-fastest-varying=0 vectorize-reductions=true"
```
test case:
```
module {
 func.func @main(%arg0: tensor<4xi32>, %arg1: tensor<4xi32>, %arg2: tensor<?x?xf32>, %arg3: tensor<?x?xf32>) -> () {
    %c1 = arith.constant 1 : index
    %c0 = arith.constant 0 : index
    %1 = bufferization.to_memref %arg2 : memref<?x?xf32>
    %dim = tensor.dim %arg2, %c0 : tensor<?x?xf32>
    %dim_0 = tensor.dim %arg3, %c0 : tensor<?x?xf32>
    %4 = arith.maxui %dim, %dim_0 : index
    %dim_3 = tensor.dim %arg2, %c0 : tensor<?x?xf32>
    %6 = arith.cmpi eq, %dim_3, %c1 : index
    %7 = scf.if %6 -> (tensor<?x?xf32>) {
      %dim_10 = tensor.dim %arg2, %c1 : tensor<?x?xf32>
      %alloc_11 = memref.alloc(%4, %dim_10) {alignment = 64 : i64} : memref<?x?xf32>
      %dim_12 = memref.dim %1, %c1 : memref<?x?xf32>
      affine.for %arg4 = 0 to %4 {
        affine.for %arg5 = 0 to %dim_12 {
          %20 = affine.load %1[%c0, %arg5] : memref<?x?xf32>
          affine.store %20, %alloc_11[%arg4, %arg5] : memref<?x?xf32>
        }
      }
 %19 = bufferization.to_tensor %alloc_11 : memref<?x?xf32>
      scf.yield %19 : tensor<?x?xf32>
    } else {
      scf.yield %arg2 : tensor<?x?xf32>
    }
    return
  }
}
```
crash trace:
```
mlir-opt: /home/workdir/llvm-project-19/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp:44: void mlir::affine::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(Value): Assertion `(isTopLevelValue(val) || isAffineInductionVar(val)) && "non-terminal symbol / loop IV expected"' 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/workdir/test.mlir "-affine-super-vectorize=virtual-vector-size=128 test-fastest-varying=0 vectorize-reductions=true"
 #0 0x000060678f2be258 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x1068258)
 #1 0x000060678f2bbd7e llvm::sys::RunSignalHandlers() (./mlir-opt+0x1065d7e)
 #2 0x000060678f2bec68 SignalHandler(int) Signals.cpp:0:0
 #3 0x000075aa4bf62520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000075aa4bfb69fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x000075aa4bf62476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x000075aa4bf487f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x000075aa4bf4871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x000075aa4bf59e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x000060679248de2f mlir::affine::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(mlir::Value) (./mlir-opt+0x4237e2f)
#10 0x000060679248e79c mlir::affine::FlatAffineValueConstraints::addBound(mlir::presburger::BoundType, unsigned int, mlir::AffineMap, mlir::ValueRange) (./mlir-opt+0x423879c)
#11 0x000060679248e37e mlir::affine::FlatAffineValueConstraints::addAffineForOpDomain(mlir::affine::AffineForOp) (./mlir-opt+0x423837e)
#12 0x000060679248b186 mlir::affine::getIndexSet(llvm::MutableArrayRef<mlir::Operation*>, mlir::affine::FlatAffineValueConstraints*) (./mlir-opt+0x4235186)
#13 0x000060679248b40a mlir::affine::MemRefAccess::getAccessRelation(mlir::presburger::IntegerRelation&) const (./mlir-opt+0x423540a)
#14 0x000060679248a870 mlir::affine::checkMemrefAccessDependence(mlir::affine::MemRefAccess const&, mlir::affine::MemRefAccess const&, unsigned int, mlir::affine::FlatAffineValueConstraints*, llvm::SmallVector<mlir::affine::DependenceComponent, 2u>*, bool) (./mlir-opt+0x4234870)
#15 0x000060679248a553 mlir::affine::isLoopMemoryParallel(mlir::affine::AffineForOp) (./mlir-opt+0x4234553)
#16 0x000060679248a3fc mlir::affine::isLoopParallel(mlir::affine::AffineForOp, llvm::SmallVectorImpl<mlir::affine::LoopReduction>*) (./mlir-opt+0x42343fc)
#17 0x000060678f3f72e2 void llvm::function_ref<void (mlir::Operation*)>::callback_fn<std::enable_if<!llvm::is_one_of<mlir::affine::AffineForOp, mlir::Operation*, mlir::Region*, mlir::Block*>::value && std::is_same<void, void>::value, void>::type mlir::detail::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::Vectorize::runOnOperation()::$_1, mlir::affine::AffineForOp, void>(mlir::Operation*, (anonymous namespace)::Vectorize::runOnOperation()::$_1&&)::'lambda'(mlir::Operation*)>(long, mlir::Operation*) SuperVectorize.cpp:0:0
#18 0x000060678f3cc5be void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (./mlir-opt+0x11765be)
#19 0x000060678f3cc5be void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (./mlir-opt+0x11765be)
#20 0x000060678f3cc5be void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (./mlir-opt+0x11765be)
#21 0x000060678f3f5c2f (anonymous namespace)::Vectorize::runOnOperation() SuperVectorize.cpp:0:0
#22 0x00006067924f1b1f mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x429bb1f)
#23 0x00006067924f2302 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x429c302)
#24 0x00006067924f7a1e auto void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)::operator()<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&>(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&) const Pass.cpp:0:0
#25 0x00006067924f3b0b mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (./mlir-opt+0x429db0b)
#26 0x00006067924f1c7c mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x429bc7c)
#27 0x00006067924f2302 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x429c302)
#28 0x00006067924f4aae mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x429eaae)
#29 0x00006067924ed5d2 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#30 0x00006067924ed23b 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
#31 0x0000606792596f25 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) (./mlir-opt+0x4340f25)
#32 0x00006067924e8432 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (./mlir-opt+0x4292432)
#33 0x00006067924e86e3 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x42926e3)
#34 0x00006067924e88f2 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x42928f2)
#35 0x000060678f29d477 main (./mlir-opt+0x1047477)
#36 0x000075aa4bf49d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#37 0x000075aa4bf49e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#38 0x000060678f29cfe5 _start (./mlir-opt+0x1046fe5)
Aborted (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tv27iz_zTKCxFDou4PeXCTGidAgwRJ0fNoUNLI4QlF6k9SabKf_oCkbEuKlcTddPvf3QJNbfEy85srhxRNlKIbDnDmxZ-8-OKEdPpeyLMnqgjf-CeFqJ7PvoLSSHBUiqah2guX6F7rVnnh0sMrD682VN93xaIUjYdXjD1uP05bKf4PSu3hVT8Vr8KsrmuShD5A5gdJWJVJDGmchzkmFc7TPMv9OElzz7_w_KXS0CqkBZLQSlF1JRimtstL_P6ffWwYlaei1UiD0gvzhE5JXVMOp6prQZ4-QqmFpH-AF154GD9SqTvC-uZT5ToCnFkCpzVR9vORyGfKN1544aMdhVMJVVdqKrjywgstO_AwPojK0EAlUfOwRdUxQF76yT2juuPlwvyHvMhvCOUezjwcE7nxjeI1cCWkF55HTzTEXvjZw-fI9Qdv9ONRvxeunsxfPRkVvjoqR6de-BlZTPkANUJmehkgL7xARFJ9vygFV5pwjUzjElFewdN4tH9otD8z2pEuuroGSf8gRvkLLdYNNBLqrYR2rmt6CX5IraKNpecEXdjHXklOE6XDMaeICa21f5haeDy1aKCUhjx1tGfRU9oyO6Qi0xd-mFjJ0DpNSxH8Z4BhJ9mcdVM7XZX1gtaO3NZzXnGukUPtZApmtIvHGN4UyhIkjIlyHTh3cq6ysG0uzqKBjIHfYyKMbngDXNtJSeRETiIvvXifx-1FwUO-vSjBWI53UHOJbVEL2avCeY1vMqXzobEiD8yIRzO22KbTLHDcB6ojwQSpHOr4k_Wofe6IvfjdChmAUlpIcIy2tHojORZGvh9l4qUXIzPsHo0E-eGc4hxp4izv4mfc_ZkCq3bk3xNr6QUCpmCq_RGxXXZ7D7n9gwTdSb593nXtv4xXo1ISdY-0JG-vswaLh1f3ogEPr74L-VBROVn3T4Pcwyszw3TQwsOrC0qYqwiW1vjmCyfsWVG1a7vTsit1J0Etyrb1wmUUGW6PglbIEguXXrh0zuO-rxjRbu43wjo4N4uJJJRr1Y-tqkveL9nfiLyWX0E2lBN299wUgnk4s_M8nBtGS6VAmqHISI0zqr6K9gs8AutHZY-EudRw7qXniCrHe8hiN8iOw4mHE-RhzAU_1T1vpCxzo0XEhGjR5TcETy2UGipTT-AU1YQyqBZO8zdfPi_vPiPVFQ3ViKCi25iySEhtgvjoiowq1YFROiK8QpSXrKsA6XtAzgsKUj5YT-jZ32lSPqCqa9qda_gL56k3UmwkaRCRm86kSYMDLXrT26LskKfsCzUP4_la7ScVasjDoY_8J9_3_cRP0qzGBeA4Q1Zb1mvUc-8-N5JybeX_akMDZ_tBknxfC6UlkMaa-RxRrp3Rs6EKPPzJfwr8JMOxqZ32IIIJiKJK4RCI247f0Q0n7H8IrxhItS3CDvOJqxRGfPBU2DLJ0IiicXWH3TVvw8-3fztCYU8ojQmJijpxC4QB08f4U5ask-iUUd49nW545zrKhRKLxMKLXKofgIvGNIskr0vU6nsJpFo_UMaOY5Cb-SMG8RR0lCZoo6ycx4KP0mREOxnTjrK0DhEpTGAeRRmbiSPK6QvKQXE0zaAY0czGNOMc8uQ4mqGZMqKZD3wrx1FWAa5_Wqre090m7YMxEOEwBVzvcJpQ8yc4Ic3LH8f5SXS8GgFqJaiikxvon-2Ir88tmLzQcbvTrlyCOB_wdXyuSDtutoxvCd-8JmOW5uVIxmAqY5jCj8vouldCXrcXot-OHiY2GPka3HCQlgxcPIFbBFkyA3cD-tLsM-5Aj1LwVadJwWApJXm-tRXafv51C9IWdh5e9vvco3WBl68IFAdZMhIonAoU-WSG5xU0t1AvyxKU2onoHm-B9bBfca9LrmEDcj_WIEF2Kz0LN_LJCG40gUuy1J-BW95D-XBlq2AH8gJa4BVwuyS-LaJD1q-SRw6fD54jjHg-WFfvGsLYN1sojBxmSG4v37loWsHB8cad9SRLsBCCveIdUZb6I3XHU3XHcTgjDFVfhGivoBHy-YZIwhiwPxl9URyHIzjJFE5YzyVEB-c4IDMKv2xaNqt0w-V2W7ZtFT0vUViP0186KnPCOsWA3dZhD6XuuKW-dvs52zsSaJQ1zKbgcx8BhDFTF69r7oXnSleuGbjJP2tqN4c42DOiai04rEU9K-1EXXMQhj23sDnU_ImJ8qHPcrbh0YTAdu-xw0rVWpEGerENCfs5mvSiVT-3wzWkAk0oc9-_E_ZgxR6o738Je7iWlako82CMciXkdyKrS22kE9Jt6zPCBX9uRKcQJw2o1hbZeb8K7vcCtt7u-DUfKCfbDfRwtA7mc8NE01v55s3-4cgSl6C3bSkjTVERD6dv-R7OmOCb1_wjR3dm47RD9LJyN7GRjWOjLOMCptvqA7adt94b-vtzETcSd-hSh7c8QZrExbi2yP9d8mL_XyZvMMn1cYnrDwja98QSntStdVAE9Yyar9uv4rq9IUotK9JavfasRyoyA15k9fllYHtsdkU4MRXhrhiZFktza2deFMFoe4QnpWuNQx8fLdMNbYHZk72R-c3QHdTkw4UcTjKsLk3lZw-jzCKzfG2A4-w6euw3RALXl7wW2yL0lRokL0Mfj_Q4qanrlASASKfFNBjbvppaCfmZlPdeeL5eb3i3Lp-e3ID1mgvZELamu5A8P9YgA_9eqmde2uoLZ33lurPPlRG3V9WuWnh8WSD_DKYDjvbI_a-Q1NQ2n1_koY9jZBZ9f5pBr75c3p4LruFJ96r-bfBfYfDfWv9nhdmrtfVvY__1xh7ZQ7Tb3Z7bE_1kyROXdX-b_ZeZvT-DNIQPV8-TY7A6LPzig9PDXLVWFX4xqtaSaSVfpuXfrZIv09EpGE5_V_IfUslnEz1GhMCE_Vagg54wPaWZ4QuEjHe2kxdqUMUVRi3IWshm2b_Qfv0t9C4LqHsioVq32qSBwXGs6GQJVxuzyZ85mH9ZrA76GJXXrb4ilJ8LXtPNgEaOBr0H4z_0p_LhsBgcJ3wRG1oSdguqY3r-mGFugoeznfgdp__p4IX47lj9k736M1JXBTXpmF5XwEDD_JxdUTNvhLlz44NafK85f7o8e3T9XZ1b2FCl5fNL_3jNB15sgrZHmP8VlnnbQ8evUeM8qXE8kF21jOolr26kKEGpLdxf4nd_w6h4dcTorZGWlG9uoZ5tnkmqYeTXOB4m1XByZAdZFOLD7vxPC8a5dQdH4Wi9C8OpihIIZ1XUL9flPXEL8_QN65ume0u-edwJjN5jhtEUd1bPm_YY3D8KMKvHio3Ht6_yKkpT1BDKZ-5vRWmUpiMK01tGeZUfee0KmykjmtP7RTlEPlqvzbS10kTq9RbiMVwgGnPJJrKXNcTI0Z-TPqlhH7vLQkgN9oVCKSTYO4hQ7VlsL6ieVGdhlYc5OYGzIA2D2E9jPz-5P4vyGBc1zko_9QM_Tau6zosiyes0rNOiLk_oGfZxFARBGERBhvNFHVRZGkZFHdYkquPai3xoCGUL4yYLITcn9vrkWRAkfpycMFIAU_YnNBhbl8HYiy9O5Jm9dFl0G-VFPqNKqz0FTTWzP7sxdZYXX_y1P1dBWtLNBqQaXHddEco6Cb_62utJJ9nZj99n7W3yeIb_PwAA__-QBesp">