[llvm-bugs] [Bug 38333] New: C++ "f < 0 ? -f : f" generates much worse code than fabs
via llvm-bugs
llvm-bugs at lists.llvm.org
Fri Jul 27 00:31:31 PDT 2018
https://bugs.llvm.org/show_bug.cgi?id=38333
Bug ID: 38333
Summary: C++ "f < 0 ? -f : f" generates much worse code than
fabs
Product: new-bugs
Version: 6.0
Hardware: PC
OS: Windows NT
Status: NEW
Severity: enhancement
Priority: P
Component: new bugs
Assignee: unassignedbugs at nondot.org
Reporter: bratell at opera.com
CC: llvm-bugs at lists.llvm.org
Example at:
https://godbolt.org/g/tcNgGG
While optimizing code in the Chromium project, we noticed that fabs generates
much better machine code than "f < 0 ? -f : f". There might be some subtleties
around it, but I'd expect them to generate code that is very similar.
fabs and manually clearing the sign bit are both just an "and" instruction.
"f < 0 ? -f : f" results in 10 machine code instructions, including 2 "and" but
also 4 "move", 1 "cmp", 2 "xor" and 1 "or".
The emitted code is identical in -O1, -O2 and -O3. This was tested in clang
6.0. gcc seems better at this construct, but worse at fabs.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180727/57b1ba1d/attachment.html>
More information about the llvm-bugs
mailing list