| //===- OpenMPCommon.cpp - Utils for translating MLIR dialect to LLVM IR----===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file defines general utilities for MLIR Dialect translations to LLVM IR. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "mlir/Target/LLVMIR/Dialect/OpenMPCommon.h" | |
| llvm::Constant *mlir::LLVM::createSourceLocStrFromLocation( | |
| Location loc, llvm::OpenMPIRBuilder &builder, StringRef name, | |
| uint32_t &strLen, bool forOffloadMap) { | |
| if (auto fileLoc = dyn_cast<FileLineColLoc>(loc)) { | |
| StringRef fileName = fileLoc.getFilename(); | |
| unsigned lineNo = fileLoc.getLine(); | |
| unsigned colNo = fileLoc.getColumn(); | |
| if (forOffloadMap) | |
| return builder.getOrCreateSrcLocStr(fileName, name, lineNo, colNo, | |
| strLen); | |
| return builder.getOrCreateSrcLocStr(name, fileName, lineNo, colNo, strLen); | |
| } | |
| std::string locStr; | |
| llvm::raw_string_ostream locOS(locStr); | |
| locOS << loc; | |
| return builder.getOrCreateSrcLocStr(locStr, strLen); | |
| } | |
| llvm::Constant *mlir::LLVM::createMappingInformation( | |
| Location loc, llvm::OpenMPIRBuilder &builder, StringRef mapName) { | |
| uint32_t strLen; | |
| Location childLoc = loc; | |
| StringRef name = mapName; | |
| if (auto nameLoc = dyn_cast<NameLoc>(loc)) { | |
| childLoc = nameLoc.getChildLoc(); | |
| if (name.empty()) | |
| name = nameLoc.getName(); | |
| } | |
| if (name.empty()) | |
| name = "unknown"; | |
| return createSourceLocStrFromLocation(childLoc, builder, name, strLen, | |
| /*forOffloadMap=*/true); | |
| } |