Jeff Law <l...@redhat.com> writes:
> On 6/6/19 6:33 AM, Richard Sandiford wrote:
>> Kugan Vivekanandarajah <kugan.vivekanandara...@linaro.org> writes:
>>> Hi Richard,
>>>
>>> On Thu, 6 Jun 2019 at 22:07, Richard Sandiford
>>> <richard.sandif...@arm.com> wrote:
>>>>
>>>> Kugan Vivekanandarajah <kugan.vivekanandara...@linaro.org> writes:
>>>>> Hi Richard,
>>>>>
>>>>> On Thu, 6 Jun 2019 at 19:35, Richard Sandiford
>>>>> <richard.sandif...@arm.com> wrote:
>>>>>>
>>>>>> Kugan Vivekanandarajah <kugan.vivekanandara...@linaro.org> writes:
>>>>>>> Hi Richard,
>>>>>>>
>>>>>>> Thanks for the review. Attached is the latest patch.
>>>>>>>
>>>>>>> For testcase like cond_arith_1.c, with the patch, gcc ICE in fwprop. I
>>>>>>> am limiting fwprop in cases like this. Is there a better fix for this?
>>>>>>> index cf2c9de..2c99285 100644
>>>>>>> --- a/gcc/fwprop.c
>>>>>>> +++ b/gcc/fwprop.c
>>>>>>> @@ -1358,6 +1358,15 @@ forward_propagate_and_simplify (df_ref use,
>>>>>>> rtx_insn *def_insn, rtx def_set)
>>>>>>>    else
>>>>>>>      mode = GET_MODE (*loc);
>>>>>>>
>>>>>>> +  /* TODO. We can't get the mode for
>>>>>>> +     (set (reg:VNx16BI 109)
>>>>>>> +          (unspec:VNx16BI [
>>>>>>> +        (reg:SI 131)
>>>>>>> +        (reg:SI 106)
>>>>>>> +           ] UNSPEC_WHILE_LO))
>>>>>>> +     Thus, bailout when it is UNSPEC and MODEs are not compatible.  */
>>>>>>> +  if (GET_MODE_CLASS (mode) != GET_MODE_CLASS (GET_MODE (reg)))
>>>>>>> +    return false;
>>>>>>>    new_rtx = propagate_rtx (*loc, mode, reg, src,
>>>>>>>                   optimize_bb_for_speed_p (BLOCK_FOR_INSN (use_insn)));
>>>>>>
>>>>>> What specifically goes wrong?  The unspec above isn't that unusual --
>>>>>> many unspecs have different modes from their inputs.
>>>>>
>>>>> cond_arith_1.c:38:1: internal compiler error: in paradoxical_subreg_p,
>>>>> at rtl.h:3130
>>>>> 0x135f1d3 paradoxical_subreg_p(machine_mode, machine_mode)
>>>>>         ../../88838/gcc/rtl.h:3130
>>>>> 0x135f1d3 propagate_rtx
>>>>>         ../../88838/gcc/fwprop.c:683
>>>>> 0x135f4a3 forward_propagate_and_simplify
>>>>>         ../../88838/gcc/fwprop.c:1371
>>>>> 0x135f4a3 forward_propagate_into
>>>>>         ../../88838/gcc/fwprop.c:1430
>>>>> 0x135fdcb fwprop
>>>>>         ../../88838/gcc/fwprop.c:1519
>>>>> 0x135fdcb execute
>>>>>         ../../88838/gcc/fwprop.c:1550
>>>>> Please submit a full bug report,
>>>>> with preprocessed source if appropriate.
>>>>>
>>>>>
>>>>> in forward_propagate_and_simplify
>>>>>
>>>>> use_set:
>>>>> (set (reg:VNx16BI 96 [ loop_mask_52 ])
>>>>>     (unspec:VNx16BI [
>>>>>             (reg:SI 92 [ _3 ])
>>>>>             (reg:SI 95 [ niters.36 ])
>>>>>         ] UNSPEC_WHILE_LO))
>>>>>
>>>>> reg:
>>>>> (reg:SI 92 [ _3 ])
>>>>>
>>>>> *loc:
>>>>> (unspec:VNx16BI [
>>>>>         (reg:SI 92 [ _3 ])
>>>>>         (reg:SI 95 [ niters.36 ])
>>>>>     ] UNSPEC_WHILE_LO)
>>>>>
>>>>> src:
>>>>> (subreg:SI (reg:DI 136 [ ivtmp_101 ]) 0)
>>>>>
>>>>> use_insn:
>>>>> (insn 87 86 88 4 (parallel [
>>>>>             (set (reg:VNx16BI 96 [ loop_mask_52 ])
>>>>>                 (unspec:VNx16BI [
>>>>>                         (reg:SI 92 [ _3 ])
>>>>>                         (reg:SI 95 [ niters.36 ])
>>>>>                     ] UNSPEC_WHILE_LO))
>>>>>             (clobber (reg:CC 66 cc))
>>>>>         ]) 4255 {while_ultsivnx16bi}
>>>>>      (expr_list:REG_UNUSED (reg:CC 66 cc)
>>>>>         (nil)))
>>>>>
>>>>> I think we calculate the mode to be VNx16BI which is wrong?
>>>>> because of which in propgate_rtx,   !paradoxical_subreg_p (mode,
>>>>> GET_MODE (SUBREG_REG (new_rtx)))))  ICE
>>>>
>>>> Looks like something I hit on the ACLE branch, but didn't have a
>>>> non-ACLE reproducer for (see 065881acf0de35ff7818c1fc92769e1c106e1028).
>>>>
>>>> Does the attached work?  The current call is wrong because "mode"
>>>> is the mode of "x", not the mode of "new_rtx".
>>>
>>> Yes, attached patch works for this testcase. Are you planning to
>>> commit it to trunk. I will wait for this.
>> 
>> Needs approval first. :-)
>> 
>> The patch was originally bootstrapped & regtested on aarch64-linux-gnu,
>> but I'll repeat that for trunk and test x86_64-linux-gnu too.
> Assuming that passes this is fine.
> jeff

Thanks, applied as r272032.

Richard

Reply via email to