[llvm-commits] [PATCH] Fix PR15031

Bill Schmidt wschmidt at linux.vnet.ibm.com
Thu Jan 24 09:59:28 PST 2013


This patch addresses bug 15031.

The common code in the post-RA scheduler to break anti-dependencies on the
critical path contained a flaw.  In the reported case, an anti-dependency
between the overlapping registers %X4 and %R4 exists:

	%X29<def> = OR8 %X4, %X4
	%R4<def>, %X3<def,dead,tied3> = LBZU 1, %X3<kill,tied1>

The unpatched code breaks the dependency by replacing %R4 and its uses
with %R3, the first register on the available list.  However, %R3 and
%X3 overlap, so this creates two overlapping definitions on the same
instruction.

The fix is straightforward, preventing selection of a register that
overlaps any other defined register on the same instruction.

The test case is reduced from the bug report, and verifies that we no
longer produce "lbzu 3, 1(3)" when breaking this anti-dependency.

Is this OK to commit?

Thanks!

-- 
-- Bill

Bill Schmidt, Ph.D.
IBM Advance Toolchain for PowerLinux
IBM Linux Technology Center
wschmidt at us.ibm.com (507) 319-6873


-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr15031-2013-01-24.patch
Type: text/x-patch
Size: 38877 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130124/317d789e/attachment.bin>


More information about the llvm-commits mailing list