PING. On Tue, Jan 24, 2012 at 04:10:19PM +0000, Sameera Deshpande wrote: > Hi, > > Please find attached the patch fixing bug 49069. > > This patch is tested with check-gcc on trunk and 4.6 without regression. > OK for trunk? > Is it fine to backport to 4.6 branch? > > ChangeLog: > 2012-01-24 Sameera Deshpande <sameera.deshpa...@arm.com> > PR target/49069 > gcc/config/arm/arm.md (cstoredi4): Handle the case when both > operands are const_int. > > gcc/testsuite/ChangeLog: > 2012-01-24 Sameera Deshpande <sameera.deshpa...@arm.com> > PR target/49069 > gcc.target/arm/pr49069.c: New compile-only test. > > - Thanks and regards, > Sameera D.
> diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md > index 751997f..e3dc98f 100644 > --- a/gcc/config/arm/arm.md > +++ b/gcc/config/arm/arm.md > @@ -7911,8 +7911,9 @@ > enum rtx_code code = GET_CODE (operands[1]); > > /* We should not have two constants. */ > - gcc_assert (GET_MODE (operands[2]) == DImode > - || GET_MODE (operands[3]) == DImode); > + if (!(GET_MODE (operands[2]) == DImode || GET_MODE (operands[3]) == > DImode) > + && !(reload_in_progress || reload_completed)) > + operands[3] = force_reg (DImode, operands[3]); > > /* Flip unimplemented DImode comparisons to a form that > arm_gen_compare_reg can handle. */ > diff --git a/gcc/testsuite/gcc.target/arm/pr49069.c > b/gcc/testsuite/gcc.target/arm/pr49069.c > new file mode 100644 > index 0000000..3cc903e > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/pr49069.c > @@ -0,0 +1,24 @@ > +/* { dg-do compile } */ > +/* { dg-options "-Os -mfloat-abi=softfp -mfpu=vfpv3-d16" } */ > + > +__extension__ typedef unsigned long long int uint64_t; > + > +static int > +func2 (int a, int b) > +{ > + return a == 0 ? a : a / b; > +} > + > +int array1[1]; > +const uint64_t array2[1] = { 1 }; > + > +void > +foo (void) > +{ > + for (array1[0] = 0; array1[0] == 1; array1[0]++) > + { > + } > + if (bar (array2[0] == func2 (array1[0], 0)) == 0) > + { > + } > +} -- Matthew Gretton-Dann Principal Engineer, PD Software, ARM Ltd.