Using associativity for optimization
shmeel gutl
shmeelgutl@shmuelhome.mine.nu
Wed Dec 3 06:05:00 GMT 2014
On 02-Dec-14 12:23 PM, Richard Biener wrote:
> On Tue, Dec 2, 2014 at 12:11 AM, shmeel gutl
> <shmeelgutl@shmuelhome.mine.nu> wrote:
>> While testing my implementation of passing arguments in registers, I noticed
>> that gcc 4.7 creates instruction dependencies when it doesn't have to.
>> Consider:
>>
>> int foo(int a1, int a2, int a3, int a4)
>> {
>> return a1|a2|a3|a4;
>> }
>>
>> gcc, even with -O2 generated code that was equivalent to
>>
>> temp1 = a1 | a2;
>> temp2 = temp1 | a3;
>> temp3 = temp2 | a4;
>>
>> return temp3;
>>
>> This code must be executed serially.
>>
>> Could I create patterns, or enable optimizations that would cause the
>> compiler to generate
>>
>> temp1 = a1 | a2;
>> temp2 = a3 | a4;
>> temp3 = temp1 | temp2;
>>
>> Thereby allowing the scheduler to compute temp1 and temp2 in parallel.
> You can tune it with --param tree-reassoc-width=N, not sure if that
> was implemented for 4.7 already.
>
> Richard.
>
Works fine for this test case
Thanks
More information about the Gcc
mailing list