<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">