[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