<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 - [FuncSpec] Fully consider the user of the function."
   href="https://bugs.llvm.org/show_bug.cgi?id=52175">52175</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[FuncSpec] Fully consider the user of the function.
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

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

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

        <tr>
          <th>OS</th>
          <td>Linux
          </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>Backend: AArch64
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>polaris_jiang@163.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>arnaud.degrandmaison@arm.com, llvm-bugs@lists.llvm.org, smithp352@googlemail.com, Ties.Stuij@arm.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>In the test case, there are functions p(), o(), m() and main().
```
p() {
  o(0);
  o(1);
}

o() {
  p();
  m(j);
}

main() {
  m(0);
}
```

Before the function specialization starts, all functions are marked as
executable.
Executable: main(), m(), p(), o().

After the first iteration, o.1(), o.2() are generated, and in
specializeFunction(), o() is marked as unreachable.
But at this time, o.1() and o.2() are not marked as executable.
Executable: main(), m(), p()

In the second iteration, the function m() is specialized.  At this time, it is
considered that m() is only called by main(), because among all the functions
that call m(), only main() is considered executable. But actually m() is also
called by functions o.1() and o.2().
Therefore, for m(), it is wrong to think that isPartial is `false`, but in fact
it should be `true`.

After all iterations in the function specialization are completed, o.1() and
o.2() are marked as executable.</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>