[Bug target/95674] Unnecessary move when doing division-by-multiplication

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jun 15 08:50:43 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95674

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |vmakarov at gcc dot gnu.org
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2020-06-15

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The insn in question is:
(define_insn ("*umuldi3_highpart_1")
     [
        (set (match_operand:DI 0 ("register_operand") ("=d"))
            (truncate:DI (lshiftrt:TI (mult:TI (zero_extend:TI
(match_operand:DI 1 ("nonimmediate_operand") ("%a")))
                        (zero_extend:TI (match_operand:DI 2
("nonimmediate_operand") ("rm"))))
                    (const_int 64 [0x40]))))
        (clobber (match_scratch:DI 3 ("=1")))
        (clobber (reg:CC 17))
    ] ("TARGET_64BIT
and I don't see why the RA couldn't choose the args the other way, perhaps the
match_scratch =1 (i.e. "a" constraint) complicates it, but the constant is
REG_DEAD in that insn.

Vlad, could you please have a look?  Thanks.


More information about the Gcc-bugs mailing list