<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 - suboptimal handling of very simple vararg use"
href="https://bugs.llvm.org/show_bug.cgi?id=49262">49262</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>suboptimal handling of very simple vararg use
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</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>C
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>linux@rasmusvillemoes.dk
</td>
</tr>
<tr>
<th>CC</th>
<td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>godbolt <a href="https://godbolt.org/z/b35xr5">https://godbolt.org/z/b35xr5</a>
gcc does seem to realize that it's irrelevant whether any floating point
arguments were passed as they're not accessed anyway. In theory, f() could be
compiled as simply as g(), but gcc doesn't manage to get rid of the minimal
va_list setup.
However, clang emits a lot more unnecessary instructions, only some of which
are skipped over (i.e. dead) at runtime. Apart from the float handling, there's
for example
movl $8, %ecx
cmpq $40, %rcx
with no way to reach that cmpq other than through the preceding load-immediate.
Stashing of registers beyond %rdx are dead stores.</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>