Refine exprOkForSpeculation
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 13 Jan 2017 14:20:15 +0000 (14:20 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 16 Jan 2017 11:57:14 +0000 (11:57 +0000)
commit5a9a1738023aeb742e537fb4a59c4aa8fecc1f8a
treef99c719439251b2691d44e4438b94390eb10a2fc
parentbe79289037138d4f6447c21f65e80adf2acd65f7
Refine exprOkForSpeculation

This patch implements two related changes, both inspired by
the discussion on Trac #13027, comment:23:

* exprOkForSpeculation (op# a1 .. an), where op# is a primop,
  now skips over arguments ai of lifted type.  See the comments
  at Note [Primops with lifted arguments] in CoreUtils.

  There is no need to treat dataToTag# specially any more.

* dataToTag# is now treated as a can-fail primop.  See
  Note [dataToTag#] in primops.txt.pp

I don't expect this to have a visible effect on anything, but
it's much more solid than before.
compiler/coreSyn/CoreUtils.hs
compiler/prelude/primops.txt.pp