This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: patch to stop GCC from shifting by a negative number
- From: Steve Ellcey <sje at cup dot hp dot com>
- To: geoffk at geoffk dot org
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 13 Aug 2002 12:45:39 -0700 (PDT)
- Subject: Re: patch to stop GCC from shifting by a negative number
> + /* You want to truncate to a _what_? */
> + if (GET_MODE_CLASS (mode) != MODE_INT
> + && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT)
> + abort ();
> +
I ran the test suite with your patch and hit this abort a couple of
times on the PA64 HP-UX platform with tests
gcc.c-torture/execute/20020227-1.c and gcc.c-torture/compile/simd-1.c
using -O2 optmization.
In 20020227-1.c I enter simplify_binary_operation
with
code=LSHIFTRT
mode=SCmode
op0=(const_int -1 [0xffffffffffffffff])
op1=(const_int 32 [0x20])
In simd-1.c I enter simplify_binary_operation
with
code=ASHIFT
mode=V2SImode
op0=(const_int 4294967295 [0xffffffff])
op1=(const_int 32 [0x20])
and in both cases I call trunc_int_for_mode right at the end of
simplify_binary_operation with a mode of either SCmode or V2SImode which
then causes the abort to be hit.
Any ideas on what a good fix for these cases would be?
Steve Ellcey
sje@cup.hp.com