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

    <tr>
        <th>Summary</th>
        <td>
            Scalarizer min-bits option crashes on intrinsics with multiple results
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            crash-on-valid,
            llvm:transforms
      </td>
    </tr>

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

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

<pre>
    In some cases the scalarizer pass's `min-bits` option crashes when operating on intrinsic calls with multiple results like `llvm.frexp` or `llvm.uadd.with.overflow`. For example if I add `RUN` lines to these tests:
```diff
diff --git a/llvm/test/Transforms/Scalarizer/frexp.ll b/llvm/test/Transforms/Scalarizer/frexp.ll
index 6397832f6648..62cf54290ec2 100644
--- a/llvm/test/Transforms/Scalarizer/frexp.ll
+++ b/llvm/test/Transforms/Scalarizer/frexp.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
 ; RUN: opt %s -passes='function(scalarizer)' -S | FileCheck %s
+; RUN: opt %s -passes='function(scalarizer<min-bits=64>)' -S | FileCheck %s
 
 define void @test_vector_frexp_void(<2 x double> noundef %d) {
 ; CHECK-LABEL: define void @test_vector_frexp_void(
diff --git a/llvm/test/Transforms/Scalarizer/uadd_with_overflow.ll b/llvm/test/Transforms/Scalarizer/uadd_with_overflow.ll
index 1c4b6124b00b..62426ce9776b 100644
--- a/llvm/test/Transforms/Scalarizer/uadd_with_overflow.ll
+++ b/llvm/test/Transforms/Scalarizer/uadd_with_overflow.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
 ; RUN: opt %s -passes="function(scalarizer)" -S | FileCheck %s
+; RUN: opt %s -passes="function(scalarizer<min-bits=32>)" -S | FileCheck %s
 
 define <3 x i32> @test_(<3 x i32> %a, <3 x i32> %b) {
 ; CHECK-LABEL: define <3 x i32> @test_(
```
then they both fail with:
```
opt: include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From *) [To = llvm::VectorType, From = llvm::Type]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/opt test/Transforms/Scalarizer/uadd_with_overflow.ll -passes=function(scalarizer<min-bits=32>) -S
1.      Running pass "function(scalarizer)" on module "test/Transforms/Scalarizer/uadd_with_overflow.ll"
2.      Running pass "scalarizer" on function "test_"
 #0 0x000000000408b0c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (bin/opt+0x408b0c8)
 #1 0x0000000004088bfe llvm::sys::RunSignalHandlers() (bin/opt+0x4088bfe)
 #2 0x000000000408b8f1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007efa3a845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x00007efa3a89eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007efa3a89eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007efa3a89eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007efa3a84527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007efa3a8288ff abort ./stdlib/abort.c:81:7
 #9 0x00007efa3a82881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007efa3a83b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x00000000041a61ea (bin/opt+0x41a61ea)
#12 0x0000000004a0edc4 (anonymous namespace)::Scatterer::operator[](unsigned int) Scalarizer.cpp:0:0
#13 0x0000000004a0b112 (anonymous namespace)::ScalarizerVisitor::visit(llvm::Function&) Scalarizer.cpp:0:0
#14 0x0000000004a063e9 llvm::ScalarizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (bin/opt+0x4a063e9)
#15 0x0000000005ce9aad llvm::detail::PassModel<llvm::Function, llvm::ScalarizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#16 0x000000000429c417 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (bin/opt+0x429c417)
#17 0x000000000549894d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#18 0x00000000042a0e21 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (bin/opt+0x42a0e21)
#19 0x000000000548f17d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#20 0x000000000429b1d7 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (bin/opt+0x429b1d7)
#21 0x00000000054338a7 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (bin/opt+0x54338a7)
#22 0x0000000004052e02 optMain (bin/opt+0x4052e02)
#23 0x00007efa3a82a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#24 0x00007efa3a82a28b call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007efa3a82a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#26 0x000000000404cae5 _start (bin/opt+0x404cae5)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWVtz2zbT_jXwDUYaEDxf6IKWra-ZJm0mdnPLAUlQQgMBHAB0rO_Xv7OgDpRMJ7bazts344wkAvvs6dnFgcxasVacL1B8i-K7G9a7jTaLP9mu1ay5qXSzW3xQ2OotxzWz3GK34djWTDIj_p8b3DFrEU0tRgnZCjWrhLMoIVh3TmiFa8Pshlv8fcMV1h03zAm1xlphoZwRyooa10xKi78Lt8HbXjrRSY4Nt710FkvxjQO0lE_beWv4c-fBzfFZz5pmDrJz_cRNK_V3lJA5XmmD-TPbApZo8QfMmgZkvvzxGwBIocAVDd5Yjh23zqKwQKRACRn-GtG2iBTwgWeztXCYIboCnYiuQADR1aNhyrbabC2iq4djUBBdeVPnUuLqCiFECqEa_oyTME-zkLZJEmXzeULrNo5oTnhNcUBIEkWIFLPZ7CrLwFd6O_xdayWKCIoIngWILmOM6C18SfDwGJECo_AW__b74z0KC1xYyw2QwuINe-K44lxh1ju95gp4wRtc7XDvhASVfdcwx0uwpqw3vP5m590O__G4LIsv__cAeLPZEzcWSBYfVEF2wwK4hxGNLZ4BO7lF4R2iadurGtQjmtmRPzmiKZ49YJQu8UpIvgRlXnwfoetww-WxGsK7JELh_U9UYfjf8FYojp-0aCCK3vsnXjttSh_2EkYQzVC4pPgZN7qvJEfhPVa6Vw1vAaxBNMcovT0EZfnL_fLX2cfi9v4jOPFmFVdzH0qyhJIsDyX53kKYRDhWRVBHVRLQqCKkgqqIaFLzPE2T6vqqeE3jdSXyKtr_UL3Q1-uF_pV6eQX3rF5CeqiX11WN6wWFyxA_Y-Hljqwe6mQ8QGOG6PJyOo2rN5XM61pGywYihYO1zm34DlfabXDLhPSr28UCg0ihOwf4QtWyb_iJYA9912kDHFsyCwvmHITjNBusqaXbdRzRDNgApnuxsEBhUTOgZrYyeosRLbxf8e2jxii8G0376gv-0aMs8TD7bIIfiu_OeAjrp7AMhctH7fOTfWXSa6AJoglGlHr14fJxN4zDIDPrfsuVw7oFR_W2Y05UkuPBhwBRCm0RosSbOSLF54_3xcM9tn21hcaDq36NDYd4wIK9ca7zSzVdIbpaC7fpq3mtt6fgwcesM_pPXkMEhbU9hwrBTDWHUPtdjN-b4IrV35xhNQfdD47V33DTb7shWWSOSP7Z6LVh26MnoB5XQiG6AoZf2Q9PNfGOgsCzB0SKAKz60isFWymAwT8pV63wVje95DDxyu5FKSIFndI8Vud1HUw5aCsHYYxoSDB5Jod_EckqUmcj2tmdHb58NkI5n41HyA2i2WmSYd9LbZ3hbOuZt4S95MDD7JgWRG_J814BRGFQH1yoz6qWT6n_0qsHsVZM_sJUI7mxezJPaQCMkwZ66WDWBvgMC9HM27vEVqyFanXpfKUu8bDy-qIdJOy87oCJxP8fFIR7BSlvWciyKA5Dgr15KylgkXrOkjKJZlKo_nm2Vv0wUM-tnieDzSBysjg6B8x5RWtclp3bGM6a8puQshSwkQbuM5_XOaIr1TmJ6Go8bV6jsIgiFBZpsgeP3wKuHDeKyR_C-t4XHIKQTMGOZX6IleVjrPQyoDTl2DBhuQexPhOIrub-1842vIOS6bQVz4iu_EwPS1MUFgfHs3NUmmVti1kFXczjuGbIln80WBWAm3vx_IV4UOFSyVJq1pSN3jIxpEEo7yM83tp1zQasIEjBmNwvyWFAztHCKg7S93HGiwycAcDzOgpYEnA2URzDwEnsvDgY4U0dgRhTWu22urdYsS23na_4fCjFh5o5xw10RPg5nCG1Gc6riGa98ifY5tAETq3sonjAgPDCgCoI6BsM2AN-FVaAav_4CX6c9aXVsQMnPzUkujAkCfl4GT_Jfobz9dD2evW6uuVIuFBM7qywn5hia7-STAjBcpJMt7TBmlPW4rGtcc1zxpqRuoY7JuS-bTNrP-mGy2mlZ2Ze-HiVC_D3D8YGDLvthWwmc5ic5ZDmdRSkI1U-Fj9S82_0-CUbBr9ObEjP2BDlWR79HWz4x6L1b4zyiFefRcf9bdQEwbJzgjHCaTDS-clv6R71AR9Qi4Z1xxZ1af0g8C7b9yI_4oc368SP_JwfWRuk7-PHwcrlG129wpfX0vs3BOhtqaXkondUQfOW3jEVm_-6y1M9A_w5coIG55wIw4yNvTW9T-ghXmf2PTgj1PoLb6cI8cLsR2bW3H1i9cbjFFOjH0VlmNl9UK3-sO3ky1lay9971_VuJeQEyF8afsWdwhi2g6fjOPuYyH4t1Ms-dppvXTM8Ox4Aw-VwuTcO44iWQ9amuqPuXOm03lfn4MWvQjU_mvWVG9EKbg7zKhh59-cEifY0OZHo4mQVU04o1p37BFvhiYOZn3ASvzg3URbUDJclbHNL65hxZc2kLI8b69r2Lzf9-xPFlJC_oknh8BPuNUaXGmlW-ZcdpVDCXSoZvgLyzCMP-3gKxx566BrxFOKZD1PmTyKHERwQ4j3w-VaGRDXjMR4gp0Lrx_ehPVxn3TSLsMnDnN3wRZBGhMRhEEc3m0WepHWWBmFaJXGUtyxPSRUGPA9Ym2YNr27EghIaE0pJQEkcR_OUhkmUMUaysKFRk6OI8C0Tcu7f-GizvvGXOouApnme3EhWcWn9GyxK_aXOTKvZE5NwmqaILhGle_q60aUHRfHdjVn466KqX1sUESmssyctTjjJF6d9Kj7cyFy-3Rq_znrlTdZNb-Ti-survatPC_qfAAAA___3UXVS">