aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-05-21 21:17:28 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2015-05-21 21:17:28 +0200
commitd51a6714b93b8a3c85e69003d74782140cd9b763 (patch)
tree1e657edfce1ba3c213edcb45377647ad24b46861 /gcc
parentc39d5e4a6a900227a279e5cadfb52168eb2397c0 (diff)
downloadgcc-d51a6714b93b8a3c85e69003d74782140cd9b763.zip
gcc-d51a6714b93b8a3c85e69003d74782140cd9b763.tar.gz
gcc-d51a6714b93b8a3c85e69003d74782140cd9b763.tar.bz2
re PR tree-optimization/66233 (internal compiler error: in expand_fix, at optabs.c:5358)
PR tree-optimization/66233 * match.pd (ocvt (icvt@1 @0)): Don't handle vector types. Simplify. * gcc.c-torture/execute/pr66233.c: New test. From-SVN: r223500
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr66233.c22
4 files changed, 38 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48472bc..a74a7ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/66233
+ * match.pd (ocvt (icvt@1 @0)): Don't handle vector types.
+ Simplify.
+
2015-05-21 Jeff Law <law@redhat.com>
* config/pa/pa.md (add-with-constant splitter): Use ASHIFT rather
diff --git a/gcc/match.pd b/gcc/match.pd
index ce62853..73ccfbd 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -730,16 +730,12 @@ along with GCC; see the file COPYING3. If not see
(for integers). Avoid this if the final type is a pointer since
then we sometimes need the middle conversion. Likewise if the
final type has a precision not equal to the size of its mode. */
- (if (((inter_int && inside_int)
- || (inter_float && inside_float)
- || (inter_vec && inside_vec))
+ (if (((inter_int && inside_int) || (inter_float && inside_float))
+ && (final_int || final_float)
&& inter_prec >= inside_prec
- && (inter_float || inter_vec
- || inter_unsignedp == inside_unsignedp)
- && ! (final_prec != GET_MODE_PRECISION (element_mode (type))
- && element_mode (type) == element_mode (inter_type))
- && ! final_ptr
- && (! final_vec || inter_prec == inside_prec))
+ && (inter_float || inter_unsignedp == inside_unsignedp)
+ && ! (final_prec != GET_MODE_PRECISION (TYPE_MODE (type))
+ && TYPE_MODE (type) == TYPE_MODE (inter_type)))
(ocvt @0))
/* If we have a sign-extension of a zero-extended value, we can
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 73a3e56..e5083f6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/66233
+ * gcc.c-torture/execute/pr66233.c: New test.
+
2015-05-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/66176
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr66233.c b/gcc/testsuite/gcc.c-torture/execute/pr66233.c
new file mode 100644
index 0000000..b0d63b6
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr66233.c
@@ -0,0 +1,22 @@
+/* PR tree-optimization/66233 */
+
+unsigned int v[8];
+
+__attribute__((noinline, noclone)) void
+foo (void)
+{
+ int i;
+ for (i = 0; i < 8; i++)
+ v[i] = (float) i;
+}
+
+int
+main ()
+{
+ unsigned int i;
+ foo ();
+ for (i = 0; i < 8; i++)
+ if (v[i] != i)
+ __builtin_abort ();
+ return 0;
+}