From 1ed6fd0815d03379692fdd1a91a03db50e556797 Mon Sep 17 00:00:00 2001 From: krebbel Date: Tue, 24 Apr 2007 12:08:05 +0000 Subject: [PATCH] 2007-04-24 Andreas Krebbel PR target/31641 * config/s390/s390.c (s390_expand_setmem): Don't ICE for constant length argument of 0 for memset. (s390_expand_movmem, s390_expand_setmem, s390_expand_cmpmem): Use unsigned shift instead of the signed variant. 2007-04-24 Andreas Krebbel PR target/31641 * gcc.c-torture/compile/pr31641.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124099 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/config/s390/s390.c | 12 +++++++----- gcc/testsuite/ChangeLog | 5 +++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc6f3bc..4084f04 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2007-04-24 Andreas Krebbel + PR target/31641 + * config/s390/s390.c (s390_expand_setmem): Don't ICE for constant length + argument of 0 for memset. + (s390_expand_movmem, s390_expand_setmem, s390_expand_cmpmem): Use + unsigned shift instead of the signed variant. + +2007-04-24 Andreas Krebbel + * config/s390/s390.md ("*cmp_ccs_0_ibm", "*cmp_ccs_ibm", "fix_trunc2_ieee", "fix_truncdfsi2_ibm", "floatsidf2_ibm", "floatsisf2", "truncdfsf2_ieee", "truncdfsf2_ibm", diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 1721971..ced302a 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -3570,7 +3570,7 @@ s390_expand_movmem (rtx dst, rtx src, rtx len) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); @@ -3607,10 +3607,12 @@ s390_expand_movmem (rtx dst, rtx src, rtx len) void s390_expand_setmem (rtx dst, rtx len, rtx val) { - gcc_assert (GET_CODE (len) != CONST_INT || INTVAL (len) > 0); + if (GET_CODE (len) == CONST_INT && INTVAL (len) == 0) + return; + gcc_assert (GET_CODE (val) == CONST_INT || GET_MODE (val) == QImode); - if (GET_CODE (len) == CONST_INT && INTVAL (len) <= 257) + if (GET_CODE (len) == CONST_INT && INTVAL (len) > 0 && INTVAL (len) <= 257) { if (val == const0_rtx && INTVAL (len) <= 256) emit_insn (gen_clrmem_short (dst, GEN_INT (INTVAL (len) - 1))); @@ -3684,7 +3686,7 @@ s390_expand_setmem (rtx dst, rtx len, rtx val) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); @@ -3776,7 +3778,7 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len) if (temp != count) emit_move_insn (count, temp); - temp = expand_binop (mode, ashr_optab, count, GEN_INT (8), blocks, 1, 0); + temp = expand_binop (mode, lshr_optab, count, GEN_INT (8), blocks, 1, 0); if (temp != blocks) emit_move_insn (blocks, temp); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d94dc90..cad1ee8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-24 Andreas Krebbel + + PR target/31641 + * gcc.c-torture/compile/pr31641.c: New testcase. + 2007-04-24 Richard Sandiford * gcc.target/mips/madd-1.c, gcc.target/mips/madd-2.c, -- 2.7.4