https://llvm.org/bugs/show_bug.cgi?id=27195

Johannes Doerfert <doerf...@cs.uni-saarland.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|FIXED                       |---

--- Comment #2 from Johannes Doerfert <doerf...@cs.uni-saarland.de> ---
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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to