llvm-project/clang/lib/CIR/CodeGen/CIRGenDeclOpenMP.cpp
Erich Keane 2e2e48f171
[OpenMP][CIR] Add basic infrastructure for CIR lowering (#171902)
This patch adds the basic infrastructure for lowering an OpenMP
directive, which should enable someone to take over the OpenMP lowering
in the future. It adds the lowering entry points to CIR in the same way
as OpenACC.

Note that this does nothing with any of the directives, which will
happen in a followup patch. No infrastructure for clauses is added
either, but that will come in a followup patch as well.
2025-12-15 06:07:37 -08:00

130 lines
6.2 KiB
C++

//===----------------------------------------------------------------------===//
//
// 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 contains code to emit Decl nodes as CIR code.
//
//===----------------------------------------------------------------------===//
#include "CIRGenFunction.h"
#include "clang/AST/DeclOpenMP.h"
using namespace clang;
using namespace clang::CIRGen;
void CIRGenModule::emitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPThreadPrivateDecl");
}
void CIRGenFunction::emitOMPThreadPrivateDecl(const OMPThreadPrivateDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPThreadPrivateDecl");
}
void CIRGenModule::emitOMPGroupPrivateDecl(const OMPGroupPrivateDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPGroupPrivateDecl");
}
void CIRGenFunction::emitOMPGroupPrivateDecl(const OMPGroupPrivateDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPGroupPrivateDecl");
}
void CIRGenModule::emitOMPCapturedExpr(const OMPCapturedExprDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPCapturedExpr");
}
void CIRGenFunction::emitOMPCapturedExpr(const OMPCapturedExprDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPCapturedExpr");
}
void CIRGenModule::emitOMPAllocateDecl(const OMPAllocateDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPAllocateDecl");
}
void CIRGenFunction::emitOMPAllocateDecl(const OMPAllocateDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPAllocateDecl");
}
void CIRGenModule::emitOMPDeclareReduction(const OMPDeclareReductionDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPDeclareReduction");
}
void CIRGenFunction::emitOMPDeclareReduction(const OMPDeclareReductionDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPDeclareReduction");
}
void CIRGenModule::emitOMPDeclareMapper(const OMPDeclareMapperDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPDeclareMapper");
}
void CIRGenFunction::emitOMPDeclareMapper(const OMPDeclareMapperDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPDeclareMapper");
}
void CIRGenModule::emitOMPRequiresDecl(const OMPRequiresDecl *d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
errorNYI(d->getSourceRange(), "OpenMP OMPRequiresDecl");
}
void CIRGenFunction::emitOMPRequiresDecl(const OMPRequiresDecl &d) {
// TODO(OpenMP): We don't properly differentiate between 'emitDecl' and
// 'emitGlobal' and 'emitTopLevelDecl' in CIRGenDecl.cpp/CIRGenModule.cpp, so
// if this decl requires we differentiate those, we probably need to split
// this function into multiples.
getCIRGenModule().errorNYI(d.getSourceRange(), "OpenMP OMPRequiresDecl");
}