"Pranav Bhandarkar" <[EMAIL PROTECTED]> writes:

> > (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.
> 
> (subreg:SI (reg:SF 139), 0) shouldnt be able to hold the value
> (float:SF (reg:SI 138) ? Am I right on this ? 

(subreg:SI (reg:SF 139), 0) implies an SImode lvalue.  You can't store
an SFmode value into an SImode lvalue.  You could store (reg:SI 138)
there, or you could store (subreg:SI (float:SF (reg:SI 138)) 0) there.

> Because the expander
> generates the following while storing the return value
> (insn 17 18 19 testcase-min.i:8 (set (subreg:SI (reg:SF 139) 0)
>         (mem/c/i:SI (reg/f:SI 129 virtual-stack-vars) [2 S4 A32])) -1
> (expr_list:REG_LIBCALL_ID (const_int 1 [0x1])
>         (insn_list:REG_RETVAL 14 (expr_list:REG_EQUAL (float:SF (reg:SI 138))
>                 (nil)))))

I guess that insn arguably has a mismatch between the mode of the
REG_EQUAL node and the mode of the destination of the set.  It's a
confusing situation.

Ian

Reply via email to