aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-12-01 14:53:53 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-12-01 14:53:53 +0000
commit6c59645f5de1af1dff9715a5bd30f21f29cf2607 (patch)
tree6121ab77960eee153560c2f4bde6de4dece328a6 /gcc
parent5797378aabcc51ef4de094f0160e451b45d6cfb7 (diff)
downloadgcc-6c59645f5de1af1dff9715a5bd30f21f29cf2607.zip
gcc-6c59645f5de1af1dff9715a5bd30f21f29cf2607.tar.gz
gcc-6c59645f5de1af1dff9715a5bd30f21f29cf2607.tar.bz2
PR68474: Fix tree-call-cdce.c:use_internal_fn
We'd call gen_shrink_wrap_conditions for functions that it can't handle but edom_only_function can. Tested on x86_64-linux-gnu. gcc/ PR tree-optimization/68474 * tree-call-cdce.c (use_internal_fn): Protect call to gen_shrink_wrap_conditions. gcc/testsuite/ PR tree-optimization/68474 * gcc.dg/pr68474.c: New test. From-SVN: r231115
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr68474.c7
-rw-r--r--gcc/tree-call-cdce.c3
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 10d90fe..5b631cf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-12-01 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/68474
+ * tree-call-cdce.c (use_internal_fn): Protect call to
+ gen_shrink_wrap_conditions.
+
2015-12-01 Christian Bruel <christian.bruel@st.com>
PR target/68617
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8463980..78d31ef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-12-01 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/68474
+ * gcc.dg/pr68474.c: New test.
+
2015-12-01 Christian Bruel <christian.bruel@st.com>
PR target/68617
diff --git a/gcc/testsuite/gcc.dg/pr68474.c b/gcc/testsuite/gcc.dg/pr68474.c
new file mode 100644
index 0000000..8ad7def
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr68474.c
@@ -0,0 +1,7 @@
+/* { dg-options "-O -funsafe-math-optimizations" } */
+
+long double
+foo (long double d1, long double d2)
+{
+ return d1 || __builtin_significandl (d2);
+}
diff --git a/gcc/tree-call-cdce.c b/gcc/tree-call-cdce.c
index 75ef180..4123130 100644
--- a/gcc/tree-call-cdce.c
+++ b/gcc/tree-call-cdce.c
@@ -959,7 +959,8 @@ use_internal_fn (gcall *call)
{
unsigned nconds = 0;
auto_vec<gimple *, 12> conds;
- gen_shrink_wrap_conditions (call, conds, &nconds);
+ if (can_test_argument_range (call))
+ gen_shrink_wrap_conditions (call, conds, &nconds);
if (nconds == 0 && !edom_only_function (call))
return false;