[ARM] GlobalISel: Support frem for 32-bit values

Legalize to a libcall.
On this occasion, also start allowing soft float subtargets. For the
moment G_FREM is the only legal floating point operation for them.

llvm-svn: 299753
diff --git a/llvm/lib/Target/ARM/ARMLegalizerInfo.cpp b/llvm/lib/Target/ARM/ARMLegalizerInfo.cpp
index cc30547..64cca82 100644
--- a/llvm/lib/Target/ARM/ARMLegalizerInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMLegalizerInfo.cpp
@@ -57,7 +57,7 @@
 
   setAction({G_CONSTANT, s32}, Legal);
 
-  if (ST.hasVFP2()) {
+  if (!ST.useSoftFloat() && ST.hasVFP2()) {
     setAction({G_FADD, s32}, Legal);
     setAction({G_FADD, s64}, Legal);
 
@@ -65,5 +65,7 @@
     setAction({G_STORE, s64}, Legal);
   }
 
+  setAction({G_FREM, s32}, Libcall);
+
   computeTables();
 }