PR/18308: ice-on-valid because of non-GIMPLE

Paolo Bonzini paolo.bonzini@lu.unisi.ch
Tue Dec 28 18:47:00 GMT 2004


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.

Actually, what ifcvt produces is completely non-GIMPLE:

   _ifc_.2_15 = (j_6 != 0 || !_ifc_.1_16) && ivtmp.0_4 != 0;

So, this patch also contains an hunk that Devang Patel posted
in the PR's audit trail, which forces operands of its COND_EXPR
to be GIMPLE.

Bootstrapped/regtested i686-pc-linux-gnu, and confirmed that
it produces valid code for the testcase on arm-unknown-elf.
Unlike the one in the audit trail, this test case does not
rely on an uninitialized variable.

Ok for mainline?

Paolo

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pr18308.patch
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20041228/8186f9d6/attachment.ksh>


More information about the Gcc-patches mailing list