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

    <tr>
        <th>Summary</th>
        <td>
            [WebAssembly] AsmTypeCheck does not handle block return values of unreachable block end
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:WebAssembly
      </td>
    </tr>

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

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

<pre>
    `AsmTypeCheck` does not handle block/loop's concrete return values when their end is not reachable, for example,
```s
block i32
br 0
end
```
This is a valid wasm program but does not pass `AsmTypeCheck`.

Currently Wasm backend does not generate `block`/`loop` return types, but one exception is, the ones generated by `WebAssemblyCFGStackify::fixEndsAtEndOfFunction`:
https://github.com/llvm/llvm-project/blob/093b8bfe6b64c916647ae64af8066df22bb6ea65/llvm/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp#L1460-L1520

An example program that would generate this case is
```ll
;; test.ll
target triple = "wasm32-unknown-unknown"

define i32 @loop_i32() {
entry:
  br label %header
header:
  br label %header
}
```
which generates
```s
loop i32
br 0
end
```

The reproducing commands:
```console
$ llc test.ll
$ llvm-mc -triple=wasm32-unknown-unknown test.s
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVE2P4jgQ_TXmYoEcOzHkkAPdDHsZaQ_b0hxX_qgQD44d2U7T_PuVk0DTvS2NWkIkVUo913v1XCJGc3IADaqeUHVYiTF1PjSiA_ht3Ep6fW0QJ_vYv1wHeO5AnREnWHuI2PmEO-G0BSytV2dEj9b7AdFtxMo7FSABDpDG4PCrsCNEfOnA4dSBCRicxmYGCSBUJ6QFRJ9x6wOGN9EPU4jIAZE94mT-xTmejsOG0SUMmMxv4PSnijl86UzMp4nciNH4ImKPh-BPQfRYjumd0CBixP9nvFlgp__nMQRwyV7xr4wjhTpnNneMEzgIIkHGmZXhBNEj4mTSh5ObKuk6QMykcwveAYY3BUMy3mEz5VMHOR_vkBrLa4b9BXIfI_TSXp-Pf_2ThDqb9orYHrF9a95-OB336YfTf7fH0amMmHtgC4EupSHmiB4RPZ5M6ka5Ub7PE7Svt8d6CP43qIToUVovET2SmsmdbIFLXqq64LzcCuClaHeEc91SKiUHwasHHJPrXkQ4QcZ5aPtj9EBio4YBUfazKDlZ_ywqSh6137ubO-7zS51I-OJHq9-VT3ngSkTIQn50hLVLgj0h9oQTxLS55dLUKE7B5AMQO2BEaTYLo-vRnZ2_uNsTUfrYl4bWOMiexKic5vxv9ifdIVpjtH26-TOF630MGMuArZBgMaJVB0JDWAY0v__5Q7Q9fGn4S2dUd5fjswRLnLv8zi263aV8q4fg9aiMO2Hl-144He_d3quUd9FbWLK0xNaqj3rPydd-3Su8nlVH7PC14HPlZyor3TBds1qsoCm2tOKkYDVfdY0iu5brcquBlVIXEmBLi13BZCFlvZWwMg0ltCQ14aQqWcE3hZClIKSmtS4UqxQqCfTC2E3ucOPDaWViHKEpyLai5WqaR5wWJ6XLDkBs_8HiNO_U0EwU5XiK2RompvgOmUyy0_Z9rKsO-HH_fL1uP61W3-LR3Tfp8gk4vRqDbb594SemEdHjQva1of8FAAD__-lC6i0">