
#14152: Float exit paths out of recursive functions -------------------------------------+------------------------------------- Reporter: nomeata | Owner: (none) Type: task | Status: patch Priority: normal | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: JoinPoints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #14137 #10918 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by nomeata):
All join-point should have `OneOcc`
Not true, it seems, as witnessed by `testsuite/tests/codeGen/should_compile/jmp_tbl.hs` (already with `-O`, so without exitification): {{{ ./inplace/bin/ghc-stage2 -dcore-lint testsuite/**/jmp_tbl.hs -O -dverbose- core2core -ddump-simpl-iterations -fforce-recomp … join { $j_s3v8 :: (# GHC.Prim.State# GHC.Prim.RealWorld, (PipeState, b_a2YY) #) [LclId[JoinId(0)]] $j_s3v8 = case lvl_s3te of wild_00 { } } in join { $j_s3ve :: (# GHC.Prim.State# GHC.Prim.RealWorld, (PipeState, b_a2YY) #) [LclId[JoinId(0)]] $j_s3ve = join { $j_s3vc :: (# GHC.Prim.State# GHC.Prim.RealWorld, (PipeState, b_a2YY) #) [LclId[JoinId(0)]] $j_s3vc = join { $j_s3va :: (# GHC.Prim.State# GHC.Prim.RealWorld, (PipeState, b_a2YY) #) [LclId[JoinId(0)]] $j_s3va = case phase_X1s7 of { __DEFAULT -> jump $j_s3v7 } } in case phase_X1s7 of { __DEFAULT -> jump $j_s3va; HCc -> jump $j_s3v8 } } in case phase_X1s7 of { __DEFAULT -> jump $j_s3vc; Ccpp -> jump $j_s3v8 } } in case phase_X1s7 of { __DEFAULT -> jump $j_s3ve; Cc -> jump $j_s3v8 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14152#comment:40 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler