Fix PR2536: a nasty spiller bug. If a two-address instruction uses a register but...
authorEvan Cheng <evan.cheng@apple.com>
Sat, 12 Jul 2008 01:56:02 +0000 (01:56 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 12 Jul 2008 01:56:02 +0000 (01:56 +0000)
commit79a796c2b17c7ebd4dd489b5de1078fc2148adba
tree6602986c1fb0a23c077bc098dbf831e5dc555aa5
parentb5eec33dcde63bee6048d54bee2a376737028e5c
Fix PR2536: a nasty spiller bug. If a two-address instruction uses a register but the use portion of its live range is not part of its liveinterval, it must be defined by an implicit_def. In that case, do not spill the use. e.g.
8   %reg1024<def> = IMPLICIT_DEF
12  %reg1024<def> = INSERT_SUBREG %reg1024<kill>, %reg1025, 2

The live range [12, 14) are not part of the r1024 live interval since it's defined by an implicit def. It will not conflicts with live interval of r1025. Now suppose both registers are spilled, you can easily see a situation where both registers are reloaded before the INSERT_SUBREG and both target registers that would overlap.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53503 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/LiveIntervalAnalysis.cpp
test/CodeGen/X86/2008-07-11-SpillerBug.ll [new file with mode: 0644]