<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 - Optimizer fails to generate SIB displacements in arithmetic expressions (x86_64)"
   href="https://bugs.llvm.org/show_bug.cgi?id=41301">41301</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Optimizer fails to generate SIB displacements in arithmetic expressions (x86_64)
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

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

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

        <tr>
          <th>OS</th>
          <td>Linux
          </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>-New Bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>bisqwit@iki.fi
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Consider this example code.

    unsigned test(unsigned a,unsigned b)
    {
        return a*4 + b - 1;
    }

GCC and ICC optimize this into a single instruction:

    lea eax, [rsi + rdi*4 - 1]

However, Clang generates two instructions, no matter which optimization level
(tried -O3, -Os, -Ofast):

    lea eax, [rsi + rdi*4]
    add eax, -1

Not only is the latter longer in terms of instructions, it is longer in terms
of opcodes as well (4 bytes versus 6).

Same happens on both negative and positive displacements.</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>