<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 optimize negative abs properly"
href="https://bugs.llvm.org/show_bug.cgi?id=52167">52167</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Failure to optimize negative abs properly
</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>Scalar Optimizations
</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>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>long long abs_1(long long i)
{
return (i > 0) ? -i : i;
}
This is "optimized" by LLVM to `return -llabs(i);`. Instead, it should be
possible to optimize it to avoid the negation by just changing the preceding
compare to the opposite one (as is already done in this example, and that LLVM
currently "optimizes" to have the current output). This is done by GCC, but not
by LLVM.
For comparison, LLVM outputs this on AMD64:
abs_1(long long):
mov rax, rdi
neg rax
cmovl rax, rdi
neg rax
ret
GCC outputs this:
abs_1(long long):
mov rax, rdi
neg rax
cmovns rax, rdi
ret</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>