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