aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Target/LLVMIR/ModuleImport.cpp
diff options
context:
space:
mode:
authorMehdi Amini <joker.eph@gmail.com>2025-07-30 13:50:12 +0200
committerGitHub <noreply@github.com>2025-07-30 13:50:12 +0200
commit97fa9a1f5332dd05883fb67b37ce42c3c9d667be (patch)
treeea4368c008042fc4f086bd2a5907a9cf56d34df1 /mlir/lib/Target/LLVMIR/ModuleImport.cpp
parent5c87374f2a33015d39b4e2634c2949851e463602 (diff)
downloadllvm-97fa9a1f5332dd05883fb67b37ce42c3c9d667be.zip
llvm-97fa9a1f5332dd05883fb67b37ce42c3c9d667be.tar.gz
llvm-97fa9a1f5332dd05883fb67b37ce42c3c9d667be.tar.bz2
Revert "Reland "[mlir][llvm] Add intrinsic arg and result attribute support (…" (#151316)
Reverts llvm/llvm-project#151125 Broke the gcc-7 build: include/mlir/Target/LLVMIR/ModuleTranslation.h:318:34: error: no type named 'CallBase' in namespace 'llvm' llvm::CallBase *call, ~~~~~~^
Diffstat (limited to 'mlir/lib/Target/LLVMIR/ModuleImport.cpp')
-rw-r--r--mlir/lib/Target/LLVMIR/ModuleImport.cpp52
1 files changed, 28 insertions, 24 deletions
diff --git a/mlir/lib/Target/LLVMIR/ModuleImport.cpp b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
index a207cce..58e3c44 100644
--- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
@@ -2267,7 +2267,7 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) {
// Handle parameter and result attributes unless it's an incompatible
// call.
if (!isIncompatibleCall)
- convertArgAndResultAttrs(callInst, callOp);
+ convertParameterAttributes(callInst, callOp, builder);
return callOp.getOperation();
}();
@@ -2364,7 +2364,7 @@ LogicalResult ModuleImport::convertInstruction(llvm::Instruction *inst) {
// Handle parameter and result attributes unless it's an incompatible
// invoke.
if (!isIncompatibleInvoke)
- convertArgAndResultAttrs(invokeInst, invokeOp);
+ convertParameterAttributes(invokeInst, invokeOp, builder);
if (!invokeInst->getType()->isVoidTy())
mapValue(inst, invokeOp.getResults().front());
@@ -2730,10 +2730,11 @@ void ModuleImport::processFunctionAttributes(llvm::Function *func,
}
DictionaryAttr
-ModuleImport::convertArgOrResultAttrSet(llvm::AttributeSet llvmAttrSet) {
+ModuleImport::convertParameterAttribute(llvm::AttributeSet llvmParamAttrs,
+ OpBuilder &builder) {
SmallVector<NamedAttribute> paramAttrs;
for (auto [llvmKind, mlirName] : getAttrKindToNameMapping()) {
- auto llvmAttr = llvmAttrSet.getAttribute(llvmKind);
+ auto llvmAttr = llvmParamAttrs.getAttribute(llvmKind);
// Skip attributes that are not attached.
if (!llvmAttr.isValid())
continue;
@@ -2768,12 +2769,13 @@ ModuleImport::convertArgOrResultAttrSet(llvm::AttributeSet llvmAttrSet) {
return builder.getDictionaryAttr(paramAttrs);
}
-void ModuleImport::convertArgAndResultAttrs(llvm::Function *func,
- LLVMFuncOp funcOp) {
+void ModuleImport::convertParameterAttributes(llvm::Function *func,
+ LLVMFuncOp funcOp,
+ OpBuilder &builder) {
auto llvmAttrs = func->getAttributes();
for (size_t i = 0, e = funcOp.getNumArguments(); i < e; ++i) {
llvm::AttributeSet llvmArgAttrs = llvmAttrs.getParamAttrs(i);
- funcOp.setArgAttrs(i, convertArgOrResultAttrSet(llvmArgAttrs));
+ funcOp.setArgAttrs(i, convertParameterAttribute(llvmArgAttrs, builder));
}
// Convert the result attributes and attach them wrapped in an ArrayAttribute
// to the funcOp.
@@ -2781,23 +2783,17 @@ void ModuleImport::convertArgAndResultAttrs(llvm::Function *func,
if (!llvmResAttr.hasAttributes())
return;
funcOp.setResAttrsAttr(
- builder.getArrayAttr({convertArgOrResultAttrSet(llvmResAttr)}));
+ builder.getArrayAttr(convertParameterAttribute(llvmResAttr, builder)));
}
-void ModuleImport::convertArgAndResultAttrs(
- llvm::CallBase *call, ArgAndResultAttrsOpInterface attrsOp,
- ArrayRef<unsigned> immArgPositions) {
- // Compute the set of immediate argument positions.
- llvm::SmallDenseSet<unsigned> immArgPositionsSet(immArgPositions.begin(),
- immArgPositions.end());
- // Convert the argument attributes and filter out immediate arguments.
+void ModuleImport::convertParameterAttributes(llvm::CallBase *call,
+ ArrayAttr &argsAttr,
+ ArrayAttr &resAttr,
+ OpBuilder &builder) {
llvm::AttributeList llvmAttrs = call->getAttributes();
SmallVector<llvm::AttributeSet> llvmArgAttrsSet;
bool anyArgAttrs = false;
for (size_t i = 0, e = call->arg_size(); i < e; ++i) {
- // Skip immediate arguments.
- if (immArgPositionsSet.contains(i))
- continue;
llvmArgAttrsSet.emplace_back(llvmAttrs.getParamAttrs(i));
if (llvmArgAttrsSet.back().hasAttributes())
anyArgAttrs = true;
@@ -2811,16 +2807,24 @@ void ModuleImport::convertArgAndResultAttrs(
if (anyArgAttrs) {
SmallVector<DictionaryAttr> argAttrs;
for (auto &llvmArgAttrs : llvmArgAttrsSet)
- argAttrs.emplace_back(convertArgOrResultAttrSet(llvmArgAttrs));
- attrsOp.setArgAttrsAttr(getArrayAttr(argAttrs));
+ argAttrs.emplace_back(convertParameterAttribute(llvmArgAttrs, builder));
+ argsAttr = getArrayAttr(argAttrs);
}
- // Convert the result attributes.
llvm::AttributeSet llvmResAttr = llvmAttrs.getRetAttrs();
if (!llvmResAttr.hasAttributes())
return;
- DictionaryAttr resAttrs = convertArgOrResultAttrSet(llvmResAttr);
- attrsOp.setResAttrsAttr(getArrayAttr({resAttrs}));
+ DictionaryAttr resAttrs = convertParameterAttribute(llvmResAttr, builder);
+ resAttr = getArrayAttr({resAttrs});
+}
+
+void ModuleImport::convertParameterAttributes(llvm::CallBase *call,
+ CallOpInterface callOp,
+ OpBuilder &builder) {
+ ArrayAttr argsAttr, resAttr;
+ convertParameterAttributes(call, argsAttr, resAttr, builder);
+ callOp.setArgAttrsAttr(argsAttr);
+ callOp.setResAttrsAttr(resAttr);
}
template <typename Op>
@@ -2888,7 +2892,7 @@ LogicalResult ModuleImport::processFunction(llvm::Function *func) {
builder, loc, func->getName(), functionType,
convertLinkageFromLLVM(func->getLinkage()), dsoLocal, cconv);
- convertArgAndResultAttrs(func, funcOp);
+ convertParameterAttributes(func, funcOp, builder);
if (FlatSymbolRefAttr personality = getPersonalityAsAttr(func))
funcOp.setPersonalityAttr(personality);