[GHC] #10844: CallStack should not be inlined
GHC
ghc-devs at haskell.org
Thu Oct 15 21:54:31 UTC 2015
#10844: CallStack should not be inlined
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner: gridaphobe
Type: task | Status: patch
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1259
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by gridaphobe):
Unfortunately the rules don't seem to fire in the right order. The key
step appears to be when we get to the following state.
{{{
boo = build (\ @ b_aog -> unpackFoldrCString# "foo"#)
lvl_spB = \ @ b_aot c_aou n_aov -> foldr c_aou n_aov boo
foo = \ x_anI -> augment lvl_spB x_anI
}}}
At this point, I would want `fold/build` to fire on `lvl_spB`, giving us
{{{
lvl_spB = \ @ b_aot c_aou n_aov -> unpackFoldrCString# "foo"# c_aou n_aov
}}}
followed by `unpack-append` on `foo`, which would finally give us
{{{
foo = \ x_anI -> unpackAppendCString# "foo"# x_anI
}}}
But instead `foldr/app` fires, collapsing `foo` back into a use of `++`.
If I add a special rule for `++` on strings
{{{
{-# RULES
"++-string" forall xs ys. unpackCString# xs ++ ys = unpackAppendCString#
xs ys
#-}
}}}
I can coax GHC into generating the same Core as on master, but this is not
very satisfying. It seems like we already have all of the necessary rules
available.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10844#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list