My comment is about only the "return fixconvop(e);" line.  I think your answer was about why the new code is in fixconvop, maybe?  Currently, none of the re-writes in fixconvop recurse through fixconvop, one does the typical recurse through optelem and most just return the rewritten e, so this stands out as odd and I don't understand why (not that I have a strong understanding of any of this area of the compiler, but it's getting stronger).

In fact, currently fixconvop is called from exactly one place with no recursion.

IMHO, happening to pass the tests is a post-effect, not a justification of correctness.  I'm trying to understand enough to believe that it's correct.