diff options
author | Congcong Cai <congcongcai0907@163.com> | 2024-01-31 11:14:35 +0800 |
---|---|---|
committer | Congcong Cai <congcongcai0907@163.com> | 2024-01-31 11:14:40 +0800 |
commit | 1a17f2beb9cd1f5bbaa64502ab5c02ff74c199a4 (patch) | |
tree | 68f198432f999874042f5a8a99774fd932f07580 /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | |
parent | c761b4a5e4cc003a2c850898e1dc67d2637cfb0c (diff) | |
download | llvm-1a17f2beb9cd1f5bbaa64502ab5c02ff74c199a4.zip llvm-1a17f2beb9cd1f5bbaa64502ab5c02ff74c199a4.tar.gz llvm-1a17f2beb9cd1f5bbaa64502ab5c02ff74c199a4.tar.bz2 |
[WebAssembly] avoid to use explicit disabled feature
In `CoalesceFeaturesAndStripAtomics`, feature string is converted to FeatureBitset and back to feature string. It will lose information about explicit diasbled features.
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 2db1b64..0aadc6a 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -200,7 +200,8 @@ public: bool runOnModule(Module &M) override { FeatureBitset Features = coalesceFeatures(M); - std::string FeatureStr = getFeatureString(Features); + std::string FeatureStr = + getFeatureString(Features, WasmTM->getTargetFeatureString()); WasmTM->setTargetFeatureString(FeatureStr); for (auto &F : M) replaceFeatures(F, FeatureStr); @@ -238,12 +239,17 @@ private: return Features; } - std::string getFeatureString(const FeatureBitset &Features) { + static std::string getFeatureString(const FeatureBitset &Features, + StringRef TargetFS) { std::string Ret; for (const SubtargetFeatureKV &KV : WebAssemblyFeatureKV) { if (Features[KV.Value]) Ret += (StringRef("+") + KV.Key + ",").str(); } + SubtargetFeatures TF{TargetFS}; + for (std::string const &F : TF.getFeatures()) + if (!SubtargetFeatures::isEnabled(F)) + Ret += F; return Ret; } |