The other thing that was removed by that commit was the propagation of the NoNaNs flag from the experimental_vector_reduce_fmax (/fmin) intrinsic to the replacing VECREDUCE_FMAX (/FMIN) node, but I am not sure why...
Well, the whole approach of D46854 was to remove setting of the FMF in DAG.getNode() everywhere, and instead set the flags via setFlags() after the fact. The point was to be that setting the flags in one place reduces code duplication. However, we're now having the discussion that using setFlags() after the fact may be incorrect in the presence of memoized nodes, and instead we should be always setting flags directly in getNode() -- this basically argues for exactly the opposite direction of what that commit did.
Right - we were trying to make a single point for transferring FMF instead of having every visitXXX() fend for itself. But if there's no way to do it safely/correctly, let's reverse course. At this point, I'm not sure if there is still some problem with always adding flags at getNode() time. Ie, we added the 'Defined' state bit to solve some other flags transfer problem, but is that still needed?