<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61950>61950</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed simple devirtualization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:codegen,
missed-optimization,
llvm
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidbolvansky
</td>
</tr>
</table>
<pre>
```
struct base_task
{
void run() {
return run_impl();
}
virtual void run_impl() = 0;
};
struct compute_task : public base_task
{
void run_impl() {
__builtin_printf("work");
}
};
void wrapper(compute_task &t) {
t.run();
}
```
GCC is able to devirtualize it.
https://godbolt.org/z/dYMMxnn8T
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMUkGPozwM_TXmEg0KCaFw4NBpxXfq7bvsqUogpdkGghKns9NfvwKqTrujlbaqgk2e_fweliGYftS6BvEOYp_IiGfn605eTaecvcoxXD4T5brPGgp6_9M90G1AH1skSgZ9RBku61vYvK8BIYRcnemIjyOwElhFXu7mn9cY_TgjjmaY7AoD_oSCzf6eXI3HKO2j51MFAb4n9FE31zzi51FbN0wR12kJ8C2ZorKm_ScJL3QPwPGoorFoxuPkzYinBcA-nL8AY3_V8n3A9Vy4PrycJu2Bla_jsgK_eYjpw9wX9Wvw-rnW87_djphApLKaoCOdvttqbpoYTJ-hZ8QpAN8Ca4A1vZvXAVPne2DNDVjT_Tgcfo1j-X_S1byreCUTXWdFSTdU8KJKzjWnut3IXKgi2-RZWZ1OshKF4EqKUtFKJ6ZmlHGaU5HlvKBV2lJRFVVWFoLyUp4o5FQP0tjU2uswcycmhKjrIqsETaxU2oZlcxlrrRx74NvWdbrX4-L_DhgbTAi6e3MTmsHcJBr3dTd3nROxT3w9J28q9gFyak3A8EWKBq2uD0snEuZN0M_WLU2T6G39h2cGz1GlrRuANSvX8nibvPupWwTWLHICsGZR9DsAAP__ZsQKJQ">