Thanks, Thomas.  Looking through the source code it seems like the main advantage to save_for_backward is that the saving is done in C rather python.   So it seems like anytime the computation for the intermediate result would allocate python storage space anyway, it makes sense to use the ctx object.