[LLVMbugs] [Bug 1306] NEW: LiveVariables improperly handles killing aliased registers
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Wed Apr 4 12:42:46 PDT 2007
http://llvm.org/bugs/show_bug.cgi?id=1306
Summary: LiveVariables improperly handles killing aliased
registers
Product: new-bugs
Version: unspecified
Platform: All
OS/Version: All
Status: NEW
Severity: major
Priority: P2
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: christopher.lamb at gmail.com
CC: christopher.lamb at gmail.com
Here is the beginning of the BB dump.
entry (0x8503c80, LLVM BB @0x8501af0, ID#0):
Live Ins: %R0 %R1
%reg1024 = ORI %R0<kill>, 0
%reg1025 = ORI %R1<kill>, 0
V4R0 is getting killed because handleLiveInRegister() is called on
all results of getAliasSet() for each of the liveins (this is in
LiveIntervals::computeIntervals() ).
handleRegisterDef() does a similar thing where calls
handlePhysicalRegisterDef() on all members of getAliasSet() returned
for the def, which also triggers this problem.
---
This is a pretty serious bug. LiveVariables::KillsRegister should not kill aliases that are "larger". The
correct way to fix this is to explicitly list registers that are defined, used, and killed. So your example
should look like:
entry (0x8503c80, LLVM BB @0x8501af0, ID#0):
Live Ins: %R0 %R1
%reg1024 = ORI %R0<kill>, 0, %V4R0<imp-use>
%reg1025 = ORI %R1<kill>, 0, %V4R0<imp-use,kill>
KillsRegister should check for exact match rather than regsOverlap. There are probably other similar
bugs in LiveVariables.
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list