* [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 @ 2014-12-11 10:02 Bin Cheng 2014-12-20 13:07 ` Eric Botcazou 0 siblings, 1 reply; 6+ messages in thread From: Bin Cheng @ 2014-12-11 10:02 UTC (permalink / raw) To: gcc-patches; +Cc: Jeff Law, segher [-- Attachment #1: Type: text/plain, Size: 859 bytes --] Hi, As described both in the PR and patch comments, this patch fixes PR62151 by setting right value to ELIM_I0/ELIM_I1 when distributing REG_DEAD notes from i0/i1. It is said that distribute_notes had caused many bugs in the past. I think it still has bug in it, as noted in the PR. This patch doesn't touch distribute_notes because we are in stage3 and I want to have more discussion on it. Bootstrap and test on x86_64. aarch64 is ongoing. So is it ok? 2014-12-11 Bin Cheng <bin.cheng@arm.com> PR rtl-optimization/62151 * combine.c (try_combine): Reset elim_i0 and elim_i1 when distributing notes from i0notes or i1notes, this time don't check whether newi2pat sets i1dest or i0dest. gcc/testsuite/ChangeLog 2014-12-11 Bin Cheng <bin.cheng@arm.com> PR rtl-optimization/62151 * gcc.c-torture/execute/pr62151.c: New test. [-- Attachment #2: pr62151-20141211.txt --] [-- Type: text/plain, Size: 2894 bytes --] Index: gcc/combine.c =================================================================== --- gcc/combine.c (revision 218200) +++ gcc/combine.c (working copy) @@ -4183,11 +4183,42 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn distribute_notes (i2notes, i2, i3, newi2pat ? i2 : NULL, elim_i2, elim_i1, elim_i0); if (i1notes) - distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + { + /* When distributing REG_DEAD note from i1, it doesn't matter + if newi2pat sets i1dest/i0dest or not. Recompute and use + elim_i0/elim_i1 in temp variables. + + See PR62151, if we have four insns combination: + i0: r0 <- i0src + i1: r1 <- i1src (using r0) + REG_DEAD (r0) + i2: r0 <- i2src (using r1) + i3: r3 <- i3src (using r0) + ix: using r0 + From i1's point of view, r0 is eliminated, no matter if it is + set by newi2pat or not. In other words, REG_DEAD info for r0 + in i1 should be discarded. + + Note this only affects cases in which I2 is after I0/I1, like + "I1->I2->I3", "I0->I1->I2->I3" or "I0&I1->I2, I2->I3". For + other cases like "I0->I1, I1&I2->I3" or "I1&I2->I3", newi2pat + will not set i1dest or i0dest. */ + rtx tmp_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src + || !i1dest_killed + ? 0 : i1dest); + rtx tmp_elim_i0 = (i0 == 0 || i0dest_in_i0src || !i0dest_killed + ? 0 : i0dest); + distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL, + elim_i2, tmp_elim_i1, tmp_elim_i0); + } if (i0notes) - distribute_notes (i0notes, i0, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + { + /* Same with distribution of i1notes. */ + rtx tmp_elim_i0 = (i0 == 0 || i0dest_in_i0src || !i0dest_killed + ? 0 : i0dest); + distribute_notes (i0notes, i0, i3, newi2pat ? i2 : NULL, + elim_i2, elim_i1, tmp_elim_i0); + } if (midnotes) distribute_notes (midnotes, NULL, i3, newi2pat ? i2 : NULL, elim_i2, elim_i1, elim_i0); Index: gcc/testsuite/gcc.c-torture/execute/pr62151.c =================================================================== --- gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) +++ gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) @@ -0,0 +1,41 @@ +/* PR rtl-optimization/62151 */ + +int a, c, d, e, f, g, h, i; +short b; + +int +fn1 () +{ + b = 0; + for (;;) + { + int j[2]; + j[f] = 0; + if (h) + d = 0; + else + { + for (; f; f++) + ; + for (a = 0; a < 1; a++) + for (;;) + { + i = b & ((b ^ 1) & 83647) ? b : b - 1; + g = 1 ? i : 0; + e = j[0]; + if (c) + break; + return 0; + } + } + } +} + +int +main () +{ + fn1 (); + if (g != -1) + __builtin_abort (); + return 0; +} ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 2014-12-11 10:02 [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 Bin Cheng @ 2014-12-20 13:07 ` Eric Botcazou 2014-12-22 9:44 ` Bin.Cheng 0 siblings, 1 reply; 6+ messages in thread From: Eric Botcazou @ 2014-12-20 13:07 UTC (permalink / raw) To: Bin Cheng; +Cc: gcc-patches, Jeff Law, segher > As described both in the PR and patch comments, this patch fixes PR62151 by > setting right value to ELIM_I0/ELIM_I1 when distributing REG_DEAD notes from > i0/i1. It is said that distribute_notes had caused many bugs in the past. > I think it still has bug in it, as noted in the PR. This patch doesn't > touch distribute_notes because we are in stage3 and I want to have more > discussion on it. > Bootstrap and test on x86_64. aarch64 is ongoing. So is it ok? > > 2014-12-11 Bin Cheng <bin.cheng@arm.com> > > PR rtl-optimization/62151 > * combine.c (try_combine): Reset elim_i0 and elim_i1 when > distributing notes from i0notes or i1notes, this time don't > check whether newi2pat sets i1dest or i0dest. The reasoning looks correct to me and the patch is certainly safe so it's OK on principle, but I think that we should avoid the duplication of predicates. Can you move the computation of the alternative elim_i1 & elim_i0 up to where the original ones are computed along with the explanation of why we care about newi2pat only for notes that were on I3 and I2? Something like: /* Compute which registers we expect to eliminate. newi2pat may be setting either i3dest or i2dest, so we must check it. */ rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) || i2dest_in_i2src || i2dest_in_i1src || i2dest_in_i0src || !i2dest_killed ? 0 : i2dest); /* For I1 we need to compute both local elimination and global elimination because i1dest may be the same as i3dest, in which case newi2pat may be setting i1dest. <big explanation of why this is needed> */ rtx local_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src || !i1dest_killed ? 0 : i1dest); rtx elim_i1 = (local_elim_i1 == 0 || (newi2pat && reg_set_p (i1dest, newi2pat)) ? 0 : i1dest); /* Likewise for I0. */ rtx local_elim_i0 = (i0 == 0 || i0dest_in_i0src || !i0dest_killed ? 0 : i0dest); rtx elim_i0 = (local_elim_i0 == 0 || (newi2pat && reg_set_p (i0dest, newi2pat)) ? 0 : i0dest); -- Eric Botcazou ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 2014-12-20 13:07 ` Eric Botcazou @ 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:50 ` Eric Botcazou 0 siblings, 2 replies; 6+ messages in thread From: Bin.Cheng @ 2014-12-22 9:44 UTC (permalink / raw) To: Eric Botcazou; +Cc: Bin Cheng, gcc-patches List, Jeff Law, Segher Boessenkool [-- Attachment #1: Type: text/plain, Size: 2993 bytes --] On Sat, Dec 20, 2014 at 8:18 PM, Eric Botcazou <ebotcazou@adacore.com> wrote: >> As described both in the PR and patch comments, this patch fixes PR62151 by >> setting right value to ELIM_I0/ELIM_I1 when distributing REG_DEAD notes from >> i0/i1. It is said that distribute_notes had caused many bugs in the past. >> I think it still has bug in it, as noted in the PR. This patch doesn't >> touch distribute_notes because we are in stage3 and I want to have more >> discussion on it. >> Bootstrap and test on x86_64. aarch64 is ongoing. So is it ok? >> >> 2014-12-11 Bin Cheng <bin.cheng@arm.com> >> >> PR rtl-optimization/62151 >> * combine.c (try_combine): Reset elim_i0 and elim_i1 when >> distributing notes from i0notes or i1notes, this time don't >> check whether newi2pat sets i1dest or i0dest. > > The reasoning looks correct to me and the patch is certainly safe so it's OK > on principle, but I think that we should avoid the duplication of predicates. > > Can you move the computation of the alternative elim_i1 & elim_i0 up to where > the original ones are computed along with the explanation of why we care about > newi2pat only for notes that were on I3 and I2? Something like: > > /* Compute which registers we expect to eliminate. newi2pat may be setting > either i3dest or i2dest, so we must check it. */ > rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) > || i2dest_in_i2src || i2dest_in_i1src || i2dest_in_i0src > || !i2dest_killed > ? 0 : i2dest); > /* For I1 we need to compute both local elimination and global elimination > because i1dest may be the same as i3dest, in which case newi2pat may be > setting i1dest. <big explanation of why this is needed> */ > rtx local_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src > || !i1dest_killed > ? 0 : i1dest); > rtx elim_i1 = (local_elim_i1 == 0 > || (newi2pat && reg_set_p (i1dest, newi2pat)) > ? 0 : i1dest); > /* Likewise for I0. */ > rtx local_elim_i0 = (i0 == 0 || i0dest_in_i0src > || !i0dest_killed > ? 0 : i0dest); > rtx elim_i0 = (local_elim_i0 == 0 > || (newi2pat && reg_set_p (i0dest, newi2pat)) > ? 0 : i0dest); > > -- > Eric Botcazou Hi Eric, Thanks for reviewing. Here comes the revised patch. Bootstrap and test on x86_64, is it OK? Thanks, bin 2014-12-22 Bin Cheng <bin.cheng@arm.com> PR rtl-optimization/62151 * combine.c (try_combine): New local variables local_elim_i1 and local_elim_i0. Set elim_i1 and elim_i0 using the local version variables. Distribute notes from i0notes or i1notes using the local variavbles. gcc/testsuite/ChangeLog 2014-12-22 Bin Cheng <bin.cheng@arm.com> PR rtl-optimization/62151 * gcc.c-torture/execute/pr62151.c: New test. [-- Attachment #2: pr62151-20141222.txt --] [-- Type: text/plain, Size: 3902 bytes --] Index: gcc/testsuite/gcc.c-torture/execute/pr62151.c =================================================================== --- gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) +++ gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) @@ -0,0 +1,41 @@ +/* PR rtl-optimization/62151 */ + +int a, c, d, e, f, g, h, i; +short b; + +int +fn1 () +{ + b = 0; + for (;;) + { + int j[2]; + j[f] = 0; + if (h) + d = 0; + else + { + for (; f; f++) + ; + for (a = 0; a < 1; a++) + for (;;) + { + i = b & ((b ^ 1) & 83647) ? b : b - 1; + g = 1 ? i : 0; + e = j[0]; + if (c) + break; + return 0; + } + } + } +} + +int +main () +{ + fn1 (); + if (g != -1) + __builtin_abort (); + return 0; +} Index: gcc/combine.c =================================================================== --- gcc/combine.c (revision 218855) +++ gcc/combine.c (working copy) @@ -4119,19 +4119,46 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn rtx midnotes = 0; int from_luid; /* Compute which registers we expect to eliminate. newi2pat may be setting - either i3dest or i2dest, so we must check it. Also, i1dest may be the - same as i3dest, in which case newi2pat may be setting i1dest. */ + either i3dest or i2dest, so we must check it. */ rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) || i2dest_in_i2src || i2dest_in_i1src || i2dest_in_i0src || !i2dest_killed ? 0 : i2dest); - rtx elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src + /* For i1, we need to compute both local elimination and global + elimination information with respect to newi2pat because i1dest + may be the same as i3dest, in which case newi2pat may be setting + i1dest. Global information is used when distributing REG_DEAD + note for i2 and i3, in which case it does matter if newi2pat sets + i1dest or not. + + Local information is used when distributing REG_DEAD note for i1, + in which case it doesn't matter if newi2pat sets i1dest or not. + See PR62151, if we have four insns combination: + i0: r0 <- i0src + i1: r1 <- i1src (using r0) + REG_DEAD (r0) + i2: r0 <- i2src (using r1) + i3: r3 <- i3src (using r0) + ix: using r0 + From i1's point of view, r0 is eliminated, no matter if it is set + by newi2pat or not. In other words, REG_DEAD info for r0 in i1 + should be discarded. + + Note local information only affects cases in which I2 is after I0/I1, + like "I1->I2->I3", "I0->I1->I2->I3" or "I0&I1->I2, I2->I3". For other + cases like "I0->I1, I1&I2->I3" or "I1&I2->I3", newi2pat will not set + i1dest or i0dest. */ + rtx local_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src + || !i1dest_killed + ? 0 : i1dest); + rtx elim_i1 = (local_elim_i1 == 0 || (newi2pat && reg_set_p (i1dest, newi2pat)) - || !i1dest_killed ? 0 : i1dest); - rtx elim_i0 = (i0 == 0 || i0dest_in_i0src + /* Same case as i1. */ + rtx local_elim_i0 = (i0 == 0 || i0dest_in_i0src || !i0dest_killed + ? 0 : i0dest); + rtx elim_i0 = (local_elim_i0 == 0 || (newi2pat && reg_set_p (i0dest, newi2pat)) - || !i0dest_killed ? 0 : i0dest); /* Get the old REG_NOTES and LOG_LINKS from all our insns and @@ -4300,10 +4327,10 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn elim_i2, elim_i1, elim_i0); if (i1notes) distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + elim_i2, local_elim_i1, local_elim_i0); if (i0notes) distribute_notes (i0notes, i0, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + elim_i2, elim_i1, local_elim_i0); if (midnotes) distribute_notes (midnotes, NULL, i3, newi2pat ? i2 : NULL, elim_i2, elim_i1, elim_i0); ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 2014-12-22 9:44 ` Bin.Cheng @ 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:54 ` Eric Botcazou 2014-12-22 9:50 ` Eric Botcazou 1 sibling, 1 reply; 6+ messages in thread From: Bin.Cheng @ 2014-12-22 9:44 UTC (permalink / raw) To: Eric Botcazou; +Cc: Bin Cheng, gcc-patches List, Jeff Law, Segher Boessenkool [-- Attachment #1: Type: text/plain, Size: 3307 bytes --] On Mon, Dec 22, 2014 at 3:54 PM, Bin.Cheng <amker.cheng@gmail.com> wrote: > On Sat, Dec 20, 2014 at 8:18 PM, Eric Botcazou <ebotcazou@adacore.com> wrote: >>> As described both in the PR and patch comments, this patch fixes PR62151 by >>> setting right value to ELIM_I0/ELIM_I1 when distributing REG_DEAD notes from >>> i0/i1. It is said that distribute_notes had caused many bugs in the past. >>> I think it still has bug in it, as noted in the PR. This patch doesn't >>> touch distribute_notes because we are in stage3 and I want to have more >>> discussion on it. >>> Bootstrap and test on x86_64. aarch64 is ongoing. So is it ok? >>> >>> 2014-12-11 Bin Cheng <bin.cheng@arm.com> >>> >>> PR rtl-optimization/62151 >>> * combine.c (try_combine): Reset elim_i0 and elim_i1 when >>> distributing notes from i0notes or i1notes, this time don't >>> check whether newi2pat sets i1dest or i0dest. >> >> The reasoning looks correct to me and the patch is certainly safe so it's OK >> on principle, but I think that we should avoid the duplication of predicates. >> >> Can you move the computation of the alternative elim_i1 & elim_i0 up to where >> the original ones are computed along with the explanation of why we care about >> newi2pat only for notes that were on I3 and I2? Something like: >> >> /* Compute which registers we expect to eliminate. newi2pat may be setting >> either i3dest or i2dest, so we must check it. */ >> rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) >> || i2dest_in_i2src || i2dest_in_i1src || i2dest_in_i0src >> || !i2dest_killed >> ? 0 : i2dest); >> /* For I1 we need to compute both local elimination and global elimination >> because i1dest may be the same as i3dest, in which case newi2pat may be >> setting i1dest. <big explanation of why this is needed> */ >> rtx local_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src >> || !i1dest_killed >> ? 0 : i1dest); >> rtx elim_i1 = (local_elim_i1 == 0 >> || (newi2pat && reg_set_p (i1dest, newi2pat)) >> ? 0 : i1dest); >> /* Likewise for I0. */ >> rtx local_elim_i0 = (i0 == 0 || i0dest_in_i0src >> || !i0dest_killed >> ? 0 : i0dest); >> rtx elim_i0 = (local_elim_i0 == 0 >> || (newi2pat && reg_set_p (i0dest, newi2pat)) >> ? 0 : i0dest); >> >> -- >> Eric Botcazou > > Hi Eric, > Thanks for reviewing. Here comes the revised patch. Bootstrap and > test on x86_64, is it OK? > > Thanks, > bin > > > 2014-12-22 Bin Cheng <bin.cheng@arm.com> > > PR rtl-optimization/62151 > * combine.c (try_combine): New local variables local_elim_i1 > and local_elim_i0. Set elim_i1 and elim_i0 using the local > version variables. Distribute notes from i0notes or i1notes > using the local variavbles. > > gcc/testsuite/ChangeLog > 2014-12-22 Bin Cheng <bin.cheng@arm.com> > > PR rtl-optimization/62151 > * gcc.c-torture/execute/pr62151.c: New test. Hmm, I further revised comment in the patch since in try_combine, i2 is always after i0/i1. The original comment is inaccurate about that. Thanks, bin [-- Attachment #2: pr62151-20141222-1.txt --] [-- Type: text/plain, Size: 3887 bytes --] Index: gcc/testsuite/gcc.c-torture/execute/pr62151.c =================================================================== --- gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) +++ gcc/testsuite/gcc.c-torture/execute/pr62151.c (revision 0) @@ -0,0 +1,41 @@ +/* PR rtl-optimization/62151 */ + +int a, c, d, e, f, g, h, i; +short b; + +int +fn1 () +{ + b = 0; + for (;;) + { + int j[2]; + j[f] = 0; + if (h) + d = 0; + else + { + for (; f; f++) + ; + for (a = 0; a < 1; a++) + for (;;) + { + i = b & ((b ^ 1) & 83647) ? b : b - 1; + g = 1 ? i : 0; + e = j[0]; + if (c) + break; + return 0; + } + } + } +} + +int +main () +{ + fn1 (); + if (g != -1) + __builtin_abort (); + return 0; +} Index: gcc/combine.c =================================================================== --- gcc/combine.c (revision 218855) +++ gcc/combine.c (working copy) @@ -4119,19 +4119,46 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn rtx midnotes = 0; int from_luid; /* Compute which registers we expect to eliminate. newi2pat may be setting - either i3dest or i2dest, so we must check it. Also, i1dest may be the - same as i3dest, in which case newi2pat may be setting i1dest. */ + either i3dest or i2dest, so we must check it. */ rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat)) || i2dest_in_i2src || i2dest_in_i1src || i2dest_in_i0src || !i2dest_killed ? 0 : i2dest); - rtx elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src + /* For i1, we need to compute both local elimination and global + elimination information with respect to newi2pat because i1dest + may be the same as i3dest, in which case newi2pat may be setting + i1dest. Global information is used when distributing REG_DEAD + note for i2 and i3, in which case it does matter if newi2pat sets + i1dest or not. + + Local information is used when distributing REG_DEAD note for i1, + in which case it doesn't matter if newi2pat sets i1dest or not. + See PR62151, if we have four insns combination: + i0: r0 <- i0src + i1: r1 <- i1src (using r0) + REG_DEAD (r0) + i2: r0 <- i2src (using r1) + i3: r3 <- i3src (using r0) + ix: using r0 + From i1's point of view, r0 is eliminated, no matter if it is set + by newi2pat or not. In other words, REG_DEAD info for r0 in i1 + should be discarded. + + Note local information only affects cases in forms like "I1->I2->I3", + "I0->I1->I2->I3" or "I0&I1->I2, I2->I3". For other cases like + "I0->I1, I1&I2->I3" or "I1&I2->I3", newi2pat won't set i1dest or + i0dest anyway. */ + rtx local_elim_i1 = (i1 == 0 || i1dest_in_i1src || i1dest_in_i0src + || !i1dest_killed + ? 0 : i1dest); + rtx elim_i1 = (local_elim_i1 == 0 || (newi2pat && reg_set_p (i1dest, newi2pat)) - || !i1dest_killed ? 0 : i1dest); - rtx elim_i0 = (i0 == 0 || i0dest_in_i0src + /* Same case as i1. */ + rtx local_elim_i0 = (i0 == 0 || i0dest_in_i0src || !i0dest_killed + ? 0 : i0dest); + rtx elim_i0 = (local_elim_i0 == 0 || (newi2pat && reg_set_p (i0dest, newi2pat)) - || !i0dest_killed ? 0 : i0dest); /* Get the old REG_NOTES and LOG_LINKS from all our insns and @@ -4300,10 +4327,10 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn elim_i2, elim_i1, elim_i0); if (i1notes) distribute_notes (i1notes, i1, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + elim_i2, local_elim_i1, local_elim_i0); if (i0notes) distribute_notes (i0notes, i0, i3, newi2pat ? i2 : NULL, - elim_i2, elim_i1, elim_i0); + elim_i2, elim_i1, local_elim_i0); if (midnotes) distribute_notes (midnotes, NULL, i3, newi2pat ? i2 : NULL, elim_i2, elim_i1, elim_i0); ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 2014-12-22 9:44 ` Bin.Cheng @ 2014-12-22 9:54 ` Eric Botcazou 0 siblings, 0 replies; 6+ messages in thread From: Eric Botcazou @ 2014-12-22 9:54 UTC (permalink / raw) To: Bin.Cheng; +Cc: gcc-patches, Bin Cheng, Jeff Law, Segher Boessenkool > Hmm, I further revised comment in the patch since in try_combine, i2 > is always after i0/i1. The original comment is inaccurate about that. OK. -- Eric Botcazou ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:44 ` Bin.Cheng @ 2014-12-22 9:50 ` Eric Botcazou 1 sibling, 0 replies; 6+ messages in thread From: Eric Botcazou @ 2014-12-22 9:50 UTC (permalink / raw) To: Bin.Cheng; +Cc: gcc-patches, Bin Cheng, Jeff Law, Segher Boessenkool > 2014-12-22 Bin Cheng <bin.cheng@arm.com> > > PR rtl-optimization/62151 > * combine.c (try_combine): New local variables local_elim_i1 > and local_elim_i0. Set elim_i1 and elim_i0 using the local > version variables. Distribute notes from i0notes or i1notes > using the local variavbles. > > gcc/testsuite/ChangeLog > 2014-12-22 Bin Cheng <bin.cheng@arm.com> > > PR rtl-optimization/62151 > * gcc.c-torture/execute/pr62151.c: New test. OK, thanks. -- Eric Botcazou ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-12-22 9:50 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-12-11 10:02 [PATCH PR62151]Fix REG_DEAD note distribution issue by using right ELIM_I0/ELIM_I1 Bin Cheng 2014-12-20 13:07 ` Eric Botcazou 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:44 ` Bin.Cheng 2014-12-22 9:54 ` Eric Botcazou 2014-12-22 9:50 ` Eric Botcazou
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).