On Thu, Nov 24, 2016 at 8:57 AM, Richard Biener
<[email protected]> wrote:
> On Wed, Nov 23, 2016 at 3:57 PM, Bin.Cheng <[email protected]> wrote:
>> On Wed, Nov 23, 2016 at 2:27 PM, Richard Biener
>> <[email protected]> wrote:
>>> On Wed, Nov 23, 2016 at 2:54 PM, Bin Cheng <[email protected]> wrote:
>>>> Hi,
>>>> This is actually the review suggestion for patch
>>>> @https://gcc.gnu.org/ml/gcc-patches/2016-11/msg02341.html, but I forgot to
>>>> incorporate it when committing that patch. Here comes this one doing
>>>> that, as well as adding a missing convert keyword. Toolchain built
>>>> successfully, is it OK?
>>>
>>> As said you _do_ need the outermost (convert ...) on the (max .. and
>>> (min ... expressions given @1 may not be of type 'type'.
>> Sorry about the stupid mistake. How about this one? The from_type in
>> the last branch looks like necessary to me.
>
> I think
>
> (if (code == EQ_EXPR)
> (cond (cmp @1 (convert @3)) (convert @3) @2)))))))
>
> is better? We want the outer expression of type 'type' and @2 is
> already 'type',
> only @3 may not be. So the only change would be to dop the unnecessary
> :from_type inside the cmp and the bogus :from_type on the true arg of the
> cond.
Hi Richard,
The idea of using from_type in EQ_EXPR case is to do cond_expr in
narrow/from type for all its operands, then convert the result back to
default type.
- (cond (cmp @1 (convert:from_type @3)) (convert:from_type @3) @2)))))))
+ (convert (cond (cmp @1 (convert @3))
+ (convert:from_type @3) (convert:from_type @2)))))))))
Is it better than using different types for operand 0 and 1/2 in cond_expr?
I updated the patch following your suggestion. Note, in this way
below range check on @2 should be redundant for EQ_EXPR case, but I
didn't change that in this patch.
if (int_fits_type_p (@2, from_type)
&& (types_match (c1_type, from_type)
|| (TYPE_PRECISION (c1_type) > TYPE_PRECISION (from_type)
&& (TYPE_UNSIGNED (from_type)
|| TYPE_SIGN (c1_type) == TYPE_SIGN (from_type))))
So which one should be preferred?
Thanks,
bin
>
> Richard.
>
>
>> Thanks,
>> bin
>>>
>>>> Thanks,
>>>> bin
>>>>
>>>> 2016-11-23 Bin Cheng <[email protected]>
>>>>
>>>> * match.pd: Refine type conversion in result expressions for below
>>>> pattern:
>>>> (cond (cmp (convert1? x) c1) (convert2? x) c2) -> (minmax (x c)).