[llvm-bugs] [Bug 26447] New: Possible (probable?) bug in computing LiveRange overlap
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Feb 3 01:21:11 PST 2016
https://llvm.org/bugs/show_bug.cgi?id=26447
Bug ID: 26447
Summary: Possible (probable?) bug in computing LiveRange
overlap
Product: libraries
Version: trunk
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Register Allocator
Assignee: unassignedbugs at nondot.org
Reporter: stephen.montgomery333 at gmail.com
CC: llvm-bugs at lists.llvm.org, qcolombet at apple.com
Classification: Unclassified
Created attachment 15807
--> https://llvm.org/bugs/attachment.cgi?id=15807&action=edit
Possible fix for LiveRange::overlaps bug with CoalescerPair
I submitted this recently to the llvmdev mailing list but didn't get any
feedback so I'm taking the plunge and reporting it as a bug.
My backend for the Freescale S12X micro controller family failed with a "ran
out of registers during register allocation" message recently. I traced the
issue down to the code that checks whether two LiveRanges have overlapping
segments that are not coalescable.
I’ve got two ranges [608r,656r:0)[656r,672r:1) and [0B,32r)[672r,688r). I don’t
believe that these overlap though maybe I've misunderstood how LiveRanges work.
In any event, if I iterate over one LiveRange's segments and use
LiveRange::overlaps(SlotIndex Start, SlotIndex End) I don't get any overlap.
However, the version of LiveRange::overlaps that takes a CoalescerPair and
checks for coalescable segments thinks that these ranges _do_ overlap.
I think the problem is in the loop that advances the iterator that ends
earliest. I think it should advance until J->end > I->start, not >=. That way,
I think it would have the same effect as LiveRange::find() which is what I
believe the code is aiming to do, just more efficiently than find().
I've checked against the trunk (my work is based off version 3.7) and there
haven't been any changes in this area so I believe the bug is still present.
I’ve attached a patch which seems to fix things for me. I don't see any
regressions for the supported backends when using 'check-all' having applied
this fix. It may be I'm just hitting the bug because the S12X has very few
registers and many restrictions on which registers can be used in certain
instructions.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160203/8ae53616/attachment.html>
More information about the llvm-bugs
mailing list