<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 - Redundant clears (vpxor) generated for single __m128i initialize-with-zero"
href="https://bugs.llvm.org/show_bug.cgi?id=39381">39381</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Redundant clears (vpxor) generated for single __m128i initialize-with-zero
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>7.0
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>LLVM Codegen
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>casey@mollyrocket.com
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>When clearing an __m128i to zero using = {} syntax, sometimes LLVM generates a
second clear for the same (already cleared) register. Here xmm1 is cleared
with vpxor, and then a few instructions later, cleared again, even though it
has not been touched in the interim:
<a href="https://godbolt.org/z/TkTlza">https://godbolt.org/z/TkTlza</a>
This appears to happen in this construction even when using _mm_setzero_si128:
<a href="https://godbolt.org/z/eqhJe2">https://godbolt.org/z/eqhJe2</a>
And the spurious clear also seems impervious to reorganization, so if you move
the lines around, create a zero value and assign using it, declare and then
set, etc., they all produce basically the same code with the extra clear.
- Casey</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>