This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Flow crash for conditional branches against a constant
- From: Ian Lance Taylor <ian at wasabisystems dot com>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: 11 Jun 2004 11:47:33 -0400
- Subject: Re: Flow crash for conditional branches against a constant
- References: <20040611154452.GA26000@nevyn.them.org>
Daniel Jacobowitz <drow@false.org> writes:
> I'm working on a port that has a branch instruction taking an unsigned
> immediate. Something like this is valid:
>
> (set (pc) (if_then_else (ne (reg:SI 66) (const_int 1)))
> (label_ref 1)
> (pc))
>
> But flow.c completely falls down on this construct. For instance, that will
> cause not_reg_cond to abort because it is only prepared to handle comparison
> against 0.
>
> Flow also doesn't like this:
> (set (pc) (if_then_else (ne (subreg:SI (reg:QI 66)) (const_int 1)))
> (label_ref 1)
> (pc))
> It uses REGNO on the first argument without checking for SUBREGs created by
> combine.
Isn't there something a bit strange about that? If reg 66 holds a
QImode value, can you really do an SImode compare? How do you know
what is in the upper bits of the register?
Should you be defining PROMOTE_MODE?
Ian