<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </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 --- - Store merging in DAGCombine if first stores are not consecutive" href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D24341&d=AwMBaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=pF93YEPyB-J_PERP4DUZOJDzFVX5ZQ57vQk33wu0vio&m=KFBFqWl-gOWvEUI7ATfqShJbLcHsgglf_Iiw6z_Prgo&s=Wm2gVs4P0I7NLRqGAdffuBeW1mm1t8hG6z0jGyRyo5o&e=">24341</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Store merging in DAGCombine if first stores are not consecutive
          </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>All
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>Common Code Generator Code
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>tom.aernoudt@synopsys.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=14683" name="attach_14683" title="testcase">attachment 14683</a> <a href="attachment.cgi?id=14683&action=edit" title="testcase">[details]</a></span>
testcase

Store merging does not happen if the first ordered stores of the chain are non
consecutive. If that is the case consecutive stores later in the ordered list
are not merged.

eg The following code:

void fail(unsigned long long* p) {
  unsigned char* q = (unsigned char*)p;
  q[4] = 1;
  q[0] = 1;
  q[5] = 1;
  q[2] = 1;
}

compiles to:
        movb    $1, 4(%rdi)
        movb    $1, (%rdi)
        movb    $1, 5(%rdi)
        movb    $1, 2(%rdi)


If the consecutive stores are first on the ordered list, the stores are merged
correctly.

eg The following code:

void ok(unsigned long long* p)
{
  unsigned char* q = (unsigned char*)p;

  q[4] = 1;
  q[0] = 1;
  q[6] = 1;
  q[1] = 1;
}

Compiles to:
        movb    $1, 4(%rdi)
        movb    $1, 6(%rdi)
        movw    $257, (%rdi)            # imm = 0x101</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>