+Note [Passing the case binder to join points]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Suppose we have
+ case e of cb { C1 -> r1[cb]; C2 x y z -> r2[cb,x] }
+and we want to make join points for the two alternatives,
+which mention the case binder 'cb'. Should we pass 'cb' to
+the join point, or reconstruct it? Here are the two alternatives
+for the C2 alternative:
+
+ Plan A(pass cb): j2 cb x = r2[cb,x]
+
+ Plan B(reconstruct cb): j2 x y z = let cb = C2 x y z in r2[cb,x]
+
+The advantge of Plan B is that we can "see" the definition of cb
+in r2, and that may be important when we inline stuff in r2. The
+disadvantage is that if this optimisation doesn't happen, we end up
+re-allocating C2, when it already exists. This does happen occasionally;
+an example is the function nofib/spectral/cichelli/Auxil.$whinsert.
+
+Plan B is always better if the constructor is nullary.
+
+In both cases we don't have liveness info for cb on a branch-by-branch
+basis, and it's possible that 'cb' is used in some branches but not
+others. Well, the absence analyser will find that out later, so it's
+not too bad.
+
+Sadly, at the time of writing, neither choice seems an unequivocal
+win. Here are nofib results, for adding -fpass-case-bndr-to-join-points
+(all others are zero effect):
+
+ Program Size Allocs Runtime Elapsed
+--------------------------------------------------------------------------------
+ cichelli +0.0% -4.4% 0.13 0.13
+ pic +0.0% -0.7% 0.01 0.04
+ transform -0.0% +2.8% -0.4% -9.1%
+ wave4main +0.0% +10.5% +3.1% +3.4%
+--------------------------------------------------------------------------------
+ Min -0.0% -4.4% -7.0% -31.9%
+ Max +0.1% +10.5% +3.1% +15.0%
+ Geometric Mean +0.0% +0.1% -1.7% -6.1%
+
+