This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR/18308: ice-on-valid because of non-GIMPLE
- From: Roger Sayle <roger at eyesopen dot com>
- To: Paolo Bonzini <paolo dot bonzini at lu dot unisi dot ch>
- Cc: dpatel at apple dot com, <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 28 Dec 2004 18:39:49 -0700 (MST)
- Subject: Re: PR/18308: ice-on-valid because of non-GIMPLE
On Tue, 28 Dec 2004, Paolo Bonzini wrote:
> This patch is a fix for PR18308, an ice-on-valid that happens
> when the vectorizer cannot make use of a COND_EXPR produced
> by tree-level if-conversion. In this case, TER can combine
> two COND_EXPRs in a way that is not recognized by do_jump:
> fixing this part is easy because COND_EXPRs are recognized
> by expand_expr_real_1 which is where do_jump's default label
> goes.
I'll only comment on the change to dojump.c. Although, COND_EXPR
*can* be handled by the call to expand_expr_real_1 in do_jump's
default case, it generates worse RTL than the original handling
of COND_EXPR in do_jump that was deleted by your earlier patch:
2004-08-17 Paolo Bonzini <bonzini@gnu.org>
* dojump.c (do_jump) <COND_EXPR, EQ_EXPR, NE_EXPR,
TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, COMPOUND_EXPR>:
Abort on gimplified cases.
Might I strongly recommend that if we're reversing that previous
decision, and wish to allow do_jump to handle COND_EXPR again,
that we additionally revert the <COND_EXPR> part of the patch cited
above, i.e. the relevant hunks of "cvs diff -r1.27 -r1.26 dojump.c".
It would be a shame to so easily loose some of GCC's optimizations.
Roger
--