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

    <tr>
        <th>Summary</th>
        <td>
            SLPVectorizer: Assertion failure in setInsertPointAfterBundle
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            vectorization,
            llvm:SLPVectorizer
      </td>
    </tr>

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

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

<pre>
    Assertion failure: (llvm::all_of(E->Scalars, [=](Value *V) -> bool { auto *I = cast<Instruction>(V); return !E->isOpcodeOrAlt(I) || I->getParent() == BB; })) in setInsertPointAfterBundle

Here's a minimal reproducer:
cat repro.ll
```
; ModuleID = 'reduced.ll'
target triple = "x86_64-unknown-linux-gnu"

define i32 @"foo"(i8 addrspace(3)* %tmp_buf) #0 !prof !1 {
always_continue:
  %local.tmp.6 = load i32, i32 addrspace(3)* undef, align 4
  %0 = sub nsw i32 110, %local.tmp.6
  %local_6_.lcssa.neg = sub nsw i32 0, %local.tmp.6
  br i1 undef, label %guarded209.7, label %deopt210.split.loop.exit1140

deopt210.split.loop.exit1140:                     ; preds = %always_continue
  %1 = add i32 0, %0
  %2 = add i32 %1, %local_6_.lcssa.neg
  %3 = add i32 %2, 90
  %4 = add i32 %3, %local_6_.lcssa.neg
  %5 = add i32 %4, 72
  %6 = add i32 %5, %local_6_.lcssa.neg
  %7 = add i32 %6, 56
  %8 = add i32 %7, %local_6_.lcssa.neg
  %9 = add i32 %8, 42
  %10 = add i32 %9, %local_6_.lcssa.neg
  %11 = add i32 %10, 30
  %12 = add i32 %11, %local_6_.lcssa.neg
  %13 = add i32 %12, 20
  %14 = add i32 %13, %local_6_.lcssa.neg
  %15 = add i32 %14, 12
  br label %deopt210

deopt210.split.loop.exit1164:                     ; No predecessors!
  br label %deopt210

deopt210:                                         ; preds = %deopt210.split.loop.exit1164, %deopt210.split.loop.exit1140
  %local_7_3370.lcssa1006 = phi i32 [ %15, %deopt210.split.loop.exit1140 ], [ undef, %deopt210.split.loop.exit1164 ]
  ret i32 undef

deopt215.split.loop.exit:                         ; preds = %guarded209.7
  %16 = add i32 undef, %0
  %17 = add i32 %16, %local_6_.lcssa.neg
  %18 = add i32 %17, 90
  %19 = add i32 %18, %local_6_.lcssa.neg
  %20 = add i32 %19, 72
  %21 = add i32 %20, %local_6_.lcssa.neg
  %22 = add i32 %21, 56
  %23 = add i32 %22, %local_6_.lcssa.neg
  %24 = add i32 %23, 42
  %25 = add i32 %24, %local_6_.lcssa.neg
  %26 = add i32 %25, 30
  %27 = add i32 %26, %local_6_.lcssa.neg
  %28 = add i32 %27, 20
  %29 = add i32 %28, %local_6_.lcssa.neg
  %30 = add i32 %29, 12
  %31 = add i32 %30, %local_6_.lcssa.neg
  %32 = add i32 %31, 6
  %deoptcall216 = call i32 (...) @llvm.experimental.deoptimize.i32(i32 12) [ "deopt"(i32 0, i32 1, i32 0, i32 142, i32 4, i32 19, i32 1, i32 0, i8 addrspace(1)* undef, i32 3, i32 undef, i32 0, i8 addrspace(1)* undef, i32 3, i32 undef, i32 4, i64 undef, i32 7, i8* null, i32 4, i64 undef, i32 7, i8* null, i32 4, double undef, i32 7, i8* null, i32 3, i32 %local.tmp.6, i32 3, i32 %32, i32 3, i32 undef, i32 3, i32 undef, i32 3, i32 undef, i32 7, i8* null, i32 3, i32 undef, i32 3, i32 undef, i32 3, float undef, i32 3, i32 undef, i32 0, i8 addrspace(1)* undef, i32 7, i8* null, i32 7, i8* null, i32 0, i8 addrspace(1)* undef) ]
  ret i32 %deoptcall216

guarded209.7:                                     ; preds = %always_continue
  br label %deopt215.split.loop.exit
}


declare i32 @llvm.experimental.deoptimize.i32(...)

attributes #0 = { "target-features"="-avx512pf,+avx512f,+avx512bw" }
attributes #1 = { willreturn "target-features"="-avx512pf,+avx512f,+avx512bw" }

!0 = !{i64 65}
!1 = !{!"function_entry_count", i64 32768}
```
opt -passes=slp-vectorizer repro.ll causes the assertion failure.

This is bisected to @alexey-bataev  change in: https://reviews.llvm.org/D111574

I believe the change exposed an issue, not caused one. I have a fix coming up soon.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytWN2PmzgQ_2vIixWEDYTkIQ-bptVFurtW6qmvkQGT-M6xETb7cX_9jQ1JAO9uaa8rlAV75jfj-fLYuSpftg9as8ZwJVFFuWgbFsQPKCBrIR4v8AoPFeKoKhj6uAzij18LKmijA_IBBekuiPdBuoe5b1S0DPgevgVkgywhypUSKMh2iLZG2akDAnJUUG2C-MNBatO0hZUMxBYBGIN4hxpm2kYCPXbyuP5cF6pkn5sHYYDsYPGD7AM86GAJTsx8oQ2TdtLNgUogZrezYEG2t7AwzCXSzIBUWO0XxaV5qAxrdq0sBQuifRA9dL-_MTAByTSi6MIlv1ABGtWNKtuCNdYgjqqgphsOhei5V1H_dJ8g_A9gEuywd8sGzIZZkNKykKwjM7QB_ZFpeC1YT0ee16vjKlm28h-pnuRScNk-L0-yhamhpiWruGSIxwQFSQSTlVKWhKz5GtGybHRNC1jLOnYmsF5NzaU-5m3l7ETiyFoZFlHZ_9j6qkOm4om-6GOhpAHZ7LZqZCGEgggIAShcOYWFoqVVwkaE1eU1yWBlVlkCKvhJomQAFzkQ3eZI6icHgHHkomskaqrAcXUMRaE1DSU7eRDvAOQN4viukKA5E5b01NKmZCWJNmE2miiZqg3BUahrwU0olKpD9swNxkk0dsc7dJBTr_3ZKKkhLHTv-nRq-fuqsSMB444WGA0oyIjCsgytMDLYgCuecjlHbobAyZQkngOcTrkSy5WRAclqSpLOAc6mXCvLlQ5DZD0lyeYAb6Zca8uVDDXG0ZRmMwcZY883zoPx0MzYd-AsD2LPhdj5kIzAPSfiWV7Enhux8yMmg4TycmVeXqyS9_LiT-VSgxVMa2U3HPyjEt9Cn5WJ76rdGe77lWFQr7JjHGdRZ2McRV3o12femTXddcaegYzchut233sZ-47CjqfXCPZXJ7Pj9c2WTgHeM6NntlEZHYTRONWHeo-i1MttvJoVpV7C48wrY9jLb7yeA068nMcbr5QRL8NJNAvcS3qCvXJG_CJNZoF7SU9ir6QRL8NJMgvcq94k9Woa8RxKZjmUeA4lmVfTiOdQMsuhsedQshnXNEvkOTSe5dDYc2jsHDr0p8s0wBCkzwv73pOvwzB07VkS2RYcMrBmDb9AfwudjGPkF_4vC13HtXb9EnH0roQQR9F3gdc-wRFdX-4jya1lS25jmzfoxw0lnrZ1ljC-voxG_yd7pxkUsNFo1oFaDNnabvpniUvV5tB3z6G_6TdpK1-ZvvfCry_qR0a_p81c4AradPNLHfaGZm8Mz4DdvLZLTbJluF-NtpqZW_3chvuVFsPfFztdsv1QqetWWsAh-XY2m5HIXdYPMaiBU2HeGqb7o5pVOHNJ3p0alxWjcFRm2qY7HHoJWdLHZ2j-auujgOy6r9FH_hTYHeeq81gGvsl44kLczuG_Tlz_S_ou2rZ02c4m7Cq905C-We5m7S-cbFvpbgqOYL3mBbzVyq7Idfkek2y1viOMT-JgaLSsqdagebzXol4-ssKoBmzf3M7wUIFbIEDmzBCd3oiEQ-3_OnON4Mm5BhhWInu3kURUsGf2ssypoewRoeJM5Qn8L21gno2ptT1Ek0_wNOyRsycduqBQzQmG9hjjNEuGYg4Ioo-zR-ZU6uEghJQGkVSCBhqiFdYvlemUL5GSLEQHdKbARVHFn1GhLlyeUFsjrZQMF-U2Ljfxhi4MN4Jtv_7-5dvNFlZT7zLo3WuTRduI7XhxJ27ObR6CXPhwV0jdvyWY-W8QBZ9OcwiiT2mabVaL85bRdVWxCBMSrQpGaBlvUhZlOS2yOMFZvnCZqLf2uomQq_Oouzm69kGkv64arwhm0_2Cb0kE2LAP4zjNSBqyMo1wiYusSklVbjJwH7vAem8uWTRbp3TenrRNX67N3V8LiA9-kow5hQCftuasmi2Vkl7g7UL1wq1x6xb4H3olR2w">