Message ID | 20211223222133.451967-1-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | i386: Require TARGET_64BIT for any_mul_highpart peephole | expand |
On Thu, Dec 23, 2021 at 11:21 PM H.J. Lu via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > Restore i686 bootstrap by requiring TARGET_64BIT for any_mul_highpart > peephole. > > PR bootstrap/103785 > * config/i386/i386.md: Require TARGET_64BIT for any_mul_highpart > peephole. I don't think this is correct. The patch uses SWI48, where DImode is enabled only for TARGET_64BIT. The patch disables SImode peephole only for 32bit targets, so if there is something wrong with the peephole, it still remains buggy for 64bit targets. Either we remove problematic peepholes to restore bootstrap or get a testcase and analyze the problem to figure out the correct fix. Uros. > --- > gcc/config/i386/i386.md | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md > index 284b9507466..9d6786c5c2e 100644 > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -8588,7 +8588,8 @@ > (any_mul_highpart:SWI48 (match_dup 2) (match_dup 0))) > (clobber (match_dup 2)) > (clobber (reg:CC FLAGS_REG))])] > - "REGNO (operands[0]) != REGNO (operands[2]) > + "TARGET_64BIT > + && REGNO (operands[0]) != REGNO (operands[2]) > && REGNO (operands[0]) != REGNO (operands[3]) > && (REGNO (operands[0]) == REGNO (operands[4]) > || peep2_reg_dead_p (3, operands[0]))" > -- > 2.33.1 >
On Fri, Dec 24, 2021 at 12:17 AM Uros Bizjak <ubizjak@gmail.com> wrote: > > On Thu, Dec 23, 2021 at 11:21 PM H.J. Lu via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > Restore i686 bootstrap by requiring TARGET_64BIT for any_mul_highpart > > peephole. > > > > PR bootstrap/103785 > > * config/i386/i386.md: Require TARGET_64BIT for any_mul_highpart > > peephole. > > I don't think this is correct. The patch uses SWI48, where DImode is > enabled only for TARGET_64BIT. The patch disables SImode peephole only > for 32bit targets, so if there is something wrong with the peephole, > it still remains buggy for 64bit targets. Either we remove problematic > peepholes to restore bootstrap or get a testcase and analyze the > problem to figure out the correct fix. > I couldn't create a small testcase in C. The problem is in (set (reg:SI 1 dx [92]) (const_int 714200473 [0x2a91d599])) (set (reg:SI 0 ax [105]) (reg:SI 0 ax [orig:89 k ] [89])) (parallel [ (set (reg:SI 1 dx [91]) (smul_highpart:SI (reg:SI 0 ax [105]) (reg:SI 1 dx [92]))) (clobber (reg:SI 0 ax [105])) (clobber (reg:CC 17 flags)) ]) The v2 patch is posted at https://gcc.gnu.org/pipermail/gcc-patches/2021-December/587356.html
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 284b9507466..9d6786c5c2e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8588,7 +8588,8 @@ (any_mul_highpart:SWI48 (match_dup 2) (match_dup 0))) (clobber (match_dup 2)) (clobber (reg:CC FLAGS_REG))])] - "REGNO (operands[0]) != REGNO (operands[2]) + "TARGET_64BIT + && REGNO (operands[0]) != REGNO (operands[2]) && REGNO (operands[0]) != REGNO (operands[3]) && (REGNO (operands[0]) == REGNO (operands[4]) || peep2_reg_dead_p (3, operands[0]))"