-
AndyGill authored
Consider the following code f = g (case v of V a b -> a : t f) where g is expensive. Liberate case will turn this into f = g (case v of V a b -> a : t (letrec f = g (case v of V a b -> a : f t) in f) ) Yikes! We evaluate g twice. This leads to a O(2^n) explosion if g calls back to the same code recursively. This happen sometimes in HPC, because every tick is a liberate-able case, but is a general problem to case liberation (I think).
d363c1fc