http://llvm.org/bugs/show_bug.cgi?id=13490
Bug #: 13490
Summary: Change in register allocation changes result of
floating point compare
Product: libraries
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Backend: X86
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected]
Classification: Unclassified
Created attachment 8969
--> http://llvm.org/bugs/attachment.cgi?id=8969
testcase
The attached testcase prints "equal" with -O0 and "different" with -O0
-optimize-regalloc (or higher optimization levels).
I could not find anything on the ABI about how float return values should be
handled. Should the callee round them? Should the caller round them? Should
this only be done with -ffloat-store?
The testcase uses two assembly functions, but original is c++, using assembly
just makes it a lot easier to see what is going on:
* The function test1 returns a computed value directly
* The function test2 uses a fstps/flds pair to round it
* When compiling main with -O0 the value goes to memory, so the comparison is
equal.
* When compiling main with -O0 -optimize-regalloc the value stays in the fp
stack and the comparison is false.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs