Howdy!

Are the types for PHI arguments and the corresponding result supposed to match?

In the backwards threader I'm seeing:

        _103 = PHI <_173(11), 0B(12)>

Where the type of _103 is cgraph_node *, and the type of _173 is symtab_node *.

I know one is derived from the other (struct cgraph_node : public symtab_node), but I would have expected a cast somewhere.

<bb 10> :
# _173 = PHI <0B(6), _172(9)>
if (_173 != 0B)
  goto <bb 11>; [70.00%]
else
  goto <bb 12>; [30.00%]

<bb 11> :
_109 = _173->type;
if (_109 == 1)
  goto <bb 13>; [34.00%]
else
  goto <bb 12>; [66.00%]

<bb 13> :
# _103 = PHI <_173(11), 0B(12)>
if (_103 != 0B)

Similarly for simpler stuff.  Is this legal?:

typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef UDItype UINT64;
UINT64 c_prov_hi;
long unsigned int z$w$5;
...
# c_prov_hi_222 = PHI <z$w$5_384(68), blah>

Thanks.
Aldy

Reply via email to