[llvm-commits] [llvm][PATCH][Review Requested] Maintain live-ins for anti-dependency checking

Gurd, Preston preston.gurd at intel.com
Mon Apr 16 10:38:00 PDT 2012


If possible, it would be appreciated if this patch could be reviewed in time for inclusion in the llvm 3.1 release. We would have proposed this patch sooner, were it not for the fact that we have only just discovered the problem.

This patch fixes a problem which arose when using the Post-RA scheduler on X86 Atom. Some of our tests failed because the tail merging part of the BranchFolding pass was creating new basic blocks which did not contain live-in information. When the anti-dependency code in the Post-RA scheduler ran, it would sometimes rename the register containing the function return value because the fact that the return value was live-in to the subsequent block had been lost. To fix this, it is necessary to run the RegisterScavenging code in the BranchFolding pass.

This patch adds a new function to the TargetRegisterClass to control whether or not live-ins should be preserved during branch folding. This is necessary in order for the anti-dependency optimizations done during the PostRASchedulerList pass to work properly when doing Post-RA scheduling for the X86 in general and for the Intel Atom in particular.

The patch adds and invokes the new function  maintainLiveInsDuringBranchFolding() instead of using the existing requiresRegisterScavenging() function because requiresRegisterScavenging() caused a lot of errors related to using unallocatable registers in the prolog/epilog code. When we fixed the unallocated registers problem, then the test Codegen/X86/x86-64.asm was failing with an error message relating to an unallocated register on the test's ret instruction.

Patch by Andy Zhang!

--
Preston Gurd <preston.gurd at intel.com>
  Intel Waterloo
  SSG/DPD/ECDL/DMP

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120416/e87ea750/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: live-in.diff
Type: application/octet-stream
Size: 2433 bytes
Desc: live-in.diff
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120416/e87ea750/attachment.obj>


More information about the llvm-commits mailing list