This patch addresses handling fast math flags for intrinsics and is malleable enough to provide support for new intrinsics with little or no changes after the fact.
I'm still not sold on this approach. IIUC, we're still missing propagation on fcmp, vector reduce, and libcalls.
As I mentioned in D46483, D37686 had a more complete implementation. I drafted a much simpler version of that patch locally. Let me add some tests and clean that up a bit and see if that looks better to you.