[llvm-bugs] [Bug 27372] New: -fno-associative-math is not honored
via llvm-bugs
llvm-bugs at lists.llvm.org
Fri Apr 15 10:58:59 PDT 2016
https://llvm.org/bugs/show_bug.cgi?id=27372
Bug ID: 27372
Summary: -fno-associative-math is not honored
Product: new-bugs
Version: unspecified
Hardware: PC
OS: Windows NT
Status: NEW
Severity: normal
Priority: P
Component: new bugs
Assignee: unassignedbugs at nondot.org
Reporter: warren_ristow at playstation.sony.com
CC: llvm-bugs at lists.llvm.org
Classification: Unclassified
Re-association enabled via '-ffast-math' is not suppressed with
'-fno-associative-math'. Consider the following test-case:
// -O1 -ffast-math -fno-associative-math
float foo(float a, float x)
{
return ((a + x) - x);
}
Compiling at -O1, results in an Add and a Subtract, as expected. Enabling
fast-math, allows re-association to happen, and the arithmetic ops are folded
away, also as expected. But enabling fast-math while explicitly disabling
associative-math doesn't suppress the re-association (the arithmetic ops are
still folded away). Specifically:
$ clang++ --version
clang version 3.9.0 (trunk 266451)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/warren/llvm/bin
$ clang++ -c -O1 test.cpp
$ objdump -d test.o
test.o: file format elf64-x86-64
...
0000000000000000 <_Z3fooff>:
0: f3 0f 58 c1 addss %xmm1,%xmm0
4: f3 0f 5c c1 subss %xmm1,%xmm0
8: c3 retq
$ clang++ -c -O1 -ffast-math test.cpp
$ objdump -d test.o
...
0000000000000000 <_Z3fooff>:
0: c3 retq
$ clang++ -c -O1 -ffast-math -fno-associative-math test.cpp
$ objdump -d test.o
...
0000000000000000 <_Z3fooff>:
0: c3 retq
$
GCC does honor the '-fno-associative-math' switch (tested with GCC 4.9.2):
$ g++ -c -O1 test.cpp
$ objdump -d test.o
test.o: file format elf64-x86-64
...
0000000000000000 <_Z3fooff>:
0: f3 0f 58 c1 addss %xmm1,%xmm0
4: f3 0f 5c c1 subss %xmm1,%xmm0
8: c3 retq
$ g++ -c -O1 -ffast-math test.cpp
$ objdump -d test.o
...
0000000000000000 <_Z3fooff>:
0: f3 c3 repz retq
$ g++ -c -O1 -ffast-math -fno-associative-math test.cpp
$ objdump -d test.o
...
0000000000000000 <_Z3fooff>:
0: f3 0f 58 c1 addss %xmm1,%xmm0
4: f3 0f 5c c1 subss %xmm1,%xmm0
8: c3 retq
$
This appears to be target-independent behavior (noticed on X86, but tried with
a few other architectures, and observed the same issue).
Also, tested with a handful of Clang versions, and it's a longstanding
behavior.
--
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/20160415/56e6d624/attachment.html>
More information about the llvm-bugs
mailing list