[PATCH][ARM] FAIL: gcc.target/arm/pr58041.c scan-assembler ldrb
Maciej W. Rozycki
macro@codesourcery.com
Tue May 27 23:04:00 GMT 2014
On Tue, 27 May 2014, Kyrill Tkachov wrote:
> > > This change however has regressed gcc.dg/vect/vect-72.c on the
> > > arm-linux-gnueabi target, -march=armv5te, in particular in 4.8.
> > And what are all the configure flags you are using in case some one
> > has to reproduce this issue ?
>
> Second that. My recently built 4.8 (gcc version 4.8.2 20130531) for vect-72
> with options:
> -O2 -ftree-vectorize -march=armv5te -mfpu=neon -mfloat-abi=hard
> -fno-vect-cost-model -fno-common
>
> gives code the same as your original one:
> .L14:
> sub r1, r3, #16
> add r3, r3, #16
> vld1.8 {q8}, [r1]
> cmp r3, r0
> vst1.64 {d16-d17}, [r2:64]!
> bne .L14
> ldr r3, .L22+12
> add ip, r3, #128
> add r2, r3, #129
I have this:
.L14:
sub r1, r3, #16 @ 130 *arm_addsi3/7 [length = 4]
add r3, r3, #16 @ 135 *arm_addsi3/2 [length = 4]
vld1.8 {q8}, [r1] @ 131 *movmisalignv16qi_neon_load [length = 4]
cmp r3, r0 @ 136 *arm_cmpsi_insn/3 [length = 4]
vst1.64 {d16-d17}, [r2:64]! @ 133 *neon_movv16qi/2 [length = 8]
bne .L14 @ 137 arm_cond_branch [length = 4]
without and this:
.L14:
vldr d16, [r3, #-16] @ 130 *neon_movv16qi/4 [length = 8]
vldr d17, [r3, #-8]
add r3, r3, #16 @ 133 *arm_addsi3/2 [length = 4]
cmp r3, r1 @ 134 *arm_cmpsi_insn/3 [length = 4]
vst1.64 {d16-d17}, [r2:64]! @ 131 *neon_movv16qi/2 [length = 8]
bne .L14 @ 135 arm_cond_branch [length = 4]
with your change applied respectively so clearly it's making its intended
effect of disabling the use of movmisalignv16qi_neon_load.
However VLD1.8 can also be produced from other RTL patterns, or maybe you
don't have `unaligned_access' set to zero for some reason, which you
should (for ARMv5TE) according to this gcc/config/arm/arm.c piece:
/* Enable -munaligned-access by default for
- all ARMv6 architecture-based processors
- ARMv7-A, ARMv7-R, and ARMv7-M architecture-based processors.
- ARMv8 architecture-base processors.
Disable -munaligned-access by default for
- all pre-ARMv6 architecture-based processors
- ARMv6-M architecture-based processors. */
if (unaligned_access == 2)
{
if (arm_arch6 && (arm_arch_notm || arm_arch7))
unaligned_access = 1;
else
unaligned_access = 0;
}
else if (unaligned_access == 1
&& !(arm_arch6 && (arm_arch_notm || arm_arch7)))
{
warning (0, "target CPU does not support unaligned accesses");
unaligned_access = 0;
}
-- can you build vect-72.c with -dp and see which pattern VLD1.8 is
produced from in your case?
As to the GCC configure options I have as I say nothing there beyond
making -march=armv5te the default (surely you're not interested in
--prefix, etc.). For the record the test framework adds these options on
top of that for this particular case:
-fno-diagnostics-show-caret -mfpu=neon -mfloat-abi=softfp -ffast-math
-ftree-vectorize -fno-vect-cost-model -fno-common -O2
-fdump-tree-vect-details
but these should be no different in your case (except perhaps from
`-mfloat-abi=', but that shouldn't matter as this is no FP code).
I have double-checked with current (r210984) 4.8 now and the issue is
still there.
Maciej
More information about the Gcc-patches
mailing list