<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63500>63500</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llc: Assertion failed, function performSETCCCombine, WebAssemblyISelLowering.cpp
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
carlopi
</td>
</tr>
</table>
<pre>
Upgrading to emscripten 3.1.42 on DuckDB codebase, I found what I think is a bug.
Found originally in a linux environment with clang-17 prepackaged by emscripten 3.1.42, I can reproduce building llvm-project, commit `f3b64887de61020c09404bfee97b2fadd30df10a` (9 Jun, the same commit used by emscripten 3.1.42) and also from latest master (commit `080fa1ee38d65c84212fa5eb19c43bc10637fd75`, 24 Jun), from source on MacOS.
```
~/llvm-project/build/bin/llc --version minimal.ll -o output.x
Assertion failed: (NumElts == 2 || NumElts == 4 || NumElts == 8 || NumElts == 16), function performSETCCCombine, file WebAssemblyISelLowering.cpp, line 2812.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ../llvm-project/build/bin/llc minimal.ll -o output.x
1. Running pass 'Function Pass Manager' on module 'minimal.ll'.
2. Running pass 'WebAssembly Instruction Selection' on function '@_ZNKSt3__28__bitsetILm64ELm2048EE3anyB7v160004Ev'
#0 0x00000001068d661c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/carlo/llvm-project/build/bin/llc+0x101f8a61c)
#1 0x00000001068d6bf8 PrintStackTraceSignalHandler(void*) (/Users/carlo/llvm-project/build/bin/llc+0x101f8abf8)
#2 0x00000001068d48cc llvm::sys::RunSignalHandlers() (/Users/carlo/llvm-project/build/bin/llc+0x101f888cc)
#3 0x00000001068d80c8 SignalHandler(int) (/Users/carlo/llvm-project/build/bin/llc+0x101f8c0c8)
#4 0x00000001a8b9aa84 (/usr/lib/system/libsystem_platform.dylib+0x18042ea84)
#5 0x00000001a8b6bc28 (/usr/lib/system/libsystem_pthread.dylib+0x1803ffc28)
#6 0x00000001a8a79ae8 (/usr/lib/system/libsystem_c.dylib+0x18030dae8)
#7 0x00000001a8a78e44 (/usr/lib/system/libsystem_c.dylib+0x18030ce44)
#8 0x0000000104a1bff8 performSETCCCombine(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&) (/Users/carlo/llvm-project/build/bin/llc+0x1000cfff8)
#9 0x0000000104a1b808 llvm::WebAssemblyTargetLowering::PerformDAGCombine(llvm::SDNode*, llvm::TargetLowering::DAGCombinerInfo&) const (/Users/carlo/llvm-project/build/bin/llc+0x1000cf808)
#10 0x0000000106307530 (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) (/Users/carlo/llvm-project/build/bin/llc+0x1019bb530)
#11 0x0000000106303be8 (anonymous namespace)::DAGCombiner::Run(llvm::CombineLevel) (/Users/carlo/llvm-project/build/bin/llc+0x1019b7be8)
#12 0x00000001063037e4 llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults*, llvm::CodeGenOpt::Level) (/Users/carlo/llvm-project/build/bin/llc+0x1019b77e4)
#13 0x000000010665dd48 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/Users/carlo/llvm-project/build/bin/llc+0x101d11d48)
#14 0x000000010665d80c llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) (/Users/carlo/llvm-project/build/bin/llc+0x101d1180c)
#15 0x000000010665b920 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/Users/carlo/llvm-project/build/bin/llc+0x101d0f920)
#16 0x0000000106658e50 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/Users/carlo/llvm-project/build/bin/llc+0x101d0ce50)
#17 0x0000000104a07344 (anonymous namespace)::WebAssemblyDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/Users/carlo/llvm-project/build/bin/llc+0x1000bb344)
#18 0x000000010545ff30 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/Users/carlo/llvm-project/build/bin/llc+0x100b13f30)
#19 0x0000000105cdab64 llvm::FPPassManager::runOnFunction(llvm::Function&) (/Users/carlo/llvm-project/build/bin/llc+0x10138eb64)
#20 0x0000000105ce1e3c llvm::FPPassManager::runOnModule(llvm::Module&) (/Users/carlo/llvm-project/build/bin/llc+0x101395e3c)
#21 0x0000000105cdb3e4 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) (/Users/carlo/llvm-project/build/bin/llc+0x10138f3e4)
#22 0x0000000105cdaf6c llvm::legacy::PassManagerImpl::run(llvm::Module&) (/Users/carlo/llvm-project/build/bin/llc+0x10138ef6c)
#23 0x0000000105ce224c llvm::legacy::PassManager::run(llvm::Module&) (/Users/carlo/llvm-project/build/bin/llc+0x10139624c)
#24 0x0000000104952124 compileModule(char**, llvm::LLVMContext&) (/Users/carlo/llvm-project/build/bin/llc+0x100006124)
#25 0x0000000104950634 main (/Users/carlo/llvm-project/build/bin/llc+0x100004634)
#26 0x00000001a8813f28
```
Using this as `minimal.ll` file. Original issue was from C++ code using `bitset<2048>` I chopped to what seems a minimal reproduction:
```
; ModuleID = 'parquet_reader-ee6ddf.cpp'
source_filename = "parquet_reader-ee6ddf.cpp"
target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-f128:64-n32:64-S128-ni:1:10:20"
target triple = "wasm32-unknown-emscripten"
$_ZNKSt3__28__bitsetILm64ELm2048EE3anyB7v160004Ev = comdat any
attributes #18 = { mustprogress nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+atomics,+bulk-memory,+exception-handling,+mutable-globals,+sign-ext,+simd128" }
; Function Attrs: mustprogress nounwind
define linkonce_odr noundef zeroext i1 @_ZNKSt3__28__bitsetILm64ELm2048EE3anyB7v160004Ev(ptr dereferenceable(256) noundef nonnull align 4 %0 ) #18 comdat {
%2 = load <64 x i32>, ptr %0, align 4
%3 = freeze <64 x i32> %2
%4 = icmp ne <64 x i32> %3, zeroinitializer
%5 = bitcast <64 x i1> %4 to i64
%6 = icmp ne i64 %5, 0
ret i1 %6
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWVtz2ziy_jXwC0oqEOBND36QLTvH5ziTVJw5W7UvLhBoSliDABcAfcnD_vYtgLIkyk7GM_HsbCq2KagvX1_QaDS592ptAE5RcYaK1Qkfwsa6U8Gdtr06aax8Ov21XzsulVnjYDF0XjjVBzCYzbN5TrE1eDWIu9UZFlZCwz0geo6vcGsHI_HDhgd8hcNGmTusPOa4GdZzRFaILMffl4nOOrVWhmv9hJXBHGtlhkcM5l45azowAT-osMFCc7OeZRXuHfRc3PE1SNw8vYQ1YhDcYAe9s3IQgJtB6WSH1vfdrHf2HyBCJBS261TAqCQta8q8risJZUYoEWSRk7xpARZVQ1suJSOyzQhHJcGI1gv8v4OJEsIGsOcdPIsa_HdxLTA3EnPtLW6d7bDmAXzAHfcBXBS6R0Nq0vIMgNWyLESd04y2vIAmW4icNSIjJataWRWoJBEEzUc4i_ghyfZ2cAJiiD5y8elm4vfINP5PH_-F6OXUL5fJX_GvMulLgWeze3BeWYM7ZVTH9VxrPLPYDqEfwvxxFLX0HlyIVC1XGiRiy2jXL0N3oYPHiK0QW2GKUXWOqnN8tJ5_Z73-znpWPls8GJG09uBa67qbi6_n5-e2a5RJKdkqDfhv0ER4XaOfrm5AX9sHcMqs56LvI41WBjCtM7p11efri-XNBfZDE0OSkjcmlHUhboZNCL1HbInoJaKXaxU2QzMXttu68qVHlfcDeEQvUw4oI_QgISWPcNxvcMPFXXBcwFb9TeDiDsuh66OWtETmiCw-O7t2vMPcrYe4OSIIPJ-_JYQ_ClwWZX8ZjImbpOfeY0Sry2e3fo4LH7nha3CIVjGrOisHDZFqLxbRaouevibuIAD4yvjghlH6DWhIT1vRu2giWqGc3P79l_-7Cez2lta3t40KHsLVdVfmF9cdJXl9ccG4eTqr7rOSEJJf3EeuBAIjyggmj2T8l5GylmWZiVQEolfZ0j_58eGzUyYkn3-NQUC03hM5_nBrfXDAO0TLmCvKhLibEa0RvfzVg4uBTZXzDXFA9Iw8ZiRra15mImbwDm12jLZpa3wE7UatDdf_w43UMRj1vVUS0eW74GnaeoKHHuHJa_Gq974MZgLLJyQ_D6iuxdRB7AhQTUSNjz3yTtERREy9kR8o53Wz4LzOt1oG7yK7ahC99E8-QDd-HJ9ve81DrEtz-ZRoooqa5BR4nU9UFFMVZSNo_UYVYeOAy6kG1raCTo0oJxp4teDwRg3iSDaRHKayqyPZNeRvdNAL2QLyqWfqw8jnPGvatn693B_s3JvVL1ZC2h3nB3n7lbs1hOcDYFxbLT9sJbgr09q00X8yhwgRbXu0oxbHZtSkPkB2UCJfA_l5tHeP9X2tFdb48PM212Rvcyxq0xrMSFWw1EJxY81TZwePDe_A96nuLl4AHBfEjw3-2e2-aJqCkQns7Ag2a8ad8rtgf4ld2QHk7bfXcA_6PVBXDUydTY9RV5AfJMPurF0tP0wQ_QDlYTItl1_ADzr4F2l2biV8APOpD-Pn9zOxgnxi4vQQKAsp8_o7JsZGbwJvaeRFp0K0_j2OKJllMp8GID9GVxPxm-jG1TPulTjTVtxNoqG08uFWBXA8WIfY-fFXEgJXW0nGSri1fdTgJ6QHHVe6trhhbI25Hq9tqY9gF5O1RDSu_ZfBaazV71GjYwRrIiYRLI4i2CwoeWMEl1rvg-gnUdw106nKvg920i7otGiVR9hrKH4buxvMJ_ORi40y8Axzgv3Fd-8CXkAxBV9ND0dSsbF_-FHFPTgxV8sPX-1fbhghTcPyacWaNC9FXrQtO4zKEYp42zrA_yrwd0XcZKw9OvwmfUohJG_Kw2Pk8nME-Xwj_A9izVgNTTnxLiVTrJABE2_A-jHdYKfpsF16D5yLAtikrtDsyKcNg99M749_Dfi6ZdNDl9LjhGjLQydrWHPxtO1S94ivun6_Ff88tNCWU1ezo5SgNH8D2j8f6aKk-RTppF3IFwXNaI6F7XqlYRdkseEuNVxHPdf19f9_PLcmwOO7HCiEkDKj07gXR_hIyXLccWV-WlVesqmq6dW0zlgbL7-vTSx_9WkmvVEec49RSQ5mUCVJ4745_rSdK-M0esMP3I-T0XNEzxAdZ9Z4SJJQScbBEmLnlOR1bDJKgq-w2Ni-B4mDHcfZHqDzmD-P0nYT5lTe2OvjVcTO8BjJqxVGbIURrXru_jlAuI1XdnAzgFLKdpxEbodX4_z2NpoSq8KWkf6AkY6MIV33sOSBa_5kh_DMCrOYNTDrEVsymn7N-owgtqzjz6yn-2dV5ogty3zWZrQen0ziKfPZTUbrmVGILbP4E5liEzJVH5zq9Q71A_cdo7PB3Bn7YGb70fiO7TkL8t877UsqhO0kD5ibp0NpPASnmiGAx-MhnNBUZ7gbfOidXTvwHhs7mAdlZMRp7Cw43vfKrGcdD5sIj60QpWN7SiOND1zcxQwPIIJ1s2ZoW3Azr77Bjrze0o7OmIl-2H21BgNOiSlBCzwMDvyOCtEzHmynhEc05msz6LtZB511T-MCPApIXfVsw43U8WKf1rsh8EbDbK1tw_WW26u1maUaMX7qZLaFWK0m7mdneNemLkNwabj8qrdGBgmtMoC1MnfWCLi10iUKCS3-Bs7CY8Aqw39oiFv3wWEJDlpwYAREsxCtaZHq3LMWY40ZtMZcq7XB8TgtCB4LYYz4NjFQdbYdwUQCmhJBWy4xYudljh-xismdLhZRaxQSn7dCD1hZYm0dwDc4Yk6SD0jzRKpE12PzGi2LGqKTlFFBca2-gTtgLxJ7o4LgPuzZsy13HktS3KV7jnKiUJXJGUXUQp6pHIzxiE4cI75LgOeadSJPmVywBT-B06ysq7Iqyiw72Zw2NRFZU3FKZJMtiqxgiyarcgJ5UTRcyhN1SgllpKQFKfOyyOYLyRpJirZo5KKpeIVyAh1XsUrfd3Pr1iepMp-WrCDkRPMGtE9vIyk18DCW7bgXitWJO03nSjOsPcpJvGX6vZSggobTeLawJX7xBuoNr4d-8GboZHD69I-_7Emm_TsAAP___JrXkQ">