This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/37364] [4.4 Regression] IRA generates inefficient code due to missing regmove pass



------- Comment #11 from ubizjak at gmail dot com  2008-09-06 15:57 -------
(In reply to comment #9)
> I am concerned about those "*Yi"/"*Ym" and "r" pairs:

> IRA is much more sensitive to "*" constraint. We can ignore "*Ym"/"r" pairs.
> But should we remove * from "*Yi"/"r" pairs?

This approach was used to keep register allocator away from moving value from
integer ("r") register to non-integer register that can otherwise hold SImode
or DImode value. This happened when there was a shortage of "r" registers.

This delicate balance was achieved by using "?" and "*" for MMX and SSE
registers in various move patterns. I'm afraid that removing these decorations
could (in the worst case) lead to MMX instructions that lock out x87 registers.

IMO, running a simple regmove pass avoids this situation, since this pass will
just connect two already used registers together. Due to "*" decoration,
allocator won't allocate the register in the move pattern, no matter how hard
the register pressure is.

So, due to this, I vote to bring back regmove pass to fix this issue
independently of RA. Maybe this pass can even be enhanced a bit to fix PR
19389?


-- 

ubizjak at gmail dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2008-09-06 15:57:14
               date|                            |
            Summary|[4.4 Regression] IRA        |[4.4 Regression] IRA
                   |generates inefficient code  |generates inefficient code
                   |                            |due to missing regmove pass


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37364


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]