[Bug target/65951] [AArch64] Will not vectorize 64bit integer multiplication
vekumar at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 9 11:22:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65951
vekumar at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |vekumar at gcc dot gnu.org
--- Comment #6 from vekumar at gcc dot gnu.org ---
I found similar pattern in SPEC2006 hmmer benchmark, when comparing x86_64 (
-O3 + -march=bdver3 vs. -O3 + -mcpu=cortex-a57). x86_64 was able to vectorize 5
additional loops. Out of 5 loops, two were cost model related and aarch64
rejects because of running high vector cost.
Remaining three loops are of this pattern. one used a constant 104.
The other two of them used multiplication by 4 and that could be converted to
vector shifts.
I made a simple test case and wanted to open a PR. James pointed me to this PR.
Thought of posting it as comments.
unsigned long int __attribute__ ((aligned (64)))arr[100];
int i;
void test_vector_shifts()
{
for(i=0; i<=99;i++)
arr[i]=arr[i]<<2;
}
void test_vectorshift_via_mul()
{
for(i=0; i<=99;i++)
arr[i]=arr[i]*4 ;
}
Assembly
------------
.cpu cortex-a57+fp+simd+crc
.file "test.c"
.text
.align 2
.p2align 4,,15
.global test_vector_shifts
.type test_vector_shifts, %function
test_vector_shifts:
adrp x0, arr
add x0, x0, :lo12:arr
adrp x1, arr+800
add x1, x1, :lo12:arr+800
.p2align 2
.L2:
ldr q0, [x0]
shl v0.2d, v0.2d, 2 <==vector shifts
str q0, [x0], 16
cmp x0, x1
bne .L2
adrp x0, i
mov w1, 100
str w1, [x0, #:lo12:i]
ret
.size test_vector_shifts, .-test_vector_shifts
.align 2
.p2align 4,,15
.global test_vectorshift_via_mul
.type test_vectorshift_via_mul, %function
test_vectorshift_via_mul:
adrp x0, arr
add x0, x0, :lo12:arr
adrp x2, arr+800
add x2, x2, :lo12:arr+800
.p2align 2
.L6:
ldr x1, [x0]
lsl x1, x1, 2
str x1, [x0], 8 <==scalar shifts
cmp x0, x2
bne .L6
adrp x0, i
mov w1, 100
str w1, [x0, #:lo12:i]
ret
.size test_vectorshift_via_mul, .-test_vectorshift_via_mul
More information about the Gcc-bugs
mailing list