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

    <tr>
        <th>Summary</th>
        <td>
            [avr] Inline assembly constraint "i" not working.
        </td>
    </tr>

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

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

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

<pre>
    [Inline assembly documentation](https://clang.llvm.org/compatibility.html#inline-asm) states that:
> *"Clang is highly compatible with the GCC inline assembly extensions, allowing the same set of constraints, modifiers and operands as GCC inline assembly."*

Clang doesn't even document generic constraints, so all constraints should work like in GCC, in particular `"i"` which means *"immediate"* in GCC, which is a value that's known at link time or earlier.

The following code just loads `&gc` (which is known at link time, thus satisfies `"i"`) to `addr`:
```c++
char gc;

char* func (void)
{
    char *addr;
    __asm ("ldi %A0, lo8(%1)" "\n\t"
           "ldi %B0, hi8(%1)"
           : "=d" (addr)
           : "i" (&gc));
    return addr;
}
```

The following crazy code is generated with `-target avr -Os -save-temps -mmcu=atmega168`:
```
func:
        ;APP
        ldi     r24, lo8(94043489596112)
        ldi     r25, hi8(94043489596112)
        ;NO_APP
        ret
```
where avr-gcc generates:
```
func:
/* #APP */
        ldi r24, lo8(gc)
        ldi r25, hi8(gc)
/* #NOAPP */
        ret
```
and symbol `gc` resolves to the SRAM address of `gc`


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNVU2T4jYQ_TXmooKyZfx18IGBTCqH7GwluU8Ju7G1I0uUJEPIr0-3zICZmU2FchlZ6n79-nVL2pv2UkfZ029aSQ1MOAfDXl1Ya5pxAO2Fl0ZH2S7iZe_90UXpJuLP-DRK6G6l1GlYGdvRhBmOaL2XSvrLqveDingqA-xSuCHiFXMIB475XnjCiXdRvInSX1jEEZRvCZFJx3rZ9UjhHVABO0vfoxuwX7dbJj9Qhb89aIc0XcS3TChlzhKByNyJAV_gmTkgnHbeCql9sBtMKw8SrGNCt8wcweI_frivYqyQHpGcGIf3xLY14HTEC8_gBPqmGutAg5XNx6DOEL_5LHO9GVXLzsa-MSXfAEMTA7LG0VFYL5tRCcuiPEYWkpjkMTv3sunZAEK7q3xyGKCVKPDEdYYz2aKwgp2EGmEqAC8ce9PmrJnwGFm_MS9RLWMZCKtQmdU83b9QzYN517YxLbAfo0NHI1C1wC3vGmKGnXIL-Bmf-Ph-xLyxtA4L4B4TozbxhuZE21qauDUKjsPTRPyJnjDb9CgNBk6f5mxpljQ4jLohQicjW0S-mhRXW4a_4I-mIVo6W3h9xaYlX-SlWomjbBMTe2XKMJslhMg5I-LZFjfJ1tPwhnD93f2fgn8vH_0_O6SbgJnu2gm-DOTe6X-2lFezqQQEWj2kYsGPFsswTzEqdh9k_Y9qW_HPZao51jS0NrZZO-1K9Fx6YTvcZOJk2fLFsaUTJ1h6GI44HoZmxFSEH6ATSV5-WdLpk6p1X4spic3377dPVBHflq_vVajW8Tpdl1VW5UnC7xW-G2d3yX9ujIG-vbzOY6FkX1I892CBEl12TXOTwv2_jOjcpIKlGGnatM9zvuwhtamSj8uzZObLN9xvL18g_ywVOvbcZdgbRTWc9q4FZ9SJjmgTzs8__9j8HvoGnKMz9N1w3isLqJM8LypeJGW2aOu0rdJKLLz0CuhmQbHw_mAfL5j7GXhrYW18OAex51aL0ar68cbpsN3G_QqvBfygi-f6tzxa8wMa3HzP0rkRq8Gfs7IsqkVfNwBZnCeH-AAihvU-zrIm502e83VbxUm2UGIPyhFPZKDhzAJE2NK7hax5zHmSxGVSxDnPVjw5FFlVFhnEecWhjdYxDEKq2z24sHWgtB87h4tKOu_ui5i87DQEWQhfjL43tnZHizLgVbRfhOh1YP8vLBQyLg">