https://gcc.gnu.org/bugzilla/show_bug.cgi?id=22326
--- Comment #7 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- I agree that match.pd is a sensible place for this (and the front end is not, we should be getting optimizations out of the front ends). I'd encourage anyone looking at this also to look at convert_to_real_1, which has different, related optimizations (which also would be better off in match.pd rather than as part of convert). The particular example test in this bug report would also need to pass that deals with fusing operations (when permitted by the fp-contract setting) to handle the case where promotions to a wider type (with the same radix) are involved; I don't know if it does handle that at present.