On 24 July 2016 at 21:26, Bin.Cheng <amker.ch...@gmail.com> wrote:
> Hi,
> I ran into a problem that C frontend (in function
> build_conditional_expr) creates expression like (C_MAYBE_CONST_EXPR
> (NULL, x + const)).  The inner expression (and its operands) have
> unsigned int type.  After that, the expression needs to be casted to
> result type which is unsigned short.  In this case,
> convert_to_integer/convert_to_integer_1 doesn't fold into
> C_MAYBE_CONST_EXPR and just returns (unsigned
> short)(C_MAYBE_CONST_EXPR (NULL, x + const)), as a result, (unsigned
> short)(x + const) won't be simplified as (unsigned short)x + const.
> My questions are, 1) Is it possible to fold type conversion into
> C_MAYBE_CONST_EXPR's inner expression in convert_to_integer_1?  2) If
> not, looks like there are couple of places the mentioned fold can be
> done, for example, after stripping C_MAYBE_CONST_EXPR and before (or
> during) gimplify.  So which place is preferred?
Sorry, I have a very silly question:
I don't understand how the following transform
(unsigned short) (x + const) to (unsigned short)x + const would be legal
since the operands to PLUS_EXPR in latter case would have different types
(unsigned short, unsigned) ?
I suppose in GIMPLE (and GENERIC too?)
we require rhs1 and rhs2 to have same types  ?

Thanks,
Prathamesh
>
> Thanks,
> bin

Reply via email to