|
From: Julian S. <js...@ac...> - 2008-03-25 15:40:47
|
> > Or are you doing something else apart from V-V coalescing? > > I'm also killing R-V dead stores. (happens when some instruction updates > e.g. %eax, then %eax is moved to a virtual reg, but it's never used). Do you have an example of that, to look at? > 20 movl 0x2A8(%ebp),%edx ; load %vr30 from memory > 21 andl $0xFFFF,%edx > 22 movl 0x2A8(%ebp),%edx ; <-- %vr30 is in %edx, not in memory > 23 movl %edi,%eax > 24 call[2] 0x38006C30 > > So the problem is that the register allocator gets confused somehow and > loads %vr30 twice, destroying its value (i.e. the line 22 is bogus and > could be removed altogether). That's very strange. After the reload on line 20, it should indeed have noted that %vr30 is now in %edx, so then there would be no need to incorrectly reload it again at line 22. I have no idea why. J |