This commit is contained in:
Jakub Jelinek 2021-05-12 17:15:45 +02:00
parent f172832272
commit a31fadcc09
2 changed files with 72 additions and 0 deletions

View File

@ -266,6 +266,7 @@ Patch11: gcc11-rh1574936.patch
Patch12: gcc11-d-shared-libphobos.patch Patch12: gcc11-d-shared-libphobos.patch
Patch13: gcc11-pr99341-revert.patch Patch13: gcc11-pr99341-revert.patch
Patch14: gcc11-pr100379.patch Patch14: gcc11-pr100379.patch
Patch15: gcc11-pr100566.patch
Patch100: gcc11-fortran-fdec-duplicates.patch Patch100: gcc11-fortran-fdec-duplicates.patch
Patch101: gcc11-fortran-flogical-as-integer.patch Patch101: gcc11-fortran-flogical-as-integer.patch
@ -790,6 +791,7 @@ to NVidia PTX capable devices if available.
%patch12 -p0 -b .d-shared-libphobos~ %patch12 -p0 -b .d-shared-libphobos~
%patch13 -p0 -b .pr99341-revert~ %patch13 -p0 -b .pr99341-revert~
%patch14 -p0 -b .pr100379~ %patch14 -p0 -b .pr100379~
%patch15 -p0 -b .pr100566~
%if 0%{?rhel} >= 9 %if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~ %patch100 -p1 -b .fortran-fdec-duplicates~
@ -3145,6 +3147,7 @@ end
tree-optimization/100253, tree-optimization/100278, tree-optimization/100253, tree-optimization/100278,
tree-optimization/100329, tree-optimization/100414 tree-optimization/100329, tree-optimization/100414
- fix build with removed linux/cyclades.h header (PR sanitizer/100379) - fix build with removed linux/cyclades.h header (PR sanitizer/100379)
- fix up mausezahn miscompilation (#1958887, PR tree-optimization/100566)
* Wed Apr 28 2021 Jakub Jelinek <jakub@redhat.com> 11.1.1-1 * Wed Apr 28 2021 Jakub Jelinek <jakub@redhat.com> 11.1.1-1
- update from releases/gcc-11-branch - update from releases/gcc-11-branch

69
gcc11-pr100566.patch Normal file
View File

@ -0,0 +1,69 @@
2021-05-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/100566
* tree-ssa-sccvn.c (dominated_by_p_w_unex): Properly handle
allow_back for all edge queries.
* gcc.dg/torture/pr100566.c: New testcase.
--- gcc/tree-ssa-sccvn.c
+++ gcc/tree-ssa-sccvn.c
@@ -4529,7 +4529,8 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back)
/* Iterate to the single executable bb2 successor. */
edge succe = NULL;
FOR_EACH_EDGE (e, ei, bb2->succs)
- if (e->flags & EDGE_EXECUTABLE)
+ if ((e->flags & EDGE_EXECUTABLE)
+ || (!allow_back && (e->flags & EDGE_DFS_BACK)))
{
if (succe)
{
@@ -4547,7 +4548,8 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back)
{
FOR_EACH_EDGE (e, ei, succe->dest->preds)
if (e != succe
- && (e->flags & EDGE_EXECUTABLE))
+ && ((e->flags & EDGE_EXECUTABLE)
+ || (!allow_back && (e->flags & EDGE_DFS_BACK))))
{
succe = NULL;
break;
--- gcc/testsuite/gcc.dg/torture/pr100566.c
+++ gcc/testsuite/gcc.dg/torture/pr100566.c
@@ -0,0 +1,36 @@
+/* { dg-do run } */
+
+volatile int s, c;
+
+__attribute__((noipa)) void
+foo (void)
+{
+ if (c++ > 1)
+ __builtin_abort ();
+}
+
+__attribute__((noipa)) int
+bar (void)
+{
+ int i = 0, j = s;
+ if (j == 0)
+ goto lab;
+ for (i = 0; i < j; i++)
+ {
+ lab:
+ foo ();
+ if (!j)
+ goto lab;
+ }
+ return 0;
+}
+
+int
+main ()
+{
+ s = 1;
+ bar ();
+ if (c != 1)
+ __builtin_abort ();
+ return 0;
+}