diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2018-12-07 12:56:08 +0000 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2018-12-07 14:58:51 +0000 |
commit | f334d20e00e3f4bd217e49216b7e9d9c8779db10 (patch) | |
tree | b2f8d059c0d1d6a7e294716a1ca31d788f922a63 /compiler/profiling | |
parent | 5b7ca03995c1d5fbd29ba0e327bb2a1f344c9419 (diff) | |
download | haskell-f334d20e00e3f4bd217e49216b7e9d9c8779db10.tar.gz |
Careful tweaking to exprOkForSpeculation
This patch does several things:
* Make exprOkForSpeculation ignore evaluatedness of variables
See the Note [exprOkForSpeculation and evaluated variables]
This means that the binder-swap transformation no longer
invaliates the let/app invariant.
* Make exprOkForSpeculation return False for
DataToTagOp and SeqOp.
See Note [exprOkForSpeculation and SeqOp/DataToTagOp]
* Remove the 'can_fail' property from dataToTag#; it was
always a hack (described in the old Note [dataToTag#] in
primops.txt.pp), and now its not necessary because of the
fixes above.
* Make SetLevels use exprIsHNF, /not/ exprOkForSpeculation,
when floating single-alternative cases. See SetLevels
Note [Floating single-alternative cases]
* Fix a buglet in FloatIn; probably never bites in practice
See Note [Dead bindings]
Collectively, these changes finally fix Trac #15696.
Diffstat (limited to 'compiler/profiling')
0 files changed, 0 insertions, 0 deletions