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?