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

    <tr>
        <th>Summary</th>
        <td>
            [Aarch64][Codegen] fatal error: Invalid size request on a scalable vector
        </td>
    </tr>

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

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

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

<pre>
    This was observed when compiling a Fortran application for I cannot share the source with flang from top of the tree on neoverse-v1. Below is a .ll reproducer that crashes codegen/llc when optimized by opt with `-O2 -mcpu=neoverse-v1` (also tested to crash with `neoverse-v2`, `neoverse-v3`, `neoverse-v3ae`, `neoverse-n1`, `neoverse-n2`, `neoverse-n3ae`).

In all these cases, it seems llc chokes on a `call <vscale x 2 x double> @llvm.sin.nxv2f64(<vscale x 2 x double>)` generated by LLVM optimizer.

Reproducer:
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"

define void @repro_(ptr %0, i32 %1, i1 %2, i64 %3) {
  br label %5

5: ; preds = %6, %4
  br label %6

6: ; preds = %13, %5
  %7 = phi i64 [ %16, %13 ], [ %3, %5 ]
 %8 = icmp sgt i64 %7, 0
  br i1 %8, label %9, label %5

9: ; preds = %6
  br i1 %2, label %10, label %13

10:                                               ; preds = %9
  %11 = srem i32 1, %1
  %12 = uitofp i32 %11 to double
  br label %13

13: ; preds = %10, %9
  %.4 = phi double [ %12, %10 ], [ 0.000000e+00, %9 ]
  %14 = call double @llvm.sin.f64(double %.4)
  %.unpack = load double, ptr %0, align 8
  %15 = fadd double %.unpack, %14
  store double %15, ptr %0, align 8
  %16 = add i64 %7, -1
  br label %6
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.sin.f64(double) #0

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
```

`clang -c -O2 -mcpu=neoverse-v2 reduced.ll` crashes with:

```
fatal error: error in backend: Invalid size request on a scalable vector.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang -c -O2 -mcpu=neoverse-v2 reduced.ll
1.      Code generation
2.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
3.      Running pass 'AArch64 Instruction Selection' on function '@repro_'
 #0 0x00000000042220b0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) 
 #1 0x000000000421ff70 llvm::sys::RunSignalHandlers()
 #2 0x00000000042202d0 llvm::sys::CleanupOnSignal(unsigned long)
 #3 0x000000000417d090 llvm::CrashRecoveryContext::HandleExit(int) 
 #4 0x00000000042196ec llvm::sys::Process::Exit(int, bool) 
 #5 0x0000000002d36d0c LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
 #6 0x0000000004185560 llvm::report_fatal_error(llvm::Twine const&, bool) 
 #7 0x00000000041856b0 llvm::reportFatalInternalError(char const*) 
 #8 0x00000000041cf77c 
 #9 0x0000000002d5acec llvm::EVT::getVectorNumElements() const NVPTXISelLowering.cpp:0:0
#10 0x0000000005f15d7c llvm::SelectionDAG::UnrollVectorOp(llvm::SDNode*, unsigned int) 
#11 0x0000000006022198 (anonymous namespace)::VectorLegalizer::LegalizeOp(llvm::SDValue) LegalizeVectorOps.cpp:0:0
#12 0x00000000060299ac llvm::SelectionDAG::LegalizeVectors()
#13 0x0000000005f3e88c llvm::SelectionDAGISel::CodeGenAndEmitDAG()
#14 0x0000000005f41dc8 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)
#15 0x0000000005f42ec0 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
#16 0x0000000005f34fec llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&)
#17 0x0000000003629ee8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#18 0x0000000003c8b6b0 llvm::FPPassManager::runOnFunction(llvm::Function&)
#19 0x0000000003c8b970 llvm::FPPassManager::runOnModule(llvm::Module&)
#20 0x0000000003c8c204 llvm::legacy::PassManagerImpl::run(llvm::Module&)
#21 0x0000000004a494c0 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*)
#22 0x0000000004b4045c clang::CodeGenAction::ExecuteAction() 
#23 0x0000000005062aec clang::FrontendAction::Execute() 
#24 0x0000000004ff7190 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
#25 0x000000000514de34 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) 
#26 0x0000000002d393ac cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
#27 0x0000000002d3109c ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#28 0x0000000004e31ab8 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#29 0x000000000417cfa8 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
#30 0x0000000004e32090 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#31 0x0000000004df9134 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const
#32 0x0000000004df9d9c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const
#33 0x0000000004e01424 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&)
#34 0x0000000002d359e8 clang_main(int, char**, llvm::ToolContext const&) 
#35 0x0000000002d45620 main 

clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 21.0.0git (https://github.com/llvm/llvm-project d4c7d0be1f5235555393313bb1f8e46c97f76766)
Target: aarch64-unknown-linux-gnu
Thread model: posix
Build config: +assertions
```

To see the crash with llc only, you can also do: `opt -O2 -mcpu=neoverse-v2 reduced.ll -S -o - | llc`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWUlv47ie_zTKhbBBUfshB8VJ3lSjuiuoZApzC2jqL5uvKFKPpJzkffoBScmWHKeWQWMuL-h2SVx-_30hRY3hOwlwHWU3UXZ7RQe7V_r6n0DlA2gO-mqrmrfrpz036IUapLYG9AEa9LIHiZjqei643CGK7pW2mkpE-15wRi1XErVKo0-IUSmVRWZPNSC7B2TUoBmgF273qBVU7lCrVYes6pFq_QqrAZCSSII6gDawOsRrdANCvSBuEEVrIZCGXqtmYKCR3VOLmKZmDwYx1cAOZETuhWCBT9Vb3vF_Q4O2b-4lkI5yvPpC0Kpj_RAltzNaUY5RREoqjEIWjIUGWRUIHLeelpMoxxHZLAeTi4MULgzL-NLgJVQ5AVTrCNcRrj9JRIVwKjOAGDVg3BZukQHoDHIKYHv1HYxTJnVYzK2Pks3BMCoAvSKCXlGjhq2AKLlDUYqFOHRrw-Vavh5Im6cRKT9cH5HK6WoHEjS1Qb-fP3_786hxPTL69WisKHHvTorwH64t1TuwqKGWCvqmBoui5BZFhMCqi5IaVj0pcJTUCfE_7jVevrqnPPU_K15GSV2GKR7nUVL7H_d2XBI7keqYlCuZhL2rR_d2714JOfFkNe8FTPxQqtk-T1eD_C7Vi1wJLofX1U4OYU-E6wZaLgEdFG-cKr2LPkek7K1GEcm8QXlC3HPsn2P3SPxjnrrnJCIVioqbCNcIbTUSdAvCTWSBQhYlNYqSG9RraMzIWZZ7TyFZ-m5bHrblF7fFybgv8_sikhV-qt_zwE9245dN8HGCouzWv4SZ434_jmv3XHoIzroemZ2d5CrcSjyxF-Qu3diR02rxNopbfSDuAocsdsZ4-ZoEpNi5EPq9v3eEq0lPceyHjIbOGzSeNHRcQPyCgVvV9kebxy6PjNFzbqkjo8llW-GRxJGHdXo0VoA82otM3OC5vfAa-z-IyA0-ok2W8-sDos8RE-QsIYRkME04Blz8T9wMsqfsuwcQijaTmGSD5t5PBd9JVB4pZn5DS5sGzYAD1iRF8GpjlYbZojj7GXbusR303AlX8eUgKW6D_p3m7wfJfAWrrdXG2UMqp5Wtk1Cq1pUnqcybZEiqQb5w2SDTAxsEtdTx98KF0GAHLVEHndJvESmlkhAU1gATdCbMBzr2qYAkOPBFrdV8O1gwfjD4RXHzN3KGRh3McnN4Zb5Irxi6XC8J0uBye7MWwpWDqRK7Ujmm-yVq61I9Aq2VKwfhAXGJnBAgGzf2SR6o4A0y_N-ANPxrAGNDEXOFyEtyAGaVLzAPn-_qxztkhm3HLaJoO-xce6C0dfG2t7Z3NozIfUTud9zuh-2aqc53CIfpn1Wv1T-B2Yjcc2MGV0nvEZUN4pKJoQmdS2gBHJtWUxac2yd5BsZAM3Y23hdlg6gxinFfF_UgkWGa99bx-2idtZqh64N68DrC1YNWO007RPVu6EBa73a_o3lcxw5noxqYKjJXMsI1ccNfByldp9ZT4xyoOLr4gxv4k0q6Ax2Rwim5U83gg6yYwZPCsZ5cwqprXxjRJ2msHgLsIwjwTyNmO9GLSDErjUWoGglG-BVPfykhBG8x8uZJ6iipzZsJDw-aS-v19xQsUJ4WafryrIzVQLuI-JrFpfV-HWjESxpx2xYXaXwd5CPfSSr-i8pGgDauBQqZLiIJOeMUk-YiykYAlUP_ZcSKSDlI32w3SCi5OwEmC8C4aHA1B9w4n_sKzNn8baOkhVcbZgJ7d6_cRqRcipqeiVrlwC6r07tueJkjbdBWKTFDzOaIpEnyBjPf69256B01FZHS9T4RqR0C21ONmJLGjgMTJGPxc0e5XLPeRQD2_wcy-VIZZZblc2WEqH72CeQ5JJC5Bzy9uPZrJJlfkKI4h8-37-HvHfonaUFLKu5GImfCHBHLJSJri4JNc9VSZxllCyvcfXsKDzuw33wy-2vo7gSE6Pc-Fyiiv749PP3Pp0cQn9ULaC53Z5pzzr2IoKyNs6aYEzvG4239jzDy31IrIQLhL_1Cj4-3f6kGRqsd3fbkYo7eIppyTEhclf7UJJV869RgkKQdmN5HaRVwA7HPsKPCHQ7C4PT6jodvVAy-Lk0rJl7NBfHJGTtVRX8s_hL0FOMOLFnqMoGy_AjMWWUMVNXAP0DWsrnruHV05pDpEjKNG1b-FDKM1kLcUMPZjVDsu1ko6ZjFTz4_EczOCBJg-KcE9SC_yD8p23MJE_aC4Lu5GcX8TGtpCz_SmjMAe_sb6C6COslJBTBX7dlWV-9mRC9SW5JxXr3uqbZrd_RGF_Au-OMiLySs3C4zzf2D2zeV3d9iZyRQnROoil8h8Kev7UvdjkMncILPwBnB6QxczEw3I_Op609-9DMSy2pM0yplOPQ7YQt03N6EhvDLYPvBlabZ9MbfPYF2PQeVDMZ8v1jh4_FL71RnxvmZO1qXSL9CuxyeOK3P0EZW6tEQ8y2fpNWD4Qf4Cu1G2gero2Rzmj60o7_dcwGPb8ZC569ONsjYJswMkv9rgOf-bKdraPoXzS08T23NbFMDLR2EfW5AgIWfbEzuRprvRdooaYbOFe_6ZJ1ll7NNcZqxC8od1TG2D8AGC5OGylOtIMt8inNCYYF2r11fc9TuHG4JtOxr2raIK4x-5BUXOfuY8hjvgdgyg8ZpA0k6JzbCnmgeVLj4_Jmn1jMi-VlfVSWUHRukRQzVWtM356_JZtmMjIY977aOndhk0-KMVIwrhiYhNvGTb5XmFbijU38QIvsC3bOgchhjjzovSajR_AD6fZoky_YJkphuy3B_dgKdjg7P2gsfbtdCbXVu7ZZMR-DnVjo2T8oPhEdDbOKN6joqm3MPu6jkY6Apn0GoWITYKX0cQ-u44fmZvb7GcXjZutLtwpA7nrwKF4vdwLPVlLsTX5g-g6NCOMdyh-XjvFsy66nrY68YtkSkELTbNtSdsI6qIuV48kB_qO0FY1RnJxHW0vKXTiLuxERbEG8LXf7YbpNbnh39ICF4GdP_cSY86zcu2ursMNu0VbxMTgut-QxE3-XWSZWLdHW20S1YnKh-bWl9dv4Kw4F1cs56U7HfZf0PtTUf8_2H2n7mxi74_lFeO9qpp9yZaDwC_6qoozE_FHh5wgccp-RDW93OnhcF5kJl-UhR_48CT0GcntWWrIIywE2FbCLhg6ceXf_nlWPEP7t-SLOcYOSQUbhenDg_3Sqy6cuir--IjTK0lAtowmc8eOXWfy9Ehf_gNxhAqwOyChkAxGf1vJpIoANo4w5cJF7jNd5xH62_d8WImpQVDd5C3GYkybIsS6okiZPtNm5LSHNWFW2RF_mo3if_LcqJ9PEHKFw_7TXQBnWq8Wc51CvDXyNc3wxceMu13OsnIjfUGNChKX532_sUZD9ddnpFCcGQki69b9CbGhCjEvmvo43ymDlWvf2FO0q0ekQrhVYoKpztWZTjq-Y6aaqkoldwHRcZxiUpqupqf82qoigTnDdpy0pM8qJKSVkAxmmStXFZXfFrgkmG8ziPU5wn1RryommKLWkzmqa4YVGKoaNcrP3tutK7K3-zex2naZKVV_763_gv34RIeEF-NiIkym6v9LW32HbYmSjFghtrTjCWW-E_mdfBIFF2G2U3m_HDc3aLzi64f_ky-2rQ4vr_fl89Cna4Jv8bAAD__1GVeGk">