blob: d85b2e5c0c0ea31ed873693d104500ab7d577d01 [file] [edit]
//===- 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);
}