This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/69416] [6 Regression] Nonsense rtl checking failure
- From: "rth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 21 Jan 2016 19:40:28 +0000
- Subject: [Bug target/69416] [6 Regression] Nonsense rtl checking failure
- Auto-submitted: auto-generated
- References: <bug-69416-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69416
--- Comment #3 from Richard Henderson <rth at gcc dot gnu.org> ---
(In reply to Wilco from comment #2)
> It doesn't list the substitution before simplification, but it should be:
>
> (set (reg:SI 465)
> (gtu:SI
> (if_then_else:CC (ne (reg:SI 1002 [ ref_309(D)->codeD.85066 ])
> (const_int 47 [0x2f]))
> (compare:CC (const_int 29 [0x1d]) (const_int 1 [0x1]))
> (const_int 8 [0x8])))
> (const_int 0 [0])))
>
> I don't see how it could simplify this unless it constant evaluates both the
> then and else (despite CCmode type being special and needing extra care) and
> decides they are both true, so the if-condition doesn't matter at all...
Combine's behaviour with CCmode is suspect, but I guess that the ELSE
portion of the inner IF needs more than a bare const_int.
I would write this as (unspec:CC [(const_int 8)] UNSPEC_NZCV).