[GHC] #8311: suboptimal code generated for even :: Int -> Bool by NCG (x86, x86_64)
GHC
ghc-devs at haskell.org
Mon Sep 16 23:37:19 CEST 2013
#8311: suboptimal code generated for even :: Int -> Bool by NCG (x86, x86_64)
------------------------------------+-------------------------------------
Reporter: rwbarton | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler (NCG) | Version: 7.7
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
This appears to be the x86 assembly for a specialization for `even :: Int
-> Bool` that's produced by a SPECIALISE pragma for `(^) :: Int -> Int ->
Int` in GHC.Real. The relevant bit is offsets `0x2c` through `0x3b`.
{{{
0000000c <base_GHCziReal_evenzuzdseven1_info>:
c: 8b 45 00 mov 0x0(%ebp),%eax
f: c7 45 00 2c 00 00 00 movl $0x2c,0x0(%ebp)
12: R_386_32 .text
16: 89 c6 mov %eax,%esi
18: f7 c6 03 00 00 00 test $0x3,%esi
1e: 75 0c jne 2c <c8gO_info>
20: ff 26 jmp *(%esi)
22: 66 90 xchg %ax,%ax
24: 00 00 add %al,(%eax)
26: 00 00 add %al,(%eax)
28: 20 00 and %al,(%eax)
...
0000002c <c8gO_info>:
2c: b8 02 00 00 00 mov $0x2,%eax
31: 89 c1 mov %eax,%ecx
33: 8b 46 03 mov 0x3(%esi),%eax
36: 99 cltd
37: f7 f9 idiv %ecx
39: 85 d2 test %edx,%edx
3b: 75 0b jne 48 <c8gO_info+0x1c>
3d: be 02 00 00 00 mov $0x2,%esi
3e: R_386_32 ghczmprim_GHCziTypes_True_closure
42: 83 c5 04 add $0x4,%ebp
45: ff 65 00 jmp *0x0(%ebp)
48: be 01 00 00 00 mov $0x1,%esi
49: R_386_32 ghczmprim_GHCziTypes_False_closure
4d: 83 c5 04 add $0x4,%ebp
50: ff 65 00 jmp *0x0(%ebp)
}}}
It would be much better to do a simple `testb $0x1,0x3(%esi)` in place of
the first six instructions of `c8gO_info`.
The NCG generates similar code on x86_64.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8311>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list