<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:doerfert@cs.uni-saarland.de" title="Johannes Doerfert <doerfert@cs.uni-saarland.de>"> <span class="fn">Johannes Doerfert</span></a>
</span> changed
              <a class="bz_bug_link 
          bz_status_REOPENED "
   title="REOPENED --- - Delinearization fails to recognize the correct access function"
   href="https://llvm.org/bugs/show_bug.cgi?id=27195">bug 27195</a>
        <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Status</td>
           <td>RESOLVED
           </td>
           <td>REOPENED
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Resolution</td>
           <td>FIXED
           </td>
           <td>---
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_REOPENED "
   title="REOPENED --- - Delinearization fails to recognize the correct access function"
   href="https://llvm.org/bugs/show_bug.cgi?id=27195#c2">Comment # 2</a>
              on <a class="bz_bug_link 
          bz_status_REOPENED "
   title="REOPENED --- - Delinearization fails to recognize the correct access function"
   href="https://llvm.org/bugs/show_bug.cgi?id=27195">bug 27195</a>
              from <span class="vcard"><a class="email" href="mailto:doerfert@cs.uni-saarland.de" title="Johannes Doerfert <doerfert@cs.uni-saarland.de>"> <span class="fn">Johannes Doerfert</span></a>
</span></b>
        <pre>For the attached test case we get the following delinearization after r265379:

    Arrays {
        <4 x i16> MemRef_A[*][4]; // Element size 8
    }

            ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
                [N, P] -> { Stmt_for_body[i0] -> MemRef_A[0, P + 7i0] };
            MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
                [N, P] -> { Stmt_for_body[i0] -> MemRef_A[7i0, 0] };


However, this is not correct as it should be
            ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
                [N, P] -> { Stmt_for_body[i0] -> MemRef_A[7i0 + P, 0] };
which is not equivalent. 


If we turn of delinearization here we get the correct (one dimensional) result:
    Arrays {
        <4 x i16> MemRef_A[*]; // Element size 8
    }

            ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]
                [N, P] -> { Stmt_for_body[i0] -> MemRef_A[P + 7i0] };
            MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]
                [N, P] -> { Stmt_for_body[i0] -> MemRef_A[7i0] };

Note that the access functions are the same as they are after r265379 __but__
the base structure is not. Especially the write access functions after r265379
is in the first dimension, thus will be multiplied by 4 during linearization.
This does not then not match the read access function.</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>