On Sun, Mar 20, 2011 at 12:01 PM, Chung-Lin Tang <clt...@codesourcery.com> wrote: > Hi, > PR48183 is a case where ARM NEON instrinsics, under -O -g, produce debug > insns that tries to expand OImode (32-byte integer) zero constants, much > too large to represent as two HOST_WIDE_INTs; as the internals manual > indicates, such large constants are not supported in general, and ICEs > on the GET_MODE_BITSIZE(mode) == 2*HOST_BITS_PER_WIDE_INT assertion. > > This patch allows the cases where the large integer constant is still > representable using a single CONST_INT, such as zero(0). Bootstrapped > and tested on i686 and x86_64, cross-tested on ARM, all without > regressions. Okay for trunk?
Hum, if you make it fit into a CONST_INT why not make it fit into a CONST_DOUBLE where it should _always_ fit because of the limits of the arguments given to immed_double_const. Thus, why not simply remove the assert - also a question for other reviewers? Or rather, why does immed_double_const have a mode argument and does not require the caller to properly truncate? Thanks, Richard. > Thanks, > Chung-Lin > > 2011-03-20 Chung-Lin Tang <clt...@codesourcery.com> > > * emit-rtl.c (immed_double_const): Allow wider than > 2*HOST_BITS_PER_WIDE_INT mode constants when they are > representable as a single const_int RTX. >