You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
59 lines
1.7 KiB
commit 482551a79a3d3f107f6239679ee74655cfe8707e |
|
Author: Richard Biener <rguenther@suse.de> |
|
Date: Thu Aug 17 13:10:14 2023 +0200 |
|
|
|
tree-optimization/111039 - abnormals and bit test merging |
|
|
|
The following guards the bit test merging code in if-combine against |
|
the appearance of SSA names used in abnormal PHIs. |
|
|
|
PR tree-optimization/111039 |
|
* tree-ssa-ifcombine.cc (ifcombine_ifandif): Check for |
|
SSA_NAME_OCCURS_IN_ABNORMAL_PHI. |
|
|
|
* gcc.dg/pr111039.c: New testcase. |
|
|
|
diff --git a/gcc/testsuite/gcc.dg/pr111039.c b/gcc/testsuite/gcc.dg/pr111039.c |
|
new file mode 100644 |
|
index 00000000000..bec9983b35f |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/pr111039.c |
|
@@ -0,0 +1,15 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O" } */ |
|
+ |
|
+int _setjmp (); |
|
+void abcd (); |
|
+void abcde (); |
|
+void compiler_corruption_function(int flags) |
|
+{ |
|
+ int nowait = flags & 1048576, isexpand = flags & 8388608; |
|
+ abcd(); |
|
+ _setjmp(flags); |
|
+ if (nowait && isexpand) |
|
+ flags &= 0; |
|
+ abcde(); |
|
+} |
|
--- a/gcc/tree-ssa-ifcombine.c |
|
+++ b/gcc/tree-ssa-ifcombine.c |
|
@@ -430,6 +430,9 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, |
|
{ |
|
tree t, t2; |
|
|
|
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) |
|
+ return false; |
|
+ |
|
/* Do it. */ |
|
gsi = gsi_for_stmt (inner_cond); |
|
t = fold_build2 (LSHIFT_EXPR, TREE_TYPE (name1), |
|
@@ -486,6 +489,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, |
|
gimple_stmt_iterator gsi; |
|
tree t; |
|
|
|
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1) |
|
+ || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2)) |
|
+ return false; |
|
+ |
|
/* Find the common name which is bit-tested. */ |
|
if (name1 == name2) |
|
;
|
|
|