<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 - Failure to elide useless mov in sign function"
href="https://bugs.llvm.org/show_bug.cgi?id=45759">45759</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Failure to elide useless mov in sign 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: X86
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>gabravier@gmail.com
</td>
</tr>
<tr>
<th>CC</th>
<td>craig.topper@gmail.com, llvm-bugs@lists.llvm.org, llvm-dev@redking.me.uk, spatel+llvm@rotateright.com
</td>
</tr></table>
<p>
<div>
<pre>int sign(int x)
{
return -((unsigned)x >> 31) | ((unsigned)-x >> 31);
}
With -O3, GCC outputs this :
sign(int):
mov eax, edi
sar edi, 31
neg eax
shr eax, 31
or eax, edi
ret
LLVM outputs this :
sign(int):
mov eax, edi
mov ecx, edi
sar ecx, 31
neg eax
shr eax, 31
or eax, ecx
ret
Most likely this is specific to the X86 backend and its register allocator, so
I marked it as such</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>