[GHC] #9125: int-to-float conversion broken on ARM
GHC
ghc-devs at haskell.org
Mon Aug 11 03:52:16 UTC 2014
#9125: int-to-float conversion broken on ARM
-------------------------------------+-------------------------------------
Reporter: Ansible | Owner:
Type: bug | Status: infoneeded
Priority: highest | Milestone: 7.8.4
Component: Compiler | Version: 7.8.3
(CodeGen) | Keywords:
Resolution: | Architecture: arm
Operating System: | Difficulty: Unknown
Unknown/Multiple | Blocked By:
Type of failure: Incorrect | Related Tickets:
result at runtime |
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
Actually I prefer this one, since I can read x86 assembly better than ARM
assembly :)
The TBAA patch had the expected effect on the .ll file. But LLVM 3.0 still
decided to carefully save the input value across the function call so that
it can erroneously return it as the result (esi).
{{{
00000748 83ec1c sub esp, 0x1c
0000074b 8d45fc lea eax, [ebp-4]
0000074e 3bab1c030000 cmp ebp, [ebx+0x31c]
00000754 7235 jc 0x78b
00000756 f30f104500 movss xmm0, [ebp]
0000075b f30f11442418 movss [esp+0x18], xmm0
00000761 f30f11442408 movss [esp+0x8], xmm0
00000767 89442404 mov [esp+0x4], eax
0000076b 892c24 mov [esp], ebp
0000076e e815faffff call __decodeFloat_Int
00000773 8b45fc mov eax, [ebp-4]
00000776 894500 mov [ebp], eax
00000779 8b4504 mov eax, [ebp+0x4]
0000077c f30f10442418 movss xmm0, [esp+0x18]
00000782 660f7ec6 movd esi, xmm0
00000786 83c41c add esp, 0x1c
00000789 ffe0 jmp eax
}}}
I think this is just a bug in LLVM 3.0, particularly as you say LLVM 3.4
has the expected behavior.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9125#comment:31>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list