On Thu, Mar 19, 2015 at 8:44 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Mar 18, 2015 at 08:00:33PM +0100, Uros Bizjak wrote: >> 2015-03-18 Uros Bizjak <ubiz...@gmail.com> >> >> PR rtl-optimization/60851 >> * recog.c (constrain_operands): Accept a pseudo register before reload >> for LRA enabled targets.
> As the two adjacent conditions are mostly the same, perhaps it might be > better written as > || ((/* Before reload, accept a pseudo, since > LRA can turn it into a mem. > (targetm.lra_p () && strict < 0) > /* During reload, accept a pseudo. */ > || reload_in_progress) > && REG_P (op) > && REGNO (op) >= FIRST_PSEUDO_REGISTER))) > > or put REG_P && REGNO checks first and only then test when. Yeah, I thought about this particular CSE a bit. But since these are two conceptually different conditions, and the formatting (and comments) just didn't fit into available space, I wrote it this way. IMO, it is more readable, better follows the intended logic, and avoids even more indents. Also, I am pretty sure that any decent compiler can CSE this part on its own. However, the condition can be slightly improved by rewriting it to: /* Before reload, accept a pseudo, since LRA can turn it into a mem. */ || (strict < 0 && targetm.lra_p () && REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER) so, we have cheaper tests in the front to shortcut more expensive tests later. > For 4.9 backport, please wait a few days after it goes into the trunk. Thanks! Uros.