It works fine for my test case. Thanks Richard Biener <richard.guent...@gmail.com> wrote:
>On Tue, Dec 2, 2014 at 12:11 AM, shmeel gutl ><shmeelg...@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.