From 2ea6bb645eff7219c10eda83866bd27c1da462e1 Mon Sep 17 00:00:00 2001 From: Tobias Gysi Date: Thu, 2 Mar 2023 12:55:57 +0100 Subject: [PATCH] [mlir][llvm] Use interfaces in the translation to LLVMIR. The revision consistently uses the AliasAnalysisOp and AccessGroupOp interfaces in the translation from MLIR to LLVMIR. It thus drops the last string based lookups of alias scope and access group attributes. Depends on D144851 Reviewed By: Dinistro Differential Revision: https://reviews.llvm.org/D145037 --- .../include/mlir/Target/LLVMIR/ModuleTranslation.h | 6 +++-- .../Target/LLVMIR/LoopAnnotationTranslation.cpp | 4 ++-- mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.h | 7 +++--- mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 26 +++++++--------------- 4 files changed, 17 insertions(+), 26 deletions(-) diff --git a/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h b/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h index 90168a1..6709125 100644 --- a/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h +++ b/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h @@ -126,10 +126,12 @@ public: llvm::MDNode *getAliasScope(Operation *op, SymbolRefAttr aliasScopeRef) const; // Sets LLVM metadata for memory operations that are in a parallel loop. - void setAccessGroupsMetadata(Operation *op, llvm::Instruction *inst); + void setAccessGroupsMetadata(AccessGroupOpInterface op, + llvm::Instruction *inst); // Sets LLVM metadata for memory operations that have alias scope information. - void setAliasScopeMetadata(Operation *op, llvm::Instruction *inst); + void setAliasScopeMetadata(AliasAnalysisOpInterface op, + llvm::Instruction *inst); /// Sets LLVM TBAA metadata for memory operations that have TBAA attributes. void setTBAAMetadata(AliasAnalysisOpInterface op, llvm::Instruction *inst); diff --git a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp index 4a535dc..6abcf69 100644 --- a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp @@ -278,8 +278,8 @@ LoopAnnotationTranslation::getAccessGroup(Operation *op, } llvm::MDNode * -LoopAnnotationTranslation::getAccessGroups(Operation *op, - ArrayAttr accessGroupRefs) const { +LoopAnnotationTranslation::getAccessGroups(AccessGroupOpInterface op) const { + ArrayAttr accessGroupRefs = op.getAccessGroupsOrNull(); if (!accessGroupRefs || accessGroupRefs.empty()) return nullptr; diff --git a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.h b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.h index 4de54f3..e663f64 100644 --- a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.h +++ b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.h @@ -39,10 +39,9 @@ public: llvm::MDNode *getAccessGroup(Operation *op, SymbolRefAttr accessGroupRef) const; - /// Returns the LLVM metadata corresponding to a list of symbol reference to - /// an mlir LLVM dialect access group operation. Returns nullptr if - /// `accessGroupRefs` is null or empty. - llvm::MDNode *getAccessGroups(Operation *op, ArrayAttr accessGroupRefs) const; + /// Returns the LLVM metadata corresponding to the access group operations + /// referenced by the AccessGroupOpInterface or null if there are none. + llvm::MDNode *getAccessGroups(AccessGroupOpInterface op) const; private: /// Returns the LLVM metadata corresponding to a llvm loop metadata attribute. diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index 164cd1f..15e7318 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -998,17 +998,10 @@ LogicalResult ModuleTranslation::createAccessGroupMetadata() { return loopAnnotationTranslation->createAccessGroupMetadata(); } -void ModuleTranslation::setAccessGroupsMetadata(Operation *op, +void ModuleTranslation::setAccessGroupsMetadata(AccessGroupOpInterface op, llvm::Instruction *inst) { - auto populateGroupsMetadata = [&](ArrayAttr groupRefs) { - if (llvm::MDNode *node = - loopAnnotationTranslation->getAccessGroups(op, groupRefs)) - inst->setMetadata(llvm::LLVMContext::MD_access_group, node); - }; - - auto groupRefs = - op->getAttrOfType(LLVMDialect::getAccessGroupsAttrName()); - populateGroupsMetadata(groupRefs); + if (llvm::MDNode *node = loopAnnotationTranslation->getAccessGroups(op)) + inst->setMetadata(llvm::LLVMContext::MD_access_group, node); } LogicalResult ModuleTranslation::createAliasScopeMetadata() { @@ -1060,7 +1053,7 @@ ModuleTranslation::getAliasScope(Operation *op, return aliasScopeMetadataMapping.lookup(aliasScopeOp); } -void ModuleTranslation::setAliasScopeMetadata(Operation *op, +void ModuleTranslation::setAliasScopeMetadata(AliasAnalysisOpInterface op, llvm::Instruction *inst) { auto populateScopeMetadata = [&](ArrayAttr scopeRefs, unsigned kind) { if (!scopeRefs || scopeRefs.empty()) @@ -1073,13 +1066,10 @@ void ModuleTranslation::setAliasScopeMetadata(Operation *op, inst->setMetadata(kind, node); }; - auto aliasScopeRefs = - op->getAttrOfType(LLVMDialect::getAliasScopesAttrName()); - populateScopeMetadata(aliasScopeRefs, llvm::LLVMContext::MD_alias_scope); - - auto noaliasScopeRefs = - op->getAttrOfType(LLVMDialect::getNoAliasScopesAttrName()); - populateScopeMetadata(noaliasScopeRefs, llvm::LLVMContext::MD_noalias); + populateScopeMetadata(op.getAliasScopesOrNull(), + llvm::LLVMContext::MD_alias_scope); + populateScopeMetadata(op.getNoAliasScopesOrNull(), + llvm::LLVMContext::MD_noalias); } llvm::MDNode *ModuleTranslation::getTBAANode(Operation *op, -- 2.7.4