aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2005-05-06 10:43:58 -0600
committerJeff Law <law@gcc.gnu.org>2005-05-06 10:43:58 -0600
commitb8c1d4a1bce11dd9fad78ef63ec757aebaad3054 (patch)
tree6d6df66aad3d07ccb0ac096747068ca17428c203 /gcc
parent7673b71ce98231709cd068e8ad2c9a3875d34d85 (diff)
downloadgcc-b8c1d4a1bce11dd9fad78ef63ec757aebaad3054.zip
gcc-b8c1d4a1bce11dd9fad78ef63ec757aebaad3054.tar.gz
gcc-b8c1d4a1bce11dd9fad78ef63ec757aebaad3054.tar.bz2
re PR tree-optimization/21380 (ICE compiling with -O)
PR tree-optimization/21380 * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not thread through a block with no preds. * gcc.c-torture/compile/pr21380.c: New test. From-SVN: r99324
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr21380.c42
-rw-r--r--gcc/tree-ssa-threadupdate.c3
4 files changed, 54 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cca08f2..846b95f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-06 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/21380
+ * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not
+ thread through a block with no preds.
+
2005-05-06 Kazu Hirata <kazu@cs.umass.edu>
* tree-ssa-operands.c (clobbered_v_may_defs, clobbered_vuses,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ae84155..4b3ca39 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-05-06 Jeff Law <law@redhat.com>
+
+ * gcc.c-torture/compile/pr21380.c: New test.
+
2005-05-06 Jakub Jelinek <jakub@redhat.com>
PR c++/20961
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr21380.c b/gcc/testsuite/gcc.c-torture/compile/pr21380.c
new file mode 100644
index 0000000..55ac08e
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr21380.c
@@ -0,0 +1,42 @@
+void bar (void);
+
+void
+foo (int *diff)
+{
+ double deltay = 0.0;
+ int Stangent = 0;
+ int mindiff;
+ int Sflipped = 0;
+ int i;
+ int Sturn, Snofit;
+
+ Sturn = 1;
+ if (Sturn)
+ Stangent = 1;
+ if (Sturn)
+ {
+ Sflipped = 0;
+ Snofit = 1;
+ while (Snofit)
+ {
+ Snofit = 0;
+ mindiff = 0;
+ for (i = 0; i < 4; i++)
+ mindiff = diff[i];
+ while (!Snofit && (mindiff < 0.0))
+ {
+ deltay = (Stangent ? deltay : 0.0);
+ if (deltay < 0.0)
+ Snofit = 1;
+ for (i = 0; i < 4; i++)
+ {
+ }
+ }
+ if (Snofit)
+ if (Sflipped)
+ break;
+ }
+ if (Snofit)
+ bar ();
+ }
+}
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c
index 617467a..a5dc049 100644
--- a/gcc/tree-ssa-threadupdate.c
+++ b/gcc/tree-ssa-threadupdate.c
@@ -811,7 +811,8 @@ thread_through_all_blocks (void)
FOR_EACH_BB (bb)
{
- if (bb_ann (bb)->incoming_edge_threaded)
+ if (bb_ann (bb)->incoming_edge_threaded
+ && EDGE_COUNT (bb->preds) > 0)
{
retval |= thread_block (bb);
bb_ann (bb)->incoming_edge_threaded = false;