[patch tree-ssa-forwprop]: Add type raising in shift-operations
Jeff Law
law@redhat.com
Tue Nov 26 08:43:00 GMT 2013
On 11/22/13 18:43, Kai Tietz wrote:
>> So at least for f1 and f2, these regexps match regardless of whether or
>> not the code was transformed.
>>
>> Without your patch (f1)
>> x1_2 = (unsigned char) x_1(D);
>> _3 = x1_2 << 5;
>> return _3;
>>
>> With your patch (f1):
>> _4 = x_1(D) << 5;
>> _2 = (unsigned char) _4;
>> return _2;
>>
>> So all that's happened is we changed which object got casted -- we have
>> the same number casts of an object to (unsigned char).
>
> That is actual wished. We shouldn't come to patterns, which have more type-casts by this patch.
> What we see here is the normalization of shift-left/right operations. This patch takes care that we prefer in general (Type) (X shift-left/right y) over ((Type) X) shift-left/right y notation.
Right, my point is the test didn't actually check for normalization, it
just checks if there's a particular number/type of casts.
I think it's also worth pointing out for the record this patch in and of
itself really isn't an optimization. It's setting a preferred form for
shifts. I won't call it canonicalization because we don't insist on the
this form, but it's the form we want to see.
Since it's just setting a preferred form and not an optimization, it
seems to me we should expect it to sometimes generate better code and
sometimes worse.
I'll take a closer look after I fix my arm regression :-)
jeff
More information about the Gcc-patches
mailing list