XiaShark wrote:

> Hello, I noticed an issue after this PR: if both `-march` and `-mcpu` are 
> specified in the command line parameters, the features in `-mcpu` are lost. 
> See https://godbolt.org/z/hPq1z9rvn. Is this expected behavior?

After re-adding `initFeatureMap`, the issue was resolved.
```c++
bool AArch64TargetInfo::initFeatureMap(
     llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU,
     const std::vector<std::string> &FeaturesVec) const {
  std::vector<std::string> UpdatedFeaturesVec;
  // Parse the CPU and add any implied features.
  std::optional<llvm::AArch64::CpuInfo> CpuInfo = llvm::AArch64::parseCpu(CPU);
  if (CpuInfo) {
    auto Exts = CpuInfo->getImpliedExtensions();
    std::vector<StringRef> CPUFeats;
    llvm::AArch64::getExtensionFeatures(Exts, CPUFeats);
    for (auto F : CPUFeats) {
      assert((F[0] == '+' || F[0] == '-') && "Expected +/- in target feature!");
      UpdatedFeaturesVec.push_back(F.str());
    }
  }

  for (const auto &Feature : FeaturesVec)
    if (Feature[0] != '?') {
      std::string UpdatedFeature = Feature;
      if (Feature[0] == '+') {
        std::optional<llvm::AArch64::ExtensionInfo> Extension =
          llvm::AArch64::parseArchExtension(Feature.substr(1));
        if (Extension)
          UpdatedFeature = Extension->PosTargetFeature.str();
      }
      UpdatedFeaturesVec.push_back(UpdatedFeature);
    }

  return TargetInfo::initFeatureMap(Features, Diags, CPU, UpdatedFeaturesVec);
}
```

https://github.com/llvm/llvm-project/pull/95519
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to