What I did in my experiment is like this :  d1 = eager(d1.optimized())  ( before d1 is assigned to d2.)
If we can detect this in our optimization, the code would be more clear. I can do this after OSDI.  I tested this code and it did have better optimization improvement (15% ~ 20%). However, both optimized version and non-optimized version got worse performance. In my opinion, we should use eager to do the experiment.