brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 051ed1e Raw
85 lines · c
1//===- AttrKindDetail.h - AttrKind conversion details -----------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef ATTRKINDDETAIL_H_10#define ATTRKINDDETAIL_H_11 12#include "mlir/Dialect/LLVMIR/LLVMDialect.h"13#include "llvm/IR/Attributes.h"14 15namespace mlir {16namespace LLVM {17namespace detail {18 19/// Returns a list of pairs that each hold a mapping from LLVM attribute kinds20/// to their corresponding string name in LLVM IR dialect.21static llvm::ArrayRef<std::pair<llvm::Attribute::AttrKind, llvm::StringRef>>22getAttrKindToNameMapping() {23  using ElemTy = std::pair<llvm::Attribute::AttrKind, llvm::StringRef>;24  // Mapping from llvm attribute kinds to their corresponding MLIR name.25  static const llvm::SmallVector<ElemTy> kindNamePairs = {26      {llvm::Attribute::AttrKind::Alignment, LLVMDialect::getAlignAttrName()},27      {llvm::Attribute::AttrKind::AllocAlign,28       LLVMDialect::getAllocAlignAttrName()},29      {llvm::Attribute::AttrKind::AllocatedPointer,30       LLVMDialect::getAllocatedPointerAttrName()},31      {llvm::Attribute::AttrKind::ByVal, LLVMDialect::getByValAttrName()},32      {llvm::Attribute::AttrKind::ByRef, LLVMDialect::getByRefAttrName()},33      {llvm::Attribute::AttrKind::NoUndef, LLVMDialect::getNoUndefAttrName()},34      {llvm::Attribute::AttrKind::Dereferenceable,35       LLVMDialect::getDereferenceableAttrName()},36      {llvm::Attribute::AttrKind::DereferenceableOrNull,37       LLVMDialect::getDereferenceableOrNullAttrName()},38      {llvm::Attribute::AttrKind::ElementType,39       LLVMDialect::getElementTypeAttrName()},40      {llvm::Attribute::AttrKind::InAlloca, LLVMDialect::getInAllocaAttrName()},41      {llvm::Attribute::AttrKind::InReg, LLVMDialect::getInRegAttrName()},42      {llvm::Attribute::AttrKind::Nest, LLVMDialect::getNestAttrName()},43      {llvm::Attribute::AttrKind::NoAlias, LLVMDialect::getNoAliasAttrName()},44      {llvm::Attribute::AttrKind::Captures,45       LLVMDialect::getNoCaptureAttrName()},46      {llvm::Attribute::AttrKind::NoFree, LLVMDialect::getNoFreeAttrName()},47      {llvm::Attribute::AttrKind::NonNull, LLVMDialect::getNonNullAttrName()},48      {llvm::Attribute::AttrKind::Preallocated,49       LLVMDialect::getPreallocatedAttrName()},50      {llvm::Attribute::AttrKind::Range, LLVMDialect::getRangeAttrName()},51      {llvm::Attribute::AttrKind::ReadOnly, LLVMDialect::getReadonlyAttrName()},52      {llvm::Attribute::AttrKind::ReadNone, LLVMDialect::getReadnoneAttrName()},53      {llvm::Attribute::AttrKind::Returned, LLVMDialect::getReturnedAttrName()},54      {llvm::Attribute::AttrKind::SExt, LLVMDialect::getSExtAttrName()},55      {llvm::Attribute::AttrKind::StackAlignment,56       LLVMDialect::getStackAlignmentAttrName()},57      {llvm::Attribute::AttrKind::StructRet,58       LLVMDialect::getStructRetAttrName()},59      {llvm::Attribute::AttrKind::WriteOnly,60       LLVMDialect::getWriteOnlyAttrName()},61      {llvm::Attribute::AttrKind::ZExt, LLVMDialect::getZExtAttrName()}};62  return kindNamePairs;63}64 65/// Returns a dense map from LLVM attribute name to their kind in LLVM IR66/// dialect.67[[maybe_unused]] static llvm::DenseMap<llvm::StringRef,68                                       llvm::Attribute::AttrKind>69getAttrNameToKindMapping() {70  static auto attrNameToKindMapping = []() {71    llvm::DenseMap<llvm::StringRef, llvm::Attribute::AttrKind> nameKindMap;72    for (auto kindNamePair : getAttrKindToNameMapping()) {73      nameKindMap.insert({kindNamePair.second, kindNamePair.first});74    }75    return nameKindMap;76  }();77  return attrNameToKindMapping;78}79 80} // namespace detail81} // namespace LLVM82} // namespace mlir83 84#endif // ATTRKINDDETAIL_H_85