<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [AMDGPU][MC] Different conversion rules for integer literals and expressions"
   href="https://bugs.llvm.org/show_bug.cgi?id=40872">40872</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[AMDGPU][MC] Different conversion rules for integer literals and expressions
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Backend: AMDGPU
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>dpreobrazhensky@luxoft.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Currently assembler has different conversion rules for integer literals and
expressions which may confuse users.

Compare the rules:
<a href="https://llvm.org/docs/AMDGPUOperandSyntax.html#integer-literals">https://llvm.org/docs/AMDGPUOperandSyntax.html#integer-literals</a>
<a href="https://llvm.org/docs/AMDGPUOperandSyntax.html#amdgpu-synid-exp-conv">https://llvm.org/docs/AMDGPUOperandSyntax.html#amdgpu-synid-exp-conv</a>

For integer literals, assembler checks that the truncated bits are either all
zero or all ones. In the latter case the MSB of the result after truncation
must be 1. For example, the following code will trigger an error:

    v_add_f32 v0, 0x101ffffff00, v0 // error

In contrast, expressions are truncated to the expected operand size. No checks
are performed:

    x = 0x101ffffff00
    v_add_f32 v0, x, v0 // assembled ok

I believe conversion rules for integer literals and expressions should be as
close as possible.

There is a similar but different issue (<a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [AMDGPU][MC] Different conversion rules for literals and inlinable constants"
   href="show_bug.cgi?id=40806">bug 40806</a> "Different conversion rules
for literals and inlinable constants").</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>