Patchwork Resubmit/ping: peephole2 vs cond-exec vs df

login
register
mail settings
Submitter H.J. Lu
Date June 30, 2010, 2:26 a.m.
Message ID <AANLkTikZlURjKWhn8OQ_cGUx2I05DRkmQwo3AWhBr31g@mail.gmail.com>
Download mbox | patch
Permalink /patch/57360/
State New
Headers show

Comments

H.J. Lu - June 30, 2010, 2:26 a.m.
On Tue, Jun 29, 2010 at 5:43 PM, Andrew Pinski <pinskia@gmail.com> wrote:
> On Tue, Jun 29, 2010 at 5:41 PM, Andrew Pinski <pinskia@gmail.com> wrote:
>> On Tue, Jun 29, 2010 at 6:22 AM, Bernd Schmidt <bernds@codesourcery.com> 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. Lu - June 30, 2010, 3:11 a.m.
On Tue, Jun 29, 2010 at 7:26 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Jun 29, 2010 at 5:43 PM, Andrew Pinski <pinskia@gmail.com> wrote:
>> On Tue, Jun 29, 2010 at 5:41 PM, Andrew Pinski <pinskia@gmail.com> wrote:
>>> On Tue, Jun 29, 2010 at 6:22 AM, Bernd Schmidt <bernds@codesourcery.com> 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.

Patch

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" "")))