Floating point with -O and -fasm is broken
I have some simple floating-point code that fails badly when you compile it with -O and -fasm on x86_64. Here is the program:
log2 x = ceiling log_x
where log_x | Double |
---|---|
log_x = logBase 2 (fromIntegral (max 1 x)) |
vals = [1, 2, 17, 259, 1000, 10000,
2^30 + 9000, 2^31 - 1, 2^31, 2^31 + 1,
2^32 - 1, 2^32, 2^32 + 1]
main :: IO () main = putStrLn (show (map log2 vals))
The result should be: [0,1,5,9,10,14,31,31,32,32,32,32,33]
With -O and -fasm on x86_64 the last five values are corrupted (four very large numbers I'm not going to paste here, followed by 0).
Trac metadata
Trac field | Value |
---|---|
Version | 6.4.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler (NCG) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | ravi@bluespec.com |
Operating system | |
Architecture |