diff mbox series

arm: Generate correct const_ints (PR86640)

Message ID 2ee02a7d9d6cbab11c23563cc9f561cdcbe8b9af.1532955615.git.segher@kernel.crashing.org
State New
Headers show
Series arm: Generate correct const_ints (PR86640) | expand

Commit Message

Segher Boessenkool July 30, 2018, 1:14 p.m. UTC
In arm_block_set_aligned_vect 8-bit constants are generated as zero-
extended const_ints, not sign-extended as required.  Fix that.

Tamar tested the patch (see PR); no problems were found.  Is this okay
for trunk?


Segher


2018-07-30  Segher Boessenkool  <segher@kernel.crashing.org>

	PR target/86640
	* config/arm/arm.c (arm_block_set_aligned_vect): Use gen_int_mode
	instead of GEN_INT.

---
 gcc/config/arm/arm.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

Comments

Kyrill Tkachov July 30, 2018, 2:55 p.m. UTC | #1
Hi Segher,

On 30/07/18 14:14, Segher Boessenkool wrote:
> In arm_block_set_aligned_vect 8-bit constants are generated as zero-
> extended const_ints, not sign-extended as required.  Fix that.
>
> Tamar tested the patch (see PR); no problems were found.  Is this okay
> for trunk?
>

The patch is okay but please add the testcase from the PR to gcc.dg/
or somewhere else generic (it's not arm-specific).
Thanks Tamar for testing.

Kyrill

>
> Segher
>
>
> 2018-07-30  Segher Boessenkool <segher@kernel.crashing.org>
>
>         PR target/86640
>         * config/arm/arm.c (arm_block_set_aligned_vect): Use gen_int_mode
>         instead of GEN_INT.
>
> ---
>  gcc/config/arm/arm.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index cf12ace..f5eece4 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -30046,7 +30046,6 @@ arm_block_set_aligned_vect (rtx dstbase,
>    rtx dst, addr, mem;
>    rtx val_vec, reg;
>    machine_mode mode;
> -  unsigned HOST_WIDE_INT v = value;
>    unsigned int offset = 0;
>
>    gcc_assert ((align & 0x3) == 0);
> @@ -30065,10 +30064,8 @@ arm_block_set_aligned_vect (rtx dstbase,
>
>    dst = copy_addr_to_reg (XEXP (dstbase, 0));
>
> -  v = sext_hwi (v, BITS_PER_WORD);
> -
>    reg = gen_reg_rtx (mode);
> -  val_vec = gen_const_vec_duplicate (mode, GEN_INT (v));
> +  val_vec = gen_const_vec_duplicate (mode, gen_int_mode (value, QImode));
>    /* Emit instruction loading the constant value.  */
>    emit_move_insn (reg, val_vec);
>
> -- 
> 1.8.3.1
>
Segher Boessenkool July 30, 2018, 5:37 p.m. UTC | #2
On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
> Hi Segher,
> 
> On 30/07/18 14:14, Segher Boessenkool wrote:
> >In arm_block_set_aligned_vect 8-bit constants are generated as zero-
> >extended const_ints, not sign-extended as required.  Fix that.
> >
> >Tamar tested the patch (see PR); no problems were found.  Is this okay
> >for trunk?
> >
> 
> The patch is okay but please add the testcase from the PR to gcc.dg/
> or somewhere else generic (it's not arm-specific).

It only failed with very specific options, which aren't valid on every
ARM config either I think?

-O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a

I don't know the magic incantations for ARM tests, sorry.


Segher
Kyrill Tkachov July 31, 2018, 8:02 a.m. UTC | #3
Hi Segher,

On 30/07/18 18:37, Segher Boessenkool wrote:
> On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
>> Hi Segher,
>>
>> On 30/07/18 14:14, Segher Boessenkool wrote:
>>> In arm_block_set_aligned_vect 8-bit constants are generated as zero-
>>> extended const_ints, not sign-extended as required.  Fix that.
>>>
>>> Tamar tested the patch (see PR); no problems were found.  Is this okay
>>> for trunk?
>>>
>> The patch is okay but please add the testcase from the PR to gcc.dg/
>> or somewhere else generic (it's not arm-specific).
> It only failed with very specific options, which aren't valid on every
> ARM config either I think?
>
> -O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a

This is a fairly common Arm configuration that is tested by many people by default,
so you wouldn't need to add any arm-specific directives. Just putting it in one of
the generic C tests folders would be enough.

Thanks for fixing this,
Kyrill

> I don't know the magic incantations for ARM tests, sorry.
>
>
> Segher
Segher Boessenkool July 31, 2018, 11:38 a.m. UTC | #4
On Tue, Jul 31, 2018 at 09:02:56AM +0100, Kyrill Tkachov wrote:
> Hi Segher,
> 
> On 30/07/18 18:37, Segher Boessenkool wrote:
> >On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
> >>Hi Segher,
> >>
> >>On 30/07/18 14:14, Segher Boessenkool wrote:
> >>>In arm_block_set_aligned_vect 8-bit constants are generated as zero-
> >>>extended const_ints, not sign-extended as required.  Fix that.
> >>>
> >>>Tamar tested the patch (see PR); no problems were found.  Is this okay
> >>>for trunk?
> >>>
> >>The patch is okay but please add the testcase from the PR to gcc.dg/
> >>or somewhere else generic (it's not arm-specific).
> >It only failed with very specific options, which aren't valid on every
> >ARM config either I think?
> >
> >-O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a
> 
> This is a fairly common Arm configuration that is tested by many people by 
> default,
> so you wouldn't need to add any arm-specific directives. Just putting it in 
> one of
> the generic C tests folders would be enough.

Ah ok, so just dg-options -O3 will do?

(As before, I have no reasonable way to test this).


Segher
Kyrill Tkachov July 31, 2018, 11:55 a.m. UTC | #5
On 31/07/18 12:38, Segher Boessenkool wrote:
> On Tue, Jul 31, 2018 at 09:02:56AM +0100, Kyrill Tkachov wrote:
>> Hi Segher,
>>
>> On 30/07/18 18:37, Segher Boessenkool wrote:
>>> On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
>>>> Hi Segher,
>>>>
>>>> On 30/07/18 14:14, Segher Boessenkool wrote:
>>>>> In arm_block_set_aligned_vect 8-bit constants are generated as zero-
>>>>> extended const_ints, not sign-extended as required.  Fix that.
>>>>>
>>>>> Tamar tested the patch (see PR); no problems were found.  Is this okay
>>>>> for trunk?
>>>>>
>>>> The patch is okay but please add the testcase from the PR to gcc.dg/
>>>> or somewhere else generic (it's not arm-specific).
>>> It only failed with very specific options, which aren't valid on every
>>> ARM config either I think?
>>>
>>> -O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a
>> This is a fairly common Arm configuration that is tested by many people by
>> default,
>> so you wouldn't need to add any arm-specific directives. Just putting it in
>> one of
>> the generic C tests folders would be enough.
> Ah ok, so just dg-options -O3 will do?

yes, that should be enough.

Thanks,
Kyrill

> (As before, I have no reasonable way to test this).
>
>
> Segher
Tamar Christina Aug. 15, 2018, 8:21 a.m. UTC | #6
Hi All,

I'd like to ask for permissions to backport of this patch to GCC 8?

Thanks,
Tamar

> -----Original Message-----
> From: Kyrill Tkachov <kyrylo.tkachov@foss.arm.com>
> Sent: Tuesday, July 31, 2018 12:55
> To: Segher Boessenkool <segher@kernel.crashing.org>
> Cc: gcc-patches@gcc.gnu.org; tnfchris@gcc.gnu.org
> Subject: Re: [PATCH] arm: Generate correct const_ints (PR86640)
> 
> 
> On 31/07/18 12:38, Segher Boessenkool wrote:
> > On Tue, Jul 31, 2018 at 09:02:56AM +0100, Kyrill Tkachov wrote:
> >> Hi Segher,
> >>
> >> On 30/07/18 18:37, Segher Boessenkool wrote:
> >>> On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
> >>>> Hi Segher,
> >>>>
> >>>> On 30/07/18 14:14, Segher Boessenkool wrote:
> >>>>> In arm_block_set_aligned_vect 8-bit constants are generated as
> >>>>> zero- extended const_ints, not sign-extended as required.  Fix that.
> >>>>>
> >>>>> Tamar tested the patch (see PR); no problems were found.  Is this
> >>>>> okay for trunk?
> >>>>>
> >>>> The patch is okay but please add the testcase from the PR to
> >>>> gcc.dg/ or somewhere else generic (it's not arm-specific).
> >>> It only failed with very specific options, which aren't valid on
> >>> every ARM config either I think?
> >>>
> >>> -O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a
> >> This is a fairly common Arm configuration that is tested by many
> >> people by default, so you wouldn't need to add any arm-specific
> >> directives. Just putting it in one of the generic C tests folders
> >> would be enough.
> > Ah ok, so just dg-options -O3 will do?
> 
> yes, that should be enough.
> 
> Thanks,
> Kyrill
> 
> > (As before, I have no reasonable way to test this).
> >
> >
> > Segher
Kyrill Tkachov Aug. 15, 2018, 8:59 a.m. UTC | #7
On 15/08/18 09:21, Tamar Christina wrote:
> Hi All,
>
> I'd like to ask for permissions to backport of this patch to GCC 8?

Ok. Please bundle the testcase in the backport as well.

Thanks,
Kyrill

> Thanks,
> Tamar
>
>> -----Original Message-----
>> From: Kyrill Tkachov <kyrylo.tkachov@foss.arm.com>
>> Sent: Tuesday, July 31, 2018 12:55
>> To: Segher Boessenkool <segher@kernel.crashing.org>
>> Cc: gcc-patches@gcc.gnu.org; tnfchris@gcc.gnu.org
>> Subject: Re: [PATCH] arm: Generate correct const_ints (PR86640)
>>
>>
>> On 31/07/18 12:38, Segher Boessenkool wrote:
>>> On Tue, Jul 31, 2018 at 09:02:56AM +0100, Kyrill Tkachov wrote:
>>>> Hi Segher,
>>>>
>>>> On 30/07/18 18:37, Segher Boessenkool wrote:
>>>>> On Mon, Jul 30, 2018 at 03:55:30PM +0100, Kyrill Tkachov wrote:
>>>>>> Hi Segher,
>>>>>>
>>>>>> On 30/07/18 14:14, Segher Boessenkool wrote:
>>>>>>> In arm_block_set_aligned_vect 8-bit constants are generated as
>>>>>>> zero- extended const_ints, not sign-extended as required.  Fix that.
>>>>>>>
>>>>>>> Tamar tested the patch (see PR); no problems were found.  Is this
>>>>>>> okay for trunk?
>>>>>>>
>>>>>> The patch is okay but please add the testcase from the PR to
>>>>>> gcc.dg/ or somewhere else generic (it's not arm-specific).
>>>>> It only failed with very specific options, which aren't valid on
>>>>> every ARM config either I think?
>>>>>
>>>>> -O3 -mfpu=neon -mfloat-abi=hard -march=armv7-a
>>>> This is a fairly common Arm configuration that is tested by many
>>>> people by default, so you wouldn't need to add any arm-specific
>>>> directives. Just putting it in one of the generic C tests folders
>>>> would be enough.
>>> Ah ok, so just dg-options -O3 will do?
>> yes, that should be enough.
>>
>> Thanks,
>> Kyrill
>>
>>> (As before, I have no reasonable way to test this).
>>>
>>>
>>> Segher
diff mbox series

Patch

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index cf12ace..f5eece4 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -30046,7 +30046,6 @@  arm_block_set_aligned_vect (rtx dstbase,
   rtx dst, addr, mem;
   rtx val_vec, reg;
   machine_mode mode;
-  unsigned HOST_WIDE_INT v = value;
   unsigned int offset = 0;
 
   gcc_assert ((align & 0x3) == 0);
@@ -30065,10 +30064,8 @@  arm_block_set_aligned_vect (rtx dstbase,
 
   dst = copy_addr_to_reg (XEXP (dstbase, 0));
 
-  v = sext_hwi (v, BITS_PER_WORD);
-
   reg = gen_reg_rtx (mode);
-  val_vec = gen_const_vec_duplicate (mode, GEN_INT (v));
+  val_vec = gen_const_vec_duplicate (mode, gen_int_mode (value, QImode));
   /* Emit instruction loading the constant value.  */
   emit_move_insn (reg, val_vec);