In Exitify, zap idInfo of abstracted variables (fixes #15005)
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 10 Apr 2018 13:36:08 +0000 (09:36 -0400)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 10 Apr 2018 18:19:45 +0000 (14:19 -0400)
as helpfully outlined by SPJ.

This commit copies a small bit code from `SetLevels` which could
reasonably be put in `Id` as `zapAllIdinfo`; I did not do this to make
merging this commmit into `ghc-8.4` easier.

If this commit gets merged, then presumably after commit
3f59d3802170f495702674b4f8e4e80247803654 (test case) and
ae0cff0a1834d8b041b06d0e1ab6ce969aac44c8 (other fixes to Exitify.hs).

Differential Revision: https://phabricator.haskell.org/D4582

compiler/simplCore/Exitify.hs

index 570186e..6e7d063 100644 (file)
@@ -175,7 +175,14 @@ exitify in_scope pairs =
         is_interesting = anyVarSet isLocalId (fvs `minusVarSet` mkVarSet captured)
 
         -- The possible arguments of this exit join point
-        abs_vars = sortQuantVars $ filter (`elemVarSet` fvs) captured
+        abs_vars =
+            map zap $
+            sortQuantVars $
+            filter (`elemVarSet` fvs) captured
+
+        -- cf. SetLevels.abstractVars
+        zap v | isId v = setIdInfo v vanillaIdInfo
+              | otherwise = v
 
         -- We cannot abstract over join points
         captures_join_points = any isJoinId abs_vars