aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2006-11-30 01:05:58 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-11-29 17:05:58 -0800
commit357f76d7f0ae3fb29ff506a52c8714aa278b5b69 (patch)
tree9b2c2f1c6c34d3d13811537da69ce50588074961 /gcc
parentb472dffcc345af54c8b86ae138d95ba8cf726e2f (diff)
downloadgcc-357f76d7f0ae3fb29ff506a52c8714aa278b5b69.zip
gcc-357f76d7f0ae3fb29ff506a52c8714aa278b5b69.tar.gz
gcc-357f76d7f0ae3fb29ff506a52c8714aa278b5b69.tar.bz2
re PR target/29945 (ICE in simplify_subreg with simple code in libgfortran)
2006-11-29 Andrew Pinski <andrew_pinski@playstation.sony.com> PR target/29945 * config/spu/spu.md (extend_compare<mode>): New pattern. (extend_compare): Change to expand and use the above pattern. 2006-11-29 Andrew Pinski <andrew_pinski@playstation.sony.com> PR target/29945 * gcc.c-torture/compile/pr29945.c: New testcase. From-SVN: r119348
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/spu/spu.md11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr29945.c8
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8df3d86..cb38286 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-29 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/29945
+ * config/spu/spu.md (extend_compare<mode>): New pattern.
+ (extend_compare): Change to expand and use the above pattern.
+
2006-11-29 Janis Johnson <janis187@us.ibm.com>
* config/dfp-bit.c (DFP_TO_INT): Fix rounding mode.
diff --git a/gcc/config/spu/spu.md b/gcc/config/spu/spu.md
index 6ed9e7b..d9a0b4e 100644
--- a/gcc/config/spu/spu.md
+++ b/gcc/config/spu/spu.md
@@ -2708,9 +2708,18 @@ selb\t%0,%4,%0,%3"
;; This pattern is used when the result of a compare is not large
;; enough to use in a selb when expanding conditional moves.
-(define_insn "extend_compare"
+(define_expand "extend_compare"
[(set (match_operand 0 "spu_reg_operand" "=r")
(unspec [(match_operand 1 "spu_reg_operand" "r")] UNSPEC_EXTEND_CMP))]
+ ""
+ {
+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], gen_rtx_UNSPEC (GET_MODE (operands[0]),
+ gen_rtvec (1, operands[1]), UNSPEC_EXTEND_CMP)));
+ DONE;
+ })
+(define_insn "extend_compare<mode>"
+ [(set (match_operand:ALL 0 "spu_reg_operand" "=r")
+ (unspec:ALL [(match_operand 1 "spu_reg_operand" "r")] UNSPEC_EXTEND_CMP))]
"operands"
"fsm\t%0,%1"
[(set_attr "type" "shuf")])
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e147237..0de5760 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-29 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/29945
+ * gcc.c-torture/compile/pr29945.c: New testcase.
+
2006-11-30 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/vect/vect.exp: Skip PowerPC targets not supporting
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr29945.c b/gcc/testsuite/gcc.c-torture/compile/pr29945.c
new file mode 100644
index 0000000..775af29
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr29945.c
@@ -0,0 +1,8 @@
+/* This test used to ICE on the SPU target. */
+extern const char *__ctype_ptr;
+
+parse_real (unsigned char c)
+{
+ if ((__ctype_ptr[c]&04) && c != '.')
+ unget_char ( c);
+}