From e97a55cc395dd9a0b85fd9a9c9fc8f913c6c9fe2 Mon Sep 17 00:00:00 2001 From: Bruno Cardoso Lopes Date: Fri, 7 Mar 2025 12:30:07 -0800 Subject: [PATCH 1/2] [MLIR][LLVMIR] Translation: honor target-features fn attribute --- mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 2 ++ mlir/test/Target/LLVMIR/llvmir.mlir | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index b1bc26a545f62..24b9928b72dc8 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -1606,6 +1606,8 @@ static void convertFunctionAttributes(LLVMFuncOp func, llvmFunc->addFnAttr(llvm::Attribute::NoUnwind); if (func.getWillReturnAttr()) llvmFunc->addFnAttr(llvm::Attribute::WillReturn); + if (TargetFeaturesAttr targetFeatAttr = func.getTargetFeaturesAttr()) + llvmFunc->addFnAttr("target-features", targetFeatAttr.getFeaturesString()); convertFunctionMemoryAttributes(func, llvmFunc); } diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir index db2e08742dbca..bcc359e72813b 100644 --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -2367,6 +2367,18 @@ llvm.func @readwrite_func() attributes { // ----- +// +// target-features attribute. +// + +// CHECK-LABEL: @tf +// CHECK-SAME: #[[TargetFeat:.*]] +llvm.func @tf(!llvm.ptr) attributes {target_features = #llvm.target_features<["+fix-cortex-a53-835769", "+fp-armv8", "+neon", "+outline-atomics", "+v8a"]>} + +// CHECK: attributes #[[TargetFeat]] = { "target-features"="+fix-cortex-a53-835769,+fp-armv8,+neon,+outline-atomics,+v8a" } + +// ----- + // // arm_streaming attribute. // From 2be6ba0692f79b746ed6fd80418d419306d431d5 Mon Sep 17 00:00:00 2001 From: Bruno Cardoso Lopes Date: Fri, 7 Mar 2025 18:37:40 -0800 Subject: [PATCH 2/2] Remove redundant target-features setup --- mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index 2eb9bc5207893..8503a7f6b4fb5 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -1494,9 +1494,6 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) { if (auto tuneCpu = func.getTuneCpu()) llvmFunc->addFnAttr("tune-cpu", *tuneCpu); - if (auto targetFeatures = func.getTargetFeatures()) - llvmFunc->addFnAttr("target-features", targetFeatures->getFeaturesString()); - if (auto attr = func.getVscaleRange()) llvmFunc->addFnAttr(llvm::Attribute::getWithVScaleRangeArgs( getLLVMContext(), attr->getMinRange().getInt(),