From 001f259468248e3baf3f258af703b4a1bff5c0ba Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 11 Feb 2013 18:29:53 +0100 Subject: [PATCH] backport: re PR rtl-optimization/56275 (ICE in simplify_subreg, at simplify-rtx.c:5261 with vector code.) Backport from mainline 2013-02-11 Uros Bizjak PR rtl-optimization/56275 * simplify-rtx.c (avoid_constant_pool_reference): Check that offset is non-negative and less than cmode size before calling simplify_subreg. testsuite/ChangeLog Backport from mainline 2013-02-11 Uros Bizjak PR rtl-optimization/56275 * gcc.dg/pr56275.c: New test. From-SVN: r195947 --- gcc/ChangeLog | 10 ++++++++++ gcc/simplify-rtx.c | 3 ++- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr56275.c | 12 ++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr56275.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 49c39456a357..1f2bf2299502 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2013-02-11 Uros Bizjak + + Backport from mainline + 2013-02-11 Uros Bizjak + + PR rtl-optimization/56275 + * simplify-rtx.c (avoid_constant_pool_reference): Check that + offset is non-negative and less than cmode size before + calling simplify_subreg. + 2013-02-08 David Edelsohn Michael Meissner diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 42b1be60b153..743f72c7c65d 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -188,7 +188,8 @@ avoid_constant_pool_reference (rtx x) /* If we're accessing the constant in a different mode than it was originally stored, attempt to fix that up via subreg simplifications. If that fails we have no choice but to return the original memory. */ - if (offset != 0 || cmode != GET_MODE (x)) + if ((offset != 0 || cmode != GET_MODE (x)) + && offset >= 0 && offset < GET_MODE_SIZE (cmode)) { rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset); if (tem && CONSTANT_P (tem)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c36dae80f440..bc5036222335 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-02-11 Uros Bizjak + + Backport from mainline + 2013-02-11 Uros Bizjak + + PR rtl-optimization/56275 + * gcc.dg/pr56275.c: New test. + 2013-02-03 Thomas Koenig Backport from trunk diff --git a/gcc/testsuite/gcc.dg/pr56275.c b/gcc/testsuite/gcc.dg/pr56275.c new file mode 100644 index 000000000000..fc9c3312d559 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56275.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-sse" { target { i?86-*-* x86_64-*-* } } } */ + +typedef long long v2tw __attribute__ ((vector_size (2 * sizeof (long long)))); + +void tiger_block_v2 (long long in1, v2tw *res) +{ + v2tw i1 = { in1, in1 }; + + *res = i1 << 1; +} -- 2.47.2