]> granicus.if.org Git - clang/commitdiff
[WebAssembly] Add options for using the nontrapping-fptoint feature.
authorDan Gohman <dan433584@gmail.com>
Tue, 28 Nov 2017 01:13:45 +0000 (01:13 +0000)
committerDan Gohman <dan433584@gmail.com>
Tue, 28 Nov 2017 01:13:45 +0000 (01:13 +0000)
This adds ways to control use of WebAssembly's new nontrapping-fptoint
feature.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@319129 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Options.td
lib/Basic/Targets/WebAssembly.cpp
lib/Basic/Targets/WebAssembly.h

index 15a752b354a4d0b8862a7fe90fe3fd7d280626bb..9f8684ddee8c66fc8498ecfbd5b9314889a5eeae 100644 (file)
@@ -1837,6 +1837,8 @@ def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group<m_aarch64_Features_Group>,
 
 def msimd128 : Flag<["-"], "msimd128">, Group<m_wasm_Features_Group>;
 def mno_simd128 : Flag<["-"], "mno-simd128">, Group<m_wasm_Features_Group>;
+def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, Group<m_wasm_Features_Group>;
+def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, Group<m_wasm_Features_Group>;
 
 def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">,
   Flags<[HelpHidden]>,
index 9eaaf8d4fdc87e27f58e5851c9e648719ad273a4..915aad4b563b43a4b1968d94aaf3185f0bd17dd9 100644 (file)
@@ -32,6 +32,7 @@ const Builtin::Info WebAssemblyTargetInfo::BuiltinInfo[] = {
 bool WebAssemblyTargetInfo::hasFeature(StringRef Feature) const {
   return llvm::StringSwitch<bool>(Feature)
       .Case("simd128", SIMDLevel >= SIMD128)
+      .Case("nontrapping-fptoint", HasNontrappingFPToInt)
       .Default(false);
 }
 
@@ -61,6 +62,14 @@ bool WebAssemblyTargetInfo::handleTargetFeatures(
       SIMDLevel = std::min(SIMDLevel, SIMDEnum(SIMD128 - 1));
       continue;
     }
+    if (Feature == "+nontrapping-fptoint") {
+      HasNontrappingFPToInt = true;
+      continue;
+    }
+    if (Feature == "-nontrapping-fptoint") {
+      HasNontrappingFPToInt = false;
+      continue;
+    }
 
     Diags.Report(diag::err_opt_not_valid_with_opt)
         << Feature << "-target-feature";
index 20f57506d9fa8b8379773c66a57f49b195d0ea38..ee0073d081e0a9a09dd10054848c64bc8cc7a476 100644 (file)
@@ -30,9 +30,11 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : public TargetInfo {
     SIMD128,
   } SIMDLevel;
 
+  bool HasNontrappingFPToInt;
+
 public:
   explicit WebAssemblyTargetInfo(const llvm::Triple &T, const TargetOptions &)
-      : TargetInfo(T), SIMDLevel(NoSIMD) {
+      : TargetInfo(T), SIMDLevel(NoSIMD), HasNontrappingFPToInt(false) {
     NoAsmVariants = true;
     SuitableAlign = 128;
     LargeArrayMinWidth = 128;
@@ -55,8 +57,10 @@ private:
   initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags,
                  StringRef CPU,
                  const std::vector<std::string> &FeaturesVec) const override {
-    if (CPU == "bleeding-edge")
+    if (CPU == "bleeding-edge") {
       Features["simd128"] = true;
+      Features["nontrapping-fptoint"] = true;
+    }
     return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
   }