================ @@ -4290,6 +4291,18 @@ class FirConverter : public Fortran::lower::AbstractConverter { assert(blockId == 0 && "invalid blockId"); assert(activeConstructStack.empty() && "invalid construct stack state"); + // Set target_cpu and target_features attributes to be passed through to the + // llvm.func operation during lowering. + const llvm::TargetMachine &targetMachine = bridge.getTargetMachine(); + if (auto targetCPU = targetMachine.getTargetCPU(); !targetCPU.empty()) + func->setAttr("target_cpu", + mlir::StringAttr::get(func.getContext(), targetCPU)); + + if (auto targetFeatures = targetMachine.getTargetFeatureString(); + !targetFeatures.empty()) + func->setAttr("target_features", mlir::LLVM::TargetFeaturesAttr::get( + func.getContext(), targetFeatures)); ---------------- kiranchandramohan wrote:
I am OK with it being here. But as you can imagine there could be other opinions and also the fact that some function attributes are added in lowering, some in passes and what is the right place to do this for a future function attribute. https://github.com/llvm/llvm-project/pull/78289 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits