Search code examples
haskellghccabalidris

What does *** CPSZ: mean in Cabal build log when building Idris?


I'm currently building Idris via cabal install idris. In response to the output:

Redirecting build log to {handle:/home/me/.cabal/logs/idris-0.9.14.3.log}

I decided to track the build with tail -f /home/me/.cabal/logs/idris-0.9.14.3.log.

While much of the output is meaningful, along the lines of:

Simplifier:
Result size of Simplifier iteration=1
  = {terms: 77,520, types: 104,583, coercions: 37,209}
Result size of Simplifier iteration=2
  = {terms: 59,582, types: 78,325, coercions: 18,371}

There are many lines that only contain

*** CPSZ:

So I was wondering, purely out of curiosity, what "*** CPSZ:" represents.


Solution

  • Looks like these duplicated lines were caused by a bug in GHC. As to what CPSZ stands for, it appears to mean "continuation passing style zipper". The CPSZ pass (which was since either removed or renamed) performed CPS-conversion on Cmm code. Cmm is one of GHC's internal representation languages. The "zipper" part comes from Cmm control flow graph being represented as a zipper internally.