[GHC] #10124: Simple case analyses generate too many branches
GHC
ghc-devs at haskell.org
Tue Mar 31 08:22:31 UTC 2015
#10124: Simple case analyses generate too many branches
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.4
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Runtime | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: #6135, | Differential Revisions:
#9661,#10137 |
-------------------------------------+-------------------------------------
Comment (by nomeata):
Hmm, given the example from comment:10, we currently generate this code:
{{{
block_c3S3_info:
_c3S3:
movq 7(%rbx),%rax
cmpq $10,%rax
jb _u3Si
_u3Sj:
cmpq $11,%rax
jb _c3Sh
_u3Sk:
cmpq $32,%rax
jne _c3Se
_c3Sh:
movl $GHC.Types.True_closure+2,%ebx
addq $8,%rbp
jmp *(%rbp)
_c3S7:
movl $myIsSpace_rkB_closure,%ebx
jmp *-8(%r13)
_c3Se:
movl $GHC.Types.False_closure+1,%ebx
addq $8,%rbp
jmp *(%rbp)
_u3Si:
cmpq $9,%rax
jb _c3Se
jmp _c3Sh
}}}
while my code now generates
{{{
_c3S3:
movq 7(%rbx),%rax
cmpq $32,%rax
setne %bl
movzbl %bl,%ebx
cmpq $10,%rax
setne %cl
movzbl %cl,%ecx
andq %rbx,%rcx
cmpq $9,%rax
setne %al
movzbl %al,%eax
andq %rcx,%rax
testq %rax,%rax
jne _c3Se
_c3Sh:
movl $GHC.Types.True_closure+2,%ebx
addq $8,%rbp
jmp *(%rbp)
_c3S7:
movl $myIsSpace_rkB_closure,%ebx
jmp *-8(%r13)
_c3Se:
movl $GHC.Types.False_closure+1,%ebx
addq $8,%rbp
jmp *(%rbp)
.size myIsSpace_rkB_info, .-myIsSpace_rkB_info
}}}
But not even this simple microbenchmark
{{{
main :: IO ()
main = x `seq` return ()
where x = length $ filter myIsSpace $ concatMap (replicate 100000000) $
['\001'..'z']
}}}
shows a change in performance. bgamari, is that expected? Is it just that
the assembly (generated from
{{{
if ((_s3Rr::I64 != 9) & (_s3Rr::I64 != 10) & (_s3Rr::I64 != 32) != 0) goto
c3Se; else goto c3Sh;
}}}
is too bad, or is this not a test case where this will help a lot?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10124#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list