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.
66 lines
1.9 KiB
66 lines
1.9 KiB
commit 966b0a96523fb7adbf498ac71df5e033c70dc546 |
|
Author: Richard Biener <rguenther@suse.de> |
|
Date: Mon Aug 21 09:01:00 2023 +0200 |
|
|
|
tree-optimization/111070 - fix ICE with recent ifcombine fix |
|
|
|
We now got test coverage for non-SSA name bits so the following amends |
|
the SSA_NAME_OCCURS_IN_ABNORMAL_PHI checks. |
|
|
|
PR tree-optimization/111070 |
|
* tree-ssa-ifcombine.cc (ifcombine_ifandif): Check we have |
|
an SSA name before checking SSA_NAME_OCCURS_IN_ABNORMAL_PHI. |
|
|
|
* gcc.dg/pr111070.c: New testcase. |
|
|
|
diff --git a/gcc/testsuite/gcc.dg/pr111070.c b/gcc/testsuite/gcc.dg/pr111070.c |
|
new file mode 100644 |
|
index 00000000000..1ebc7adf782 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/pr111070.c |
|
@@ -0,0 +1,20 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O" } */ |
|
+ |
|
+/* common */ |
|
+char c; |
|
+/* arrays must be 8 byte aligned, regardless of size */ |
|
+char c_ary[1]; |
|
+ |
|
+/* data */ |
|
+char d = 1; |
|
+char d_ary[1] = {1}; |
|
+ |
|
+int main () |
|
+{ |
|
+ if (((unsigned long)&c_ary[0] & 7) != 0) |
|
+ return 1; |
|
+ if (((unsigned long)&d_ary[0] & 7) != 0) |
|
+ return 1; |
|
+ return 0; |
|
+} |
|
--- a/gcc/tree-ssa-ifcombine.c |
|
+++ b/gcc/tree-ssa-ifcombine.c |
|
@@ -430,7 +430,8 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, |
|
{ |
|
tree t, t2; |
|
|
|
- if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) |
|
+ if (TREE_CODE (name1) == SSA_NAME |
|
+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) |
|
return false; |
|
|
|
/* Do it. */ |
|
@@ -489,8 +490,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)) |
|
+ if ((TREE_CODE (name1) == SSA_NAME |
|
+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) |
|
+ || (TREE_CODE (name2) == SSA_NAME |
|
+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2))) |
|
return false; |
|
|
|
/* Find the common name which is bit-tested. */
|
|
|