Resubmit/ping: peephole2 vs cond-exec vs df

H.J. Lu hjl.tools@gmail.com
Wed Jun 30 08:49:00 GMT 2010


On Tue, Jun 29, 2010 at 8:11 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> 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.
>
> --
> H.J.
>

This seems to work.


-- 
H.J.
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;
 })



More information about the Gcc-patches mailing list