On Thu, Feb 21, 2013 at 8:31 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Fri, Feb 22, 2013 at 12:14 PM, Andrew Pinski <pins...@gmail.com> wrote:
>> On Thu, Feb 21, 2013 at 7:16 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
>>> Hi,
>>> GCCINT says that nop_expr is used to represent conversions that do not
>>> require any code generation, while function tree_strip_nop_conversions
>>> calls tree_nop_conversion, which returns false even for NOP_EXPR node
>>> like "(unsigned int)a", where a has type int.
>>
>> Are you sure a has the type of int?
>>
>> The code does:
>>   if ((INTEGRAL_TYPE_P (outer_type)
>>        || POINTER_TYPE_P (outer_type)
>>        || TREE_CODE (outer_type) == OFFSET_TYPE)
>>       && (INTEGRAL_TYPE_P (inner_type)
>>           || POINTER_TYPE_P (inner_type)
>>           || TREE_CODE (inner_type) == OFFSET_TYPE))
>>     return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
>>
>> Which will return true for the case you mentioned.  Also NOP_EXPR and
>> CONVERT_EXPR are handled almost the same through out the whole
>> compiler.
>>
> Oh, sorry about the mistake, a has type of signed short. Maybe we can
> improve tree_nop_conversion with this case.

No because it is not a true nop conversion.  The whole NOP_EXPR vs
CONVERT_EXPR has been going on for a while now.  I was trying to make
the point to the middle-end NOP_EXPR and CONVERT_EXPR are exactly the
same and the documentation about NOP_EXPR being a conversion which
makes no code is incorrect.

Thanks,
Andrew Pinski

Reply via email to