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?