This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, ARM] Improve code-gen for multiple shifted accumulations in array indexing
- From: Yufeng Zhang <Yufeng dot Zhang at arm dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: Ramana Radhakrishnan <ramana dot radhakrishnan at arm dot com>
- Date: Wed, 18 Jun 2014 17:31:56 +0100
- Subject: [PATCH, ARM] Improve code-gen for multiple shifted accumulations in array indexing
- Authentication-results: sourceware.org; auth=none
Hi,
This patch improves the code-gen of -marm in the case of two-dimensional
array access.
Given the following code:
typedef struct { int x,y,a,b; } X;
int
f7a(X p[][4], int x, int y)
{
return p[x][y].a;
}
The code-gen on -O2 -marm -mcpu=cortex-a15 is currently
mov r2, r2, asl #4
add r1, r2, r1, asl #6
add r0, r0, r1
ldr r0, [r0, #8]
bx lr
With the patch, we'll get:
add r1, r0, r1, lsl #6
add r2, r1, r2, lsl #4
ldr r0, [r2, #8]
bx lr
The -mthumb code-gen had been OK.
The patch has passed the bootstrapping on cortex-a15 and the
arm-none-eabi regtest, with no code-gen difference in spec2k
(unfortunately).
OK for the trunk?
Thanks,
Yufeng
gcc/
* config/arm/arm.c (arm_reassoc_shifts_in_address): New declaration
and new function.
(arm_legitimize_address): Call the new functions.
(thumb_legitimize_address): Prefix the declaration with static.
gcc/testsuite/
* gcc.target/arm/shifted-add-1.c: New test.
* gcc.target/arm/shifted-add-2.c: Ditto.