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

    <tr>
        <th>Summary</th>
        <td>
            [LoopFuse] No dominance relationship between these fusion candidates!
        </td>
    </tr>

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

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

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

<pre>
    This bug was found by Azul FuzzGen IR test generator.

https://godbolt.org/z/aqMMhr7Mo

Run opt with -passes=loop-simplify,newgvn,loop-fusion

```
; ModuleID = 'bugpoint-reduced-simplified.bc'
source_filename = "gen_1771"
target triple = "x86_64-unknown-linux-gnu"

define void @function_0() {
entry_1:
  br i1 false, label %bb_2, label %bb_3

bb_2:                                             ; preds = %bb_7, %bb_5, %bb_2, %entry_1
  br i1 false, label %bb_2, label %bb_5

bb_3:                                             ; preds = %bb_3, %entry_1
  br i1 false, label %bb_3, label %bb_4

bb_4:                                             ; preds = %bb_3
  br label %bb_6

bb_5:                                             ; preds = %bb_2
  br i1 undef, label %bb_2, label %bb_7

bb_6:                                             ; preds = %bb_7, %bb_6, %bb_4
  br i1 undef, label %bb_7, label %bb_6

bb_7:                                             ; preds = %bb_6, %bb_5
  br i1 undef, label %bb_2, label %bb_6
}
```
Stacktrace:
```
No dominance relationship between these fusion candidates!
UNREACHABLE executed at /root/llvm-project/llvm/lib/Transforms/Scalar/LoopFuse.cpp:420!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=loop-simplify,newgvn,loop-fusion <source>
 #0 0x00005640e2778c2f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x00005640e277665c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f5bc82563c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #3 0x00007f5bc7d2303b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4303b)
 #4 0x00007f5bc7d02859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00005640e26bb63a (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x34bb63a)
 #6 0x00005640e2648214 std::pair<std::_Rb_tree_iterator<(anonymous namespace)::FusionCandidate>, bool> std::_Rb_tree<(anonymous namespace)::FusionCandidate, (anonymous namespace)::FusionCandidate, std::_Identity<(anonymous namespace)::FusionCandidate>, (anonymous namespace)::FusionCandidateCompare, std::allocator<(anonymous namespace)::FusionCandidate>>::_M_insert_unique<(anonymous namespace)::FusionCandidate const&>((anonymous namespace)::FusionCandidate const&) LoopFuse.cpp:0:0
 #7 0x00005640e264868a (anonymous namespace)::LoopFuser::collectFusionCandidates(llvm::SmallVector<llvm::Loop*, 4u> const&) LoopFuse.cpp:0:0
 #8 0x00005640e2650bab (anonymous namespace)::LoopFuser::fuseLoops(llvm::Function&) LoopFuse.cpp:0:0
 #9 0x00005640e2651d31 llvm::LoopFusePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3451d31)
#10 0x00005640e2aa3b01 llvm::detail::PassModel<llvm::Function, llvm::LoopFusePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38a3b01)
#11 0x00005640e1ef45ca llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf45ca)
#12 0x00005640e0275971 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x1075971)
#13 0x00005640e1ef3fda llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf3fda)
#14 0x00005640e02762d1 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x10762d1)
#15 0x00005640e1ef2904 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf2904)
#16 0x00005640dfeb1d0a llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xcb1d0a)
#17 0x00005640dfdef0b3 main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xbef0b3)
#18 0x00007f5bc7d040b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#19 0x00005640dfea542a _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xca542a)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWVtz4yYU_jXKC2OPjK5-8IPjxG2mmzaTpPuqQRKy6WJQAW3i_fU9IF8kbbaJs-7MztbjCxLwne98HA4C57Lczh7XTKO8WaEnolElG1GifIvmXxqOls2XL79QgW7ukaHaoBUVVBEj1djzrzx_3n6vjam1F8w9vIT3Spa55GYs1QquvsCH_H17u1bJrex2um8EkrVBT8ys0agmWlPAuOJS1iPNNjVn1dbDC0GfVp8FFFxF1WgmRRfGi_3du70MLtGtLBtOb64QwCEPJ-BaLZkwI0XLpqDlHp7RcpwX0KDtqmWjCppVjFNBNnTXG4PL2SRJJlBs2xmiVtQgo1jND62e0ziLw1EjPgn5JEacieZ5tBLNoVf7XdKKCYo-S1YiL_SrRhQGHMp8D6ceniIvuWwbUmHUNptYUd01QrlCbIIqwjUFNRAnOeVgOcrzDA9vBF2brkEACCe8rIw1yKV3_lnQxFppi9GxiHfFPeF3sI0GbINzsA1O5hUMb4QDXuF5eB2ZdI3FA2PROYzhvtsws2n16nAkAybxmYMnPhbDN_BLhjeGSiXn4Bd3g_sdou1JJVcvpqUHQ4pPRpGCHmb0oMXvEpVywwQRBUWKcmLzgl6zGuXUPFHIwWZNNUVtBkQFESUrCSRlD--C-8_f76_ni1_nlx-uEX2mRWNoiYgBgkslpYEfzj9vRrWSf9Fif2l_WA7fj4oIXUm1AcDlQ0E4UVD4AEl32Wg6LuoamIfYP5i7-3A9f7hGusk3zCDiFhBFa6kgNUo0WBIgxzf5uJCbjtk-GaZ1Y51ZIvAMMVHwpqTWZ1Qootco3ws47iiKymZTHxT1oWp6p-RKkQ2CJN1sYPJbElYCWGrgGxjUkN_ViD7XXCpqfSw4EauRXX-U03xkFKRxqMiZaDuikbQQBDSA68bUjRlrNHo4cdmCcFu0i4wXXO-CzMOBj_xnH15RHPoUJ0la4ArdKViwnI-P1ukHthKE_wrScMs5tQuIh-d2yWir9G6EfPc5YE8G2HEcFWgIBpZeBcI7oKSK8iLFURwUPsoyBQ8FIGOmbJilh2DarYadVdBW1GatKCnHWo4hjC7950kIKGD6aCbomklKECfIkSIMAv91_MIixw45tB17yGEf2cdpNEUkl29i3kHGtmMPOeppHOd5HJAd5vcEnbMWhA6uZy_u2wtTPAmRNqWdB8G8JkzZONtfZ_d5ZhSlGTPtkxtUAjkipNhuZKORfdbRtc1MYMR1WbpoXewzjA1WyHa5lByK6Cvk0wFdqj21x9HuTQnzmpntez05rdMCRo-oPgXCuSzeLaZ9O0duMyZsAGSNYH83pwuJCogcCJTYOZa-tzPM_UGeH0z-ZBhxcUpeU3GPqNrLQnIOiX7AAfJ96pYD1-ZhA7p-hFZO1-N9C-WS3QKFjQ3BtzNP-8wjPyf5icwhd1N7q891uXtyfxOL6YDFpITE3PfPdr6DdNDegVzwbWuLTtc5ZOytZvqWCLKifdkOnWxwOJZnS0rOg0NSsutMfxEjJMj9roslNYTxtmzdhC0a5S-z7fnXk6ZXcwdLD1WfadlKQPX7hNnPxR9c8dQJ2lO8t7RPaBVGBenqY1X-N44_sVy4cGr05MJduXycRNPkHAH6n8n8_w32ie8Gpzd6wSDYg6rsBnt74vMo95zsqMxLUruV5CWP2w4n-bvr8h_EqnWm5204iNUYl6fF6t69xRs1OlewHTX6Vqj9OMJDmFlde8JHgzDDUz98w2R_Se6fRSaIT6tCT6buDqSsaD4p_e5sBByr1B2rKeyjaP8Zz8DGdnW_O1F5zd9Hd9R6S4q1w5m_VPuB5Yqo7Y2o5A1sv79uBfuWP9yefcn4CyDfVf0Nd-ZKka292x2gY9then-xuZOQNysmvmoPY5MZtx2zVy2935go_63VR6rsibfat3PbuVd_zxZGhQuSXhQlvSgqaeXnAdoQJs5lM3eQPZvp4BQgtDazzG7xM20IbMU6BN56IhAOrUz784NEISaoxT-bng70YHWxQ0KKmkYJavepaBJMB0eNF-UsKKfBlFzA_pnTmRdd7p-wvegKfc8Z5EWj-Oz9p35RjOPgYj2LyMSfJklcTcoKR2k6zSuMaRgXRUhJPqEX7tBVW-YexoI-IQdh_2aJri7YDPsY-zFOJ74fB8EYBjoGPD9KogSHsGeBvA4jzMeWh_2H6kLNHKW8WWmo5EwbfayEYWArQZ1QFp80Zi3VTMBE1p_Illw44zNH_h_bBT3a">