Floating lazy primops
David Feuer
david at well-typed.com
Wed Jan 18 19:45:04 UTC 2017
I opened up https://phabricator.haskell.org/D2987 to mark
reallyUnsafePtrEquality# can_fail, but in the process I realized a couple
things.
1. Part of https://phabricator.haskell.org/rGHC5a9a1738023a may actually not
have been such a hot idea after all (although it certainly sounded good at the
time). Are there actually any primops with lifted arguments where we *want*
speculation? Perhaps the most important primop to consider is seq#, which is
(mysteriously?) marked neither can_fail nor has_side_effects, but another to
look at is unpackClosure#, which seems likely to give different results before
and after forcing. Most other primops with lifted arguments are marked
has_side_effects, and therefore won't be floated out anyway.
2. If dataToTag# is marked can_fail (an aspect of https://
phabricator.haskell.org/rGHC5a9a1738023a), is it still possible for it to end
up being applied to an unevaluated argument? If not, perhaps the CorePrep
specials can be removed altogether.
David Feuer
More information about the ghc-devs
mailing list