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

    <tr>
        <th>Summary</th>
        <td>
            [LoopPredication] Instruction does not dominate all uses!
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          max-quazan
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/Ta37j8sGq

Run `opt -passes=loop-predication -S` on the following test:
```
declare void @llvm.experimental.deoptimize.isVoid(...)

define void @bar() {
bb:
  %inst = call i1 @llvm.experimental.widenable.condition()
 br label %bb2

bb1:                                              ; preds = %bb6
  unreachable

bb2: ; preds = %bb6, %bb
  %inst3 = phi i32 [ 0, %bb ], [ %inst4, %bb6 ]
  %inst4 = add nsw i32 %inst3, 1
  switch i32 poison, label %bb12 [
    i32 4, label %bb5
    i32 1, label %bb8
    i32 2, label %bb8
    i32 3, label %bb6
  ]

bb5: ; preds = %bb2
  ret void

bb6: ; preds = %bb8, %bb2
  %inst7 = icmp sgt i32 %inst3, 137
  br i1 %inst7, label %bb1, label %bb2

bb8: ; preds = %bb2, %bb2
  %inst9 = icmp ult i32 %inst4, 10000
  %inst10 = and i1 %inst9, %inst
  br i1 %inst10, label %bb6, label %bb11

bb11: ; preds = %bb8
  call void (...) @llvm.experimental.deoptimize.isVoid(i32 13) [ "deopt"() ]
  ret void

bb12:                                             ; preds = %bb2
  ret void
}

declare i1 @llvm.experimental.widenable.condition()
```

After the transform, IR is invalid:
```
Instruction does not dominate all uses!
  %inst9 = icmp ult i32 %inst4, 10000
  call void @llvm.assume(i1 %inst9)
LLVM ERROR: Broken module found, compilation aborted!
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-predication <source>
 #0 0x000055ecca264eef llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3989eef)
 #1 0x000055ecca262614 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f9db5c40420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f9db570d00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f9db56ec859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x000055ecc74d5380 llvm::SuffixTree::insertLeaf(llvm::SuffixTreeNode&, unsigned int, unsigned int) (.cold) SuffixTree.cpp:0:0
 #6 0x000055ecca1b9a7e (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38dea7e)
 #7 0x000055ecc9ad2163 (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x31f7163)
 #8 0x000055ecc75bdc16 llvm::detail::PassModel<llvm::Module, llvm::VerifierPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xce2c16)
 #9 0x000055ecc9a9304a llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x31b804a)
#10 0x000055ecc75c9485 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xcee485)
#11 0x000055ecc74dff97 main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xc04f97)
#12 0x00007f9db56ee083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#13 0x000055ecc75bb0de _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xce00de)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWFtz4yoS_jX4hbIKga4PfnAu3p3aZE8qmZpXFxLI5gwCHUCTZH79FsgXSROfSs7kaVOObambr7u_brqRqbVipzhfgfQKpDcL2ru9NquWviz_6ulPqhaVZq-rvXOdBWQN8AbgzU6zSksXabMDePMT4M1XSvI_C_uvvwC6AWg9vD_2CoIM6c7BZUet5RaQG6l1t-wMZ6KmTmgFl08gQ1Ar6PYcNlpK_SzUDjpunTc44GXo8AqXjNeSGg5_aMEgSJCUP9qIv3TciJYrR2XEuO6caMVPHgn7TQsGcBFFEcDl2EHGG6HOMBU1ABcAlxDkV4NGVZ18gBDgVCjrICA3sKZSQhG_bf1ZMK5oJXlUa8WED3MAPiBVBkpacekRqwqPXaqqGJA1_NAfIFfQM2qDZwEzO_rcK8NpvffOTM1gb-bNlfh6-DYLmwSdbi-gIBiC9AqikyoE6U24SK-O6slJmAXpFCwJYJQxqOzzAHiw4pfFR237LFy9D_JOC-tpvB5TFwdHjtowKCYznXQqjmfiYirGfy8mM_GJ51OIR37TC_zi4wrDXai86bLswrLiRCeeUZkHJVG3HbQ79yuXJD8uqEyo2MOyOZWz61lVFhfDueRXefarlxO_QoZihBCaLYnRUBaKjRwtDxb89zcjidEvSZmFFs92WHyR5AN-2N1DWzj2jff3mVBlJCwJ2wEHJYDxsbmcd8PbNRDjj7aAD9RZfjPtgEMn_YedbNaXh_d147gJ3dwZqmyjTesT8uURCguF-kGlYJc6-xdlnenrMBiY5hYq7SDTrVDUceiz0vsxguPfKLZRcg8hU2v7lvvUjavuEOPd3bd7ePv4-Mejz8qV0d-5gq1mvfTjqlfMG6h12wk5DDRaaeM4Ozn5cHe7frqFtq9a4SCFVb-DhnfaOOg0nE1W4fZ9FdW6BXjjfTt8LDuj_-S1A3gjrO09BZthn6ha9owHumtD7R5WtP7uDK15NJh_crT-DlnfdifSUQRQ-WD0ztAWUrPrfbZt2BR4E2p1MwTEzZK_dFIbbvw9SdVu6Qe58YHapTO9-g7wphJqWAiX2kPQrvPXvet6F1m4fPq7-Q_ItdW9qTkgt4cUAUwQRC8-aWnK65riLOG8gYEQsgZkbV_t8OXBCOVCiF99zAAXZyVDn7faOsNpC3BoCkK5sAN9Cf9WoABfoRdSFiXnzXmuA0zimd84ixP4JHaKyn9TxaTHLw5uDLdtVHc-NSj8n4DwAShvSlaldYISjOB2a7h12vCtcYcopKgA3rwU2TZLllKo_mW5U_0g6NzecMoiqyMUPI6TBKOJv2RiJkcMoQoaKix_B37tkbOAnBCEqglyMkHOeF2k5bA3PoaMcZGWE-R0zHGesJQUaFQbT33TiJevhvPhWiifxztOm0l1nNX-qxk_FEivwnGYDZUyvw6VE9VaspC-E8DbGcwmpRBXJc35p5VewTjN-YSWfGyvpAzHGfk0e3GTxxmZ2CsmaUgrVsfZKA2MOyrkYZdSa-814xKQ67PGfWiiYVif7n3jRjSCG79iKnkw3HLzg7O1ovI1TIGxeLgr7D1VdMfNW4bIbXiF1tCrSTEcXcn-Cahf9WlNpea4jrMJ0eU0sSVBCR0T48m97OD_JUskrgqU0PNBBJMYTeuxLpMiHXlpeuWZehAdl0JNJ8WTM0LtHn0vHwd2Id6v1Oy4u6f1PuCs35LeicpQ8_pFNfpL28lftbSWf4QBuRHyDZDfEl8IZ20MffV3xwkKnMh-J1RI0lhfd27rtD7s4cHef8Rw4Lmkddy_R73KS979-Ym7iCdFOimPeDY1mqbMYUuF-jSbKGnKfGITz2YgRwWB260fcFvrqHHbkQPvnYcJKsjECpk14goxDgf8z-MTIXYeN9cHJP9w0RvF_XkexmT-VLBgK8JKUtIFX8VZnidlnCTFYr9ClGGSJmVcZVmSxwnOCUppndRJU6VxnC3ECiNMEMY5KlOUFFGWVHlVNowmeYbTAoEE8ZYKGYUDvDa7RTgXr7IYYbwID382_KaFseLPMAj9I1h6szCrcKKu-p31DwDCOntGccLJ8GPYndbdw_mYCtIb-O6Hk0Vv5Pwnsw8c7EMM_wsAAP__-t7LmA">