PATCH: PR target/44588: Very inefficient 8bit mod/div
Paolo Bonzini
bonzini@gnu.org
Thu Jun 24 00:05:00 GMT 2010
On 06/24/2010 12:01 AM, H.J. Lu wrote:
> On Wed, Jun 23, 2010 at 2:22 PM, H.J. Lu<hjl.tools@gmail.com> wrote:
>> On Wed, Jun 23, 2010 at 12:50 PM, H.J. Lu<hjl.tools@gmail.com> wrote:
>>> On Wed, Jun 23, 2010 at 12:36 PM, Paolo Bonzini<bonzini@gnu.org> wrote:
>>>> On 06/23/2010 09:35 PM, H.J. Lu wrote:
>>>>>
>>>>> On Wed, Jun 23, 2010 at 12:16 PM, Paolo Bonzini<bonzini@gnu.org> wrote:
>>>>>>
>>>>>> On 06/23/2010 08:24 PM, H.J. Lu wrote:
>>>>>>>
>>>>>>> [(set (match_operand:HI 0 "register_operand" "=a")
>>>>>>> (div:HI
>>>>>>> (match_operand:HI 1 "register_operand" "0")
>>>>>>> (match_operand:QI 2 "nonimmediate_operand" "qm")))
>>>>>>> (clobber (reg:CC FLAGS_REG))]
>>>>>>
>>>>>> Maybe this:
>>>>>>
>>>>>> [(set (match_operand:QI 0 "register_operand" "=a")
>>>>>> (subreg:QI
>>>>>> (div:HI
>>>>>> (match_operand:HI 1 "register_operand" "0")
>>>>>> (match_operand:QI 2 "nonimmediate_operand" "qm")) 0))
>>>>>> (clobber (reg:CC FLAGS_REG))]
>>>>>>
>>>>>
>>>>> It doesn't make a big difference since only lower 8bit
>>>>> is set by it.
>>>>
>>>> For full divmod you have to shift mod and ior of course. I understood that
>>>> you were talking of *<u>divqi3.
>>>>
>>>
>>> I can't do shift/ior on QI output from *<u>divqi3. I have
>>>
>> Here is a different approach. It uses UNSPEC for 8bit divmod.
>> The generated code is the same.
>
> An updated patch. No need for *movqi_extzv_3 and
> *movqi_extzv_3_rex64.
I don't understand exactly what the problem was; clearly it couldn't
work as long as this pattern was cheating blatantly:
(define_insn "*<u>divqi3"
[(set (match_operand:QI 0 "register_operand" "=a")
(any_div:QI
(match_operand:HI 1 "register_operand" "0")
(match_operand:QI 2 "nonimmediate_operand" "qm")))
Anyway this patch is IMO much nicer than the first ones, so if Uros is
okay I don't think it's useful to pursue a more accurate representation.
Just make sure that REG_EQUAL notes are added to the two extractions.
Paolo
More information about the Gcc-patches
mailing list