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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] Miscompilation of inline assembly
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    It looks like LLC is miscompiling passing a register load to inline assembly:

```llvm-ir
target datalayout = "e-m:e-p:32:32-i64:64-n32-S128"
target triple = "riscv32"

@_ZN5repro9MY_BUFFER17hb0f674501d5980a6E = external global <{ [16 x i8] }>

define void @using_inout() {
start:
  %0 = tail call ptr asm sideeffect alignstack "ecall", "=&{x10},0,~{vtype},~{vl},~{vxsat},~{vxrm},~{memory}"(ptr @_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
  ret void
}
```
Running llc on this crashes with assertions enabled (https://godbolt.org/z/1zWaoxKKE).

Without assertions, it generates incorrect code (https://godbolt.org/z/43c4W44nY); notice that it silently discards the load of the low bits of `_ZN5repro9MY_BUFFER17hb0f674501d5980a6E` causing an incorrect value to be loaded in register `a0`:

```asm
using_inout: # @using_inout
        lui     a0, %hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
        ecall
 ret
```

This regression looks like it happened somewhere between llvm 17 (https://godbolt.org/z/o6eWGx68o) and llvm 18 (https://godbolt.org/z/fMMd9Gf3W).

For more background, see https://github.com/rust-lang/rust/issues/128212

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU1v4zYQ_TX0ZeCAIvVhHXyI7fVisZsesm2D7SWgpJHEhiINcuTYe-hvLyg5G2_QFqlgUByaehy-eTOjQtCdRVyzbMOy3UKN1Du_Dv2Tc4vKNef1JwLj3FMAo58QvnzZgg4w6FC74aCNth0cIojtQIHHTgdCD8apBsiBtkZbBBUCDpU5M3nL-I7xlzHn88-Y47DUfl4l5TskaBQpo85uJGByB0wIXA5M3uLywOStFNOw1HnK5G2eLq0Uy6-JWDEhfoIhrw8GXyC8DvVRih-bLmPKH__4JfN48K68-_a4-W2__3CfFH3F27xIM540WbniKv8w4eCJ0FtloDOuUgaY3LJiAyzbJDmcQK9YtgNW7Jj8cH1Kg23k4uh0AyzlY-TsUVs3Eotul8CKzbwzkPL0gysAJjI-nUxKG6iVMXAgDyoMEHSD2LZYEyijOxtI1U8TWXFbvKfYRpPJHRM5KzanhEfXxJYzsf2LFZsjnQ84L02muZqfgqJr0w-v1oCD8-fJFkysokPv55GJ8uVyHmni5EJVsXujjdm8H62NGjOmBmeBeh2g9ir0GOBZUz9JzJN2NgBaVRlsgIlVT3QIkUmxZ2LfuaZyhm6c75jYf2din3x_UO70-XN06OY6WA-a-ii9V9hIpCbo0KJXhAG0rZ33kfnaNfie01JZpw9par_F68sNWEe6RqBeUYQO2qAlc4ZGh1r5JgD1OKeSay_zZ6g0hWiz_N1k5xxqNc45aq_8PiozYkzTaj4GG9D2NYlZztUUgX_JWhWGeeVayvIWmJBvBX6J9fyYUU9vxWdxZr1mYvX_lTM_s9DnJY_0j-qZx1-jaDx2HkPQzl6XNU3Qq8MBLTYQ3IDPPXqECukZ0UIsT5AU7wmxy_Hh4ylfuZjQyjaXb1fv-ba9u2vKj618eCvGvfMwuOiQqp8670bbROYCIrzB1NSP1U3tBib2fgy0NMp2lzkTex3CiCHqXqxEcqmBi2Ytm1KWaoHrpBCCJ2lS5It-XRVl2zaqLlrkyOtStq1CwRUvEVteFQu9FlykvBB5UiR5kt9IqVpMZVOqIsuSQrKU46C0uYksxJsuJg_WCedFUS6MqtCEqfUIYfEZpn9jPcl2C7-eukI1doGl3OhA4RWGNJmpZ91_-rr9Pdbbu5eOpGK2xgR503sWozfr_6ArYl9ey4N3f2L9M2Ozy8e1-DsAAP__tsIuQQ">