On Fri, Feb 22, 2013 at 12:33 PM, Andrew Pinski <pins...@gmail.com> wrote:
> 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 for your explanation.

-- 
Best Regards.

Reply via email to