<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - LiveDebugValues won`t extend range across empty MachineBasicBlock"
   href="https://bugs.llvm.org/show_bug.cgi?id=34717">34717</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>LiveDebugValues won`t extend range across empty MachineBasicBlock
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>new-bugs
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>new bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>pichet2000@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>For all kind of reasons, llvm will sometimes generate empty MachineBasicBlocks.

These empty MBBs will act as a barrier during LiveDebugValues::join(...).

The reason is:

    VarLocSet KillSet;
    for (auto ID : InLocsT)
      if (!VarLocIDs[ID].dominates(MBB))
        KillSet.set(ID);
    InLocsT.intersectWithComplement(KillSet);

VarLocIDs[ID].dominates(MBB) will always return false for an empty MBB.

I analyzed many cases of missing debug info (optimized mode) where it would
make sense to propagate DebugValue on empty MBB because it eventually lead to
more propagation on the successor of the empty MBB.


I don't know if its the best solution but this give better debuginfo:

  if (!MBB.empty()) {
    VarLocSet KillSet;
    for (auto ID : InLocsT)
      if (!VarLocIDs[ID].dominates(MBB))
        KillSet.set(ID);
    InLocsT.intersectWithComplement(KillSet);
  }</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>