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

    <tr>
        <th>Summary</th>
        <td>
            [AMDGPU][GFX10] Some VOP3 opcodes do not support abs and neg modifiers
        </td>
    </tr>

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

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

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

<pre>
    The following GFX10 opcodes do not support abs/neg modifiers though they should:

    v_mov_b32_e64
    v_movreld_b32_e64
    v_movrels_b32_e64
    v_movrelsd_2_b32_e64
    v_movrelsd_b32_e64

These opcodes do not have FP operands but they are actually typeless.
GFX10 SPG states explicitly that these opcodes should support abs/neg modifiers.
Note that v_cndmask_b32_e64 do support abs and neg modifiers.

An example of failed test:

    v_mov_b32_e64 v5, -v1

Expected result:

    0x05,0x00,0x81,0xd5,0x01,0x01,0x00,0x20

Actual output:

    error: not a valid operand.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyFU02PmzAQ_TVwGW3kmJBsDhy23SantpG2rXqLBnv46BqMbEM3_74DJNqPblOEPGbGPL83z86tPmXfKoLCGmN_120J-93PpQDbKavJg7bQ2gC-7zrrAmDuI7lrqYTG6rqoyXkIle3LigOdwPPc6Ci5i8R9JM4j8DMcGzsc80Qeab16k3Zk9L9L_kpJH-XV6qvaPLJYT2_lVTgQ7A6cJoet9pD3YRaEjgBV6NGYE4RTR4a8X8xQc6ceDnvwAQOj0VNnalWHcWmFE8KLvebeXGvlGfeLDTQDDEfV6gb940XJSPgFADBZeA9iHu9apoRNZ5hEAQXWhjQw0fA_g2BII_kRbobly2WfnjpSgSEc-d68ByKexPgjBzGF2-UU9Dm5fBXmJVK8Yjy1Gmwfuv69Dcg56zg_uYYwoKn1xbWz9Fhnid4mW4wDO0FZlH64-3y_P3yP0nueT6bxFB5sQ_Dj6yG5ctb_7m_cO5NVIXR-ZCd3_JZ1qPp8oWzDH8YMl3DTOfuLG8aftfc9jXanq802jatsc6tQbGWRbMWKVH6rlBC0Rlyu0zWuknVsMOcTPJKPpMxRPVI7XquzEilZQVxnUkgpVmKzlKlM5AIZR4m8ICUxTwoRrQQ17PpipLOwroxdNjHL-9Jz0dQ--Ociel-XLU0tG_Gx56vtMt05srnDeFKRTRL-AIMMUo8">