https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112742
Bug ID: 112742
Summary: missed vectorization with src[a*b+i] where a*b is not
int rather than same percission as size_type
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Blocks: 53947
Target Milestone: ---
Target: x86_64-*-* aarch64-*-*
Take:
```
void f(unsigned char * __restrict src,
unsigned stride, int h, int row)
{
unsigned char *src1 = src+row*stride;
for(int col = 0; col < h; col++)
{
src1[col]=src1[col] + 1;
}
}
void f1(unsigned char * __restrict src, unsigned rs,
unsigned cs, unsigned stride, int h, int row)
{
for(int col = 0; col < h; col++)
{
src[row*stride+col]=src[row*stride+col] + 1;
}
}
```
These 2 function should be vectorized. But f1 does not. If we use -m32 (or
-mabi=ilp32 on aarch64) f1 does now get vectorized.
Note LLVM is able to vectorize f1 for both aarch64 and x86_64.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
[Bug 53947] [meta-bug] vectorizer missed-optimizations