[llvm-branch-commits] [llvm] 6e006e1 - [WebAssembly] Fix feature coalescing (#110647)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Oct 29 01:58:12 PDT 2024
Author: Nikita Popov
Date: 2024-10-29T09:58:06+01:00
New Revision: 6e006e11f3509f0f3eeac9f3b092176cf7c1832f
URL: https://github.com/llvm/llvm-project/commit/6e006e11f3509f0f3eeac9f3b092176cf7c1832f
DIFF: https://github.com/llvm/llvm-project/commit/6e006e11f3509f0f3eeac9f3b092176cf7c1832f.diff
LOG: [WebAssembly] Fix feature coalescing (#110647)
This fixes a problem introduced in #80094. That PR copied negative
features from the TargetMachine to the end of the feature string. This
is not correct, because even if we have a baseline TM of say `-simd128`,
but a function with `+simd128`, the coalesced feature string should have
`+simd128`, not `-simd128`.
To address the original motivation of that PR, we should instead
explicitly materialize the negative features in the target feature
string, so that explicitly disabled default features are honored.
Unfortunately, there doesn't seem to be any way to actually test this
using llc, because `-mattr` appends the specified features to the end of
the `"target-features"` attribute. I've tested this locally by making it
prepend the features instead.
(cherry picked from commit 5a7b79c93e2e0c71aec016973f5f13d3bb2e7a62)
Added:
Modified:
llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index 23539a5f4b26f1..ac9e6d5a90cb3c 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -202,8 +202,7 @@ class CoalesceFeaturesAndStripAtomics final : public ModulePass {
bool runOnModule(Module &M) override {
FeatureBitset Features = coalesceFeatures(M);
- std::string FeatureStr =
- getFeatureString(Features, WasmTM->getTargetFeatureString());
+ std::string FeatureStr = getFeatureString(Features);
WasmTM->setTargetFeatureString(FeatureStr);
for (auto &F : M)
replaceFeatures(F, FeatureStr);
@@ -241,17 +240,14 @@ class CoalesceFeaturesAndStripAtomics final : public ModulePass {
return Features;
}
- static std::string getFeatureString(const FeatureBitset &Features,
- StringRef TargetFS) {
+ static std::string getFeatureString(const FeatureBitset &Features) {
std::string Ret;
for (const SubtargetFeatureKV &KV : WebAssemblyFeatureKV) {
if (Features[KV.Value])
Ret += (StringRef("+") + KV.Key + ",").str();
+ else
+ Ret += (StringRef("-") + KV.Key + ",").str();
}
- SubtargetFeatures TF{TargetFS};
- for (std::string const &F : TF.getFeatures())
- if (!SubtargetFeatures::isEnabled(F))
- Ret += F + ",";
return Ret;
}
More information about the llvm-branch-commits
mailing list