<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80638>80638</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[WebAssembly] Simple GC support example crashes `llc` on `--march=wasm32`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ThePuzzlemaker
</td>
</tr>
</table>
<pre>
I tried this code:
```llvm
; ModuleID = 'tmp-opt.bc'
source_filename = "tmp.ll"
define void @foo() {
ret void
}
define ptr addrspace(1) @test1(ptr addrspace(1) %obj) gc "statepoint-example" {
%statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(ptr ()) @foo, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) %obj) ]
%obj.relocated = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %statepoint_token, i32 0, i32 0) ; (%obj, %obj)
ret ptr addrspace(1) %obj.relocated
}
declare void @do_safepoint()
define void @gc.safepoint_poll() {
call void @do_safepoint()
ret void
}
declare void @__tmp_use(...)
declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...)
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32 immarg, i32 immarg) #0
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
```
I ran `llc tmp-opt.ll --march wasm32`.
What I expected to happen: `llc` compiles, generates a `.s` file
What happened:
`llc` crashes and hangs, with stacktrace:
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llc-17 tmp-opt.bc --march wasm32
1. Running pass 'Function Pass Manager' on module 'tmp-opt.bc'.
2. Running pass 'WebAssembly Assembly Printer' on function '@test1'
#0 0x00007c1d90ebf933 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/libLLVM-17.so+0xabf933)
#1 0x00007c1d90ebcbcf llvm::sys::RunSignalHandlers() (/usr/lib/libLLVM-17.so+0xabcbcf)
#2 0x00007c1d90ebcd1d (/usr/lib/libLLVM-17.so+0xabcd1d)
#3 0x00007c1d8fe5a770 (/usr/lib/libc.so.6+0x3c770)
#4 0x00007c1d8ff8e1ae (/usr/lib/libc.so.6+0x1701ae)
#5 0x00007c1d94b43e49 (/usr/lib/libLLVM-17.so+0x4743e49)
#6 0x00007c1d94b4477b (/usr/lib/libLLVM-17.so+0x474477b)
#7 0x00007c1d94b44f4e (/usr/lib/libLLVM-17.so+0x4744f4e)
#8 0x00007c1d94ad2582 (/usr/lib/libLLVM-17.so+0x46d2582)
#9 0x00007c1d91a9f2d0 llvm::AsmPrinter::emitFunctionBody() (/usr/lib/libLLVM-17.so+0x169f2d0)
#10 0x00007c1d94ad21c3 (/usr/lib/libLLVM-17.so+0x46d21c3)
#11 0x00007c1d913c30a5 (/usr/lib/libLLVM-17.so+0xfc30a5)
#12 0x00007c1d9105d0d9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/libLLVM-17.so+0xc5d0d9)
#13 0x00007c1d9105d424 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/libLLVM-17.so+0xc5d424)
#14 0x00007c1d9105ddac llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/libLLVM-17.so+0xc5ddac)
#15 0x000058e4d46ad8b8 (/usr/lib/llvm17/bin/llc+0x188b8)
#16 0x000058e4d46a38d6 main (/usr/lib/llvm17/bin/llc+0xe8d6)
#17 0x00007c1d8fe43cd0 (/usr/lib/libc.so.6+0x25cd0)
#18 0x00007c1d8fe43d8a __libc_start_main (/usr/lib/libc.so.6+0x25d8a)
#19 0x000058e4d46a3ed5 _start (/usr/lib/llvm17/bin/llc+0xeed5)
```
After investigation in GDB (blasphemy, I know :P):
```
[#0] 0x7fffef58e1a4 → __memcpy_avx512_unaligned_erms()
[#1] 0x7ffff4143e49 → jmp 0x7ffff4143eb3
[#2] 0x7ffff414477b → jmp 0x7ffff414459d
[#3] 0x7ffff4144f4e → mov rdi, QWORD PTR [rsp+0x70]
[#4] 0x7ffff40d2582 → mov rsi, QWORD PTR [rbx+0x110]
[#5] 0x7ffff109f2d0 → llvm::AsmPrinter::emitFunctionBody()()
[#6] 0x7ffff40d21c3 → xor eax, eax
[#7] 0x7ffff09c30a5 → cmp BYTE PTR [rsp+0x38], 0x0
[#8] 0x7ffff065d0d9 → llvm::FPPassManager::runOnFunction(llvm::Function&)()
[#9] 0x7ffff065d424 → llvm::FPPassManager::runOnModule(llvm::Module&)()
```
<details><summary><strong>Version</strong></summary>
<p>
```
$ llc --version --verbose
LLVM (http://llvm.org/):
LLVM version 17.0.6
Optimized build.
Default target: x86_64-pc-linux-gnu
Host CPU: znver4
Registered Targets:
aarch64 - AArch64 (little endian)
aarch64_32 - AArch64 (little endian ILP32)
aarch64_be - AArch64 (big endian)
amdgcn - AMD GCN GPUs
arm - ARM
arm64 - ARM64 (little endian)
arm64_32 - ARM64 (little endian ILP32)
armeb - ARM (big endian)
avr - Atmel AVR Microcontroller
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
hexagon - Hexagon
lanai - Lanai
loongarch32 - 32-bit LoongArch
loongarch64 - 64-bit LoongArch
mips - MIPS (32-bit big endian)
mips64 - MIPS (64-bit big endian)
mips64el - MIPS (64-bit little endian)
mipsel - MIPS (32-bit little endian)
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc32le - PowerPC 32 LE
ppc64 - PowerPC 64
ppc64le - PowerPC 64 LE
r600 - AMD GPUs HD2XXX-HD6XXX
riscv32 - 32-bit RISC-V
riscv64 - 64-bit RISC-V
sparc - Sparc
sparcel - Sparc LE
sparcv9 - Sparc V9
systemz - SystemZ
thumb - Thumb
thumbeb - Thumb (big endian)
ve - VE
wasm32 - WebAssembly 32-bit
wasm64 - WebAssembly 64-bit
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
```
</p>
</details>
I can provide any more information if needed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykWU1zo7rS_jVk02UXCAx4kYUTxzOpSs7xm-Tk5L0bl0DC1gxIlCQcZ379LQkwH7GTzJ2pqdhC3Y-ebvUHkrFSbMspvXRmV85seYErvRPy8mlH19WvXzkt8E8qLxJB3i5vQUtGCegdU5AKQh1_4bhLx104oVv_z_N90Tzyr-BekCqnt0tw_CU4KNJFORGlniapg6JaTIlKpnSTsZxyXNBGEuminOa5g1ADZv8SmjFOYS8YASdwMyEcFDtoDk50VUsASKqtQKMXLU8AlFoCJkSqEqfUQbFnMQJXU6U9B8Wn59FMJD_Mt21qGCqNNS0F43pCD7goc-og1GfioFkns9HiJ-XWuhTnOTRDFLMwcNA1MB-Zj1LL3qj5mE6nDUHj3Sk9lFSygnKN8-k2nXaLTEu3RgQUxyhwzb8GB9wGHmhOja5-K2ljau3EZgnr1J7K2S9zcGZXxhHbdJKzvbH-c9c5s2XPPSL5MZU0FynWlHS-SUVO0vTsLp10QgszLc0Gtt59twFnDPGvaifUNK87wv2o-sC0zoozYZfmWHaBS8RG4azm1Tj_fJSbHW6FN6UwSTGOeeu1z8A_TY0hx81GF-WmUsbSOgBPSTeO_o3IZEWB5bZ1fzfqIv-syHsaZuNWFU81ExwWWkvl-AvgwjgkwelP4CKTlAIX6o2nwEXFXxkn8MryXFJdSQ4FLYR8c1DMBadH-Na-P43Bj00y4eO7fYOw1pIllabKTtXVMLr6M5Og2-q2TNfDW5CYg63aKbS1Oc9hMimwTHfwilXhIyd0p32O_-6whlsw1qcmb7WAHS5Lyo3vazAndCEVRclyqozRW8qpxMYqbCSmygiYkv8Ot0aipN9ZWkCJ1c5AcAI7zLcW-ZXpHSiN059ami1615Dq4fruZvF4A6pKCqYBQ1JtQdJSSG3pa12ayHHQykGrLdO7KpmmonDQyvaz-mNSSvGDptpBK6ZUZSxbWTKMp3lFKOgdrUlC0vJpHPdoCAKpivJI0Ph0vpZiK3EBWG4rE0c2fPM8nXgRdL1yvB9W3zP6DxXnjG-hxMoETHTMhbV5cI853lLpoAgEh8L24ndduGGITsH9S5OFUrRI8jc4fllLxvURNWtXNA392EGb3l7HsHswfShKPTJ3aZLNfR-sV_2F4y_Um6q_WFjrpydZ51onJPHrRigtKS4cFNosMrVtXhftVaWk2SKW1H_v7p7vJ140VcJBV-4B2yW7Mugg3xtxSpM0O8XpoeKPbMtx_h1zklOp2tL7pWUN6mBZNF6WeOSrWMQjAyy_hxVndIajyD2NlU6VmIYWx0-jyB3ABAOYLKYepp_CeJHrYTrAmfVNC5LAp8HX3BREVnYAFo7AgihKvgpmZAdg0RgsC85YeAIsC4ZmxgMwTNAsRl8DC63sAGzeB_PwPEPE7UXhQhVtqtkxLZhu8_tKkLffiEUvtOBd80S-545N8VL_y6Z4qT8AGySU56e-i2dfAsus6ABrkCWeOyMumffcslqb2taWtro8VPxv3rpmUDi6h-FXfZXaBQeM_DGjAAVfYFQffgZ82ke_wyZAwYBNMGZDcNpjk9MtTt-amtrxui3K_MjtjzkRnA44tek_i2lAghCTOIlPYeX7wosctEoYt8O0Ds84TuIBXjjC82MSQoEZ_zoojUk4wIyGFTPwU_J5xUSzdJQ38RiGxBg2G6O2URpLvTnHcwRMYjwAno9tpmQGNeRvWE1JL5uG70D130WmqQTG91RptsW2dzMO35b2CJTkWJU7WryZJnsLP7l4BRNIBvPMq5Uzu7JvsbMluIcoyzKazUwfCcC5QU4cOnMEm01Bi7R82-D9YeahTcVxzrackg2VhRocgSya16Flgdd0kyPaj6IcTCZ-XxcNdevmcUY3mM1JX9cf6dpecdQtxB4kYcY1__fv3w9LWD89mEOwVKV1fuQej7c1XNCHc5tuMYRTJ-CSQ50W3hhv1sPz3LphdHi_2zreuz0c8bUt4Yh_EBIoPhi-5qOnF_X03HlT_Y96aVHC1f8_3Yzd5cfGPHRt4r6PFvfRwrr-n7LyDzrBe9Pno0VNif-dRT8p9oMFT6Wl418TqjHLlePfOP61qswZ8a0ZaCn41vFvnqlUxgj_2kGr49Nm2Gm0iGU3OLmybWPmeLGvcetviVDNucwUflMVzPnoeDyyR19hjq-rflUAsNItkhdN3WnYTv1dalawX5RAUrGcTNvnS5rhKtegsdxSbQ4_hzjchMGkTCc549VhsuVVK_xdKA3X63-M2C--pzLo2wbwQLdMaSopgSeLp3rkALA5QoWB-QoTWCzqkdkxpnVOgXLCMO9dlxxVNj76SAVu79Y-OqmY0JFiwrYnFyrINuXQcrtfwrfrv-Db-h_Vk5EFtP8msHi4H0w1hjVTnxpmFKxZ5xVOmSULmvTX-cikvezT1QXNYfH8APcslSIVXEuR51R2CkmZ9RSu1isbeWbPT6AnZdZj0gifYWJk87Hsed_s6AFvBW_Ev9ejbjrHHLMj2p0Z9SaF4Fuz9z6CCfhokjANd-ahCYETcmEAEwiDc3IFK1Xnk_vb9aPh3uCeMdfotNHQ6TRrfKhTe-mdznlXGbXWte_ofaCmysB3j2qPazNyZlf9-7TeRTEA35f6cHTDX8-3y9sFrJ9eGg-PBI853hOsTekEyzKto98KrsUrletraO9WjhI5fScBdzcDoV7itUJhMJJ4BxMGAxgZum4vV0z6r_9R8H2JXl5eJt-X4cvLS0-aqXTfsD8G2cPt4_XkeSR09ESzk2MhVWKZHtd9NKPRZLO7zeSAtJ3fzwfzz71dVm9K0-JXO29H_-mm9a4qugx-MqPRZJPgzeQHCb6n0Ksczz2O9YVZO9O_zhpHjpHssqYvOQ6dQxz2Vmvc_xKHpi2tKdesKiZrKezNIE7Eng5UJ90izaY0qjf3YfBklRb3y34EHVIh6XG9l2sh6cfvEQ5alf23AAeteq8WPdlbSDGHUoo9IxQwf4PCLMV4JmTRnAwy4JQSSqYX5NInc3-OL-ilF7mR54X-fH6xu8wCks1RFLmul7ok8gOXhDiepSSeZxjP6AW7RC4KXOTO3HA2n82nGZlTF5EgcF0aBth1ApcWmOXT9tXiwt6vXsZu6McXOU5oruyvkwhx-gp20kHmPf9CXtqb2aTaKidwc6a06lA007n9WbO3neY175EVZU7h2zWoqrR3wM0PeMcr5u7SWdj78eYC1vGXxyvxi0rml__7xbG17b8BAAD___5eTT0">