From patchwork Wed Jun 30 04:56:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Resubmit/ping: peephole2 vs cond-exec vs df Date: Tue, 29 Jun 2010 18:56:30 -0000 From: "H.J. Lu" X-Patchwork-Id: 57375 Message-Id: To: Andrew Pinski Cc: Bernd Schmidt , Richard Henderson , GCC Patches On Tue, Jun 29, 2010 at 8:11 PM, H.J. Lu wrote: > On Tue, Jun 29, 2010 at 7:26 PM, H.J. Lu wrote: >> On Tue, Jun 29, 2010 at 5:43 PM, Andrew Pinski wrote: >>> On Tue, Jun 29, 2010 at 5:41 PM, Andrew Pinski wrote: >>>> On Tue, Jun 29, 2010 at 6:22 AM, Bernd Schmidt wrote: >>>>> No, those parts of the buffer that weren't part of the match remain >>>>> unaffected, we keep both the insns and their life information.  We only >>>>> rebuild life for the new insns produced by the match. >>>>> >>>>> Here's a new version with a few more comments and a few remnants of old >>>>> code removed.  I've also removed some dead code found in genrecog.c (got >>>>> sidetracked today into debugging the current peephole2 code again...); >>>>> this was left in after your r34208 patch. >>>> >>>> I think this causes a bootstrap failure on x86_64-linux-gnu: >>>> /home/apinski/src/gcc-fsf/local//gcc/gcc/coverage.c:151:1: error: >>>> unrecognizable insn: >>>> (insn 25 7 26 2 >>>> /home/apinski/src/gcc-fsf/local//gcc/gcc/coverage.c:150 (set (reg:DI 1 >>>> dx) >>>>        (mem/s:SI (plus:DI (reg/v/f:DI 5 di [orig:64 of ] [64]) >>>>                (const_int 4 [0x4])) [15 entry_2->ctr+0 S4 A32])) -1 (nil)) >>>> /home/apinski/src/gcc-fsf/local//gcc/gcc/coverage.c:151:1: internal >>>> compiler error: in extract_insn, at recog.c:2127 >>> >>> +  [(match_scratch:SI 5 "r") >>> >>> I think the :SI part is incorrect, we need a DI mode on x86_64 rather >>> than a SImode. >>> >> >> Like this? >> >> -- >> H.J. >> --- >> Index: gcc/config/i386/i386.md >> =================================================================== >> --- gcc/config/i386/i386.md     (revision 161586) >> +++ gcc/config/i386/i386.md     (working copy) >> @@ -17558,7 +17558,7 @@ >>  ;;  leal    (%edx,%eax,4), %eax >> >>  (define_peephole2 >> -  [(match_scratch:SI 5 "r") >> +  [(match_scratch:P 5 "r") >>    (parallel [(set (match_operand 0 "register_operand" "") >>                   (ashift (match_operand 1 "register_operand" "") >>                           (match_operand 2 "const_int_operand" ""))) >> > > It doesn't work. > > -- > H.J. > This seems to work. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7003f52..c450c38 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -17558,7 +17558,7 @@ ;; leal (%edx,%eax,4), %eax (define_peephole2 - [(match_scratch:SI 5 "r") + [(match_scratch:P 5 "r") (parallel [(set (match_operand 0 "register_operand" "") (ashift (match_operand 1 "register_operand" "") (match_operand 2 "const_int_operand" ""))) @@ -17587,9 +17587,12 @@ operands[1] = gen_rtx_PLUS (Pmode, base, gen_rtx_MULT (Pmode, index, GEN_INT (scale))); - if (mode != Pmode) - operands[1] = gen_rtx_SUBREG (mode, operands[1], 0); operands[5] = base; + if (mode != Pmode) + { + operands[1] = gen_rtx_SUBREG (mode, operands[1], 0); + operands[5] = gen_rtx_SUBREG (mode, operands[5], 0); + } operands[0] = dest; })