https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79803

            Bug ID: 79803
           Summary: [5/6/7 Regression] ICE in tree_ssa_prefetch_arrays, at
                    tree-ssa-loop-prefetch.c:1982
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---
            Target: x86_64-linux-gnu

Starting from 4.9 we ICE as loop prefetching is not happy about odd value of
l1-cache-line-size:

$ gcc /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/setjmp-3.c
-march=opteron-sse3 -Ofast --param l1-cache-line-size=510761359

/home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/setjmp-3.c:16:5: internal
compiler error: in tree_ssa_prefetch_arrays, at tree-ssa-loop-prefetch.c:1982
 int execute(int cmd)
     ^~~~~~~
0x112e0e1 tree_ssa_prefetch_arrays()
        ../../gcc/tree-ssa-loop-prefetch.c:1982
0x112e243 execute
        ../../gcc/tree-ssa-loop-prefetch.c:2041

The assert:

  /* We assume that size of cache line is a power of two, so verify this
     here.  */
  gcc_assert ((PREFETCH_BLOCK & (PREFETCH_BLOCK - 1)) == 0);

I'm thinking whether it's right assumption done by the prefetching pass? If so,
maybe we can validate the valid in target?

Reply via email to