Patchwork Fix PR57268

login
register
mail settings
Submitter Jakub Jelinek
Date June 1, 2013, 12:55 p.m.
Message ID <20130601125521.GZ1493@tucnak.redhat.com>
Download mbox | patch
Permalink /patch/248077/
State New
Headers show

Comments

Jakub Jelinek - June 1, 2013, 12:55 p.m.
On Sat, Jun 01, 2013 at 10:11:24AM +0200, Jakub Jelinek wrote:
> On Sat, Jun 01, 2013 at 08:39:58AM +0400, Dinar Temirbulatov wrote:
> > I am investigating the problem.
> 
> I'd guess you don't want to flush on DEBUG_INSN_Ps, because then you'd flush
> differently between -g and -g0.  So perhaps something like:

Now bootstrapped/regtested on x86_64-linux and i686-linux.  I see you've
already reverted in the mean time, so ok for trunk this way?

2013-06-01  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/57268
	* sched-deps.c (sched_analyze_2): Don't flush_pedning_lists
	if DEBUG_INSN_P (insn).

	Reapply
	2013-05-31  Dinar Temirbulatov  <dinar@kugelworks.com>

	PR rtl-optimization/57268
	* sched-deps.c (sched_analyze_2): Flush dependence lists if
	the sum of the read and write lists exceeds MAX_PENDING_LIST_LENGTH.


	Jakub
Dinar Temirbulatov - June 3, 2013, 7:21 a.m.
> I'd guess you don't want to flush on DEBUG_INSN_Ps, because then you'd flush
> differently between -g and -g0.  So perhaps something like:
yes, If I skipped to flush all DEBUG_INSN_Ps, then dependence lists
are the same under -g0 and -g. I bootstrapped  Jakub's change on
x86_64-linux with no errors.
                            thanks, Dinar.

On Sat, Jun 1, 2013 at 4:55 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Sat, Jun 01, 2013 at 10:11:24AM +0200, Jakub Jelinek wrote:
>> On Sat, Jun 01, 2013 at 08:39:58AM +0400, Dinar Temirbulatov wrote:
>> > I am investigating the problem.
>>
>> I'd guess you don't want to flush on DEBUG_INSN_Ps, because then you'd flush
>> differently between -g and -g0.  So perhaps something like:
>
> Now bootstrapped/regtested on x86_64-linux and i686-linux.  I see you've
> already reverted in the mean time, so ok for trunk this way?
>
> 2013-06-01  Jakub Jelinek  <jakub@redhat.com>
>
>         PR rtl-optimization/57268
>         * sched-deps.c (sched_analyze_2): Don't flush_pedning_lists
>         if DEBUG_INSN_P (insn).
>
>         Reapply
>         2013-05-31  Dinar Temirbulatov  <dinar@kugelworks.com>
>
>         PR rtl-optimization/57268
>         * sched-deps.c (sched_analyze_2): Flush dependence lists if
>         the sum of the read and write lists exceeds MAX_PENDING_LIST_LENGTH.
>
> --- gcc/sched-deps.c    (revision 199576)
> +++ gcc/sched-deps.c    (revision 199575)
> @@ -2690,8 +2690,15 @@
>
>         /* Always add these dependencies to pending_reads, since
>            this insn may be followed by a write.  */
> -        if (!deps->readonly)
> -          add_insn_mem_dependence (deps, true, insn, x);
> +       if (!deps->readonly)
> +         {
> +           if ((deps->pending_read_list_length
> +                + deps->pending_write_list_length)
> +               > MAX_PENDING_LIST_LENGTH
> +               && !DEBUG_INSN_P (insn))
> +             flush_pending_lists (deps, insn, true, true);
> +           add_insn_mem_dependence (deps, true, insn, x);
> +         }
>
>         sched_analyze_2 (deps, XEXP (x, 0), insn);
>
>
>         Jakub
Jeff Law - June 3, 2013, 5:34 p.m.
On 06/01/2013 06:55 AM, Jakub Jelinek wrote:
> On Sat, Jun 01, 2013 at 10:11:24AM +0200, Jakub Jelinek wrote:
>> On Sat, Jun 01, 2013 at 08:39:58AM +0400, Dinar Temirbulatov wrote:
>>> I am investigating the problem.
>>
>> I'd guess you don't want to flush on DEBUG_INSN_Ps, because then you'd flush
>> differently between -g and -g0.  So perhaps something like:
>
> Now bootstrapped/regtested on x86_64-linux and i686-linux.  I see you've
> already reverted in the mean time, so ok for trunk this way?
>
> 2013-06-01  Jakub Jelinek  <jakub@redhat.com>
>
> 	PR rtl-optimization/57268
> 	* sched-deps.c (sched_analyze_2): Don't flush_pedning_lists
> 	if DEBUG_INSN_P (insn).
>
> 	Reapply
> 	2013-05-31  Dinar Temirbulatov  <dinar@kugelworks.com>
>
> 	PR rtl-optimization/57268
> 	* sched-deps.c (sched_analyze_2): Flush dependence lists if
> 	the sum of the read and write lists exceeds MAX_PENDING_LIST_LENGTH.
Yes, this way is fine.
jeff

Patch

--- gcc/sched-deps.c	(revision 199576)
+++ gcc/sched-deps.c	(revision 199575)
@@ -2690,8 +2690,15 @@ 
 
 	/* Always add these dependencies to pending_reads, since
 	   this insn may be followed by a write.  */
-        if (!deps->readonly)
-          add_insn_mem_dependence (deps, true, insn, x);
+	if (!deps->readonly)
+	  {
+	    if ((deps->pending_read_list_length
+		 + deps->pending_write_list_length)
+		> MAX_PENDING_LIST_LENGTH
+		&& !DEBUG_INSN_P (insn))
+	      flush_pending_lists (deps, insn, true, true);
+	    add_insn_mem_dependence (deps, true, insn, x);
+	  }
 
 	sched_analyze_2 (deps, XEXP (x, 0), insn);