This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Using associativity for optimization
- From: shmeel gutl <shmeelgutl at shmuelhome dot mine dot nu>
- To: gcc at gcc dot gnu dot org
- Date: Tue, 02 Dec 2014 01:11:58 +0200
- Subject: Using associativity for optimization
- Authentication-results: sourceware.org; auth=none
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.