This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ICE on valid code, cse related


"Pranav Bhandarkar" <pranav.bhandarkar@gmail.com> writes:

> > How can we have a PLUS on a CONST_DOUBLE and a CONST_INT?  That does
> > not make sense, as there is no MODE argument that could make this work
> > correctly.  From your description, MODE must be some integer mode, in
> > which case it is wrong to be using a CONST_DOUBLE in SFmode.
> >
> > (I don't know where the bug is; I'm just trying to help pin it down.)
> Here it is!!
> The problem is that for  the following insn(insn 20 19 21 2
>  (set (reg:SI 141)
>         (xor:SI (subreg:SI (reg:SF 139) 0)
>             (reg:SI 140))) 65 {xorsi3} (expr_list:REG_EQUAL
> (const_double:SF 0 [0x0] -0.0 [-0x0.0p+0])
>         (nil)))
> 
> reg:SI 140 is known to have the constant value
> (const_int -2147483648 [0x80000000]))
>  and (subreg:SI (reg:SF 139) 0) is known to have the value
> (const_double:SF 0 [0x0] 0.0 [0x0.0p+0])   [ as described by my
> previous post in the same thread ]

(reg:SF 139) can hold the value (const_double:SF 0) but (subreg:SI
(reg:SF 139)) should be the value (const_int 0).  Perhaps the problem
is how we handle a REG_EQUAL note when the destination of the set is a
SUBREG.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]