[Bug target/36362] [4.1/4.2/4.3/4.4 Regression] ICE in simplify_subreg

rguenther at suse dot de gcc-bugzilla@gcc.gnu.org
Thu May 29 09:43:00 GMT 2008



------- Comment #3 from rguenther at suse dot de  2008-05-29 09:42 -------
Subject: Re:  [4.1/4.2/4.3/4.4 Regression] ICE in
 simplify_subreg

On Thu, 29 May 2008, ubizjak at gmail dot com wrote:

> ------- Comment #2 from ubizjak at gmail dot com  2008-05-29 09:35 -------
> This fails for all optimization levels:
> 
> --cut here--
> extern float c;
> 
> int test(void)
> {
>   return !!c * 7LL == 0;
> }
> --cut here--

We expand !(c != 0.0) via

8993          op0 = expand_expr (TREE_OPERAND (exp, 0), target,
8994                             VOIDmode, EXPAND_NORMAL);
8995          /* The parser is careful to generate TRUTH_NOT_EXPR
8996             only with operands that are always zero or one.  */
8997          temp = expand_binop (mode, xor_optab, op0, const1_rtx,
8998                               target, 1, OPTAB_LIB_WIDEN);

and op0 is (reg:QI 61) (the comparison result) and mode is DImode
for no good reason - well, for the reason the original tree TRUTH_NOT_EXPR
has a DImode type...

Richard.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36362



More information about the Gcc-bugs mailing list