This patch enables support on SPE for constrained fadd/fsub/fmul/fdiv/fma and compare operations. The motivation is https://bugs.llvm.org/show_bug.cgi?id=50070.
One thing I'm not pretty sure is the fcmp versus fcmps. On description of SPE float comparing instructions, I saw:
If either operand contains a NaN, infinity, or a denorm and floating-point invalid exceptions are enabled in the SPEFSCR, the exception is taken. If the exception is not enabled, the comparison treats NaNs, infinities, and denorms as normalized numbers.
So I think fcmps should be the enabled one. (LangRef section) But when I'm targeting SPE using clang, it generates IR with some fcmp and some other fcmps.