<div dir="ltr"><div><div>Hi Andrew, Quentin, Owen & Tom,<br><br></div><div>I'm not sure who is the owner of the code but I worked with Quentin and Andrew on the solution. I would like the fix to be included in 3.6.1.<br><br></div><div>- Paweł<br></div><div><br>r233351:<br><br></div>Bug: <a href="https://llvm.org/bugs/show_bug.cgi?id=22304">https://llvm.org/bugs/show_bug.cgi?id=22304</a><br></div>Review: <a href="http://reviews.llvm.org/D8556">http://reviews.llvm.org/D8556</a><br><div><div><br>Author: atrick<br>
Date: Thu Mar 26 22:44:13 2015<br>
New Revision: 233351<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=233351&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=233351&view=rev</a><br>
Log:<br>
Fix a bug in SelectionDAG scheduling backtracking code: PR22304.<br>
<br>
It can happen (by line CurSU->isPending = true; // This SU is not in<br>
AvailableQueue right now.) that a SUnit is mark as available but is<br>
not in the AvailableQueue. For SUnit being selected for scheduling<br>
both conditions must be met.<br>
<br>
This patch mainly defensively protects from invalid removing a node<br>
from a queue. Sometimes nodes are marked isAvailable but are not in<br>
the queue because they have been defered due to some hazard.<br>
<br>
Patch by Pawel Bylica!<br>
<br>
Added:<br>
    llvm/trunk/test/CodeGen/Generic/scheduler-backtracking.ll<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp<br></div></div></div>