This is the mail archive of the gcc@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]

Re: long long move bug?


Dale Johannesen <dalej@apple.com> writes:

> On Tuesday, June 5, 2001, at 07:06  PM, Dale Johannesen wrote:
>> On Monday, June 4, 2001, at 01:24  PM, Becky Gill wrote:
>>
>>> All,
>>>
>>> I ran into a problem this week when running code with lots of long long
>>> variables (which eventually start causing spills).  Whenever gcc
>>> spills a long
> 
>>> long, reloads it, and then copies it to another pair of registers,
>>> it seems to
> 
>>> be confused about which registers to use for the copy.
> 
> By rewriting this program as t1+=t1 (etc.) I got the gcc3 compiler to
> produce generally similar code, with addc/adde and unnecessary
> register copies.  However, I could not get it to allocate an
> overlapping register pair, so I think the bug is really fixed.
> 
> 
> (Of course, there's the matter of the unnecessary register copies.
> One approach to this problem, which seems to happen a lot with gcc, is
> to have a pass at the end that
> 
> goes through and removes unnecessary register copies.  This can be
> folded into the scheduler; the scheduler dependency graph probably
> already contains most of the right information.)
The new register allocator will also coalesce these register copies
anyway.

If you want to deal with the old allocator (IE have something now,
rather than wait a yera), you'd be better off, IMHO, making regmove
better, since it's the pass that is supposed to remove unnecessary
register copies.

> 

-- 
"I stayed up all night playing poker with Tarot cards.  I got a
full house and four people died.
"-Steven Wright


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