Skip to content

Commit eca2bb5

Browse files
authored
Merge branch 'main' into cir_vector_logical_not
2 parents a4887ec + 99a29f6 commit eca2bb5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+14876
-13489
lines changed

clang/include/clang/Basic/DiagnosticCommonKinds.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,12 @@ def err_omp_more_one_clause : Error<
433433
"directive '#pragma omp %0' cannot contain more than one '%1' clause%select{| with '%3' name modifier| with 'source' dependence}2">;
434434
def err_omp_required_clause : Error<
435435
"directive '#pragma omp %0' requires the '%1' clause">;
436+
def warn_omp_gpu_unsupported_clause: Warning<
437+
"clause '%0' is currently not supported on a GPU; clause ignored">,
438+
InGroup<OpenMPClauses>;
439+
def warn_omp_gpu_unsupported_modifier_for_clause: Warning<
440+
"modifier '%0' is currently not supported on a GPU for the '%1' clause; modifier ignored">,
441+
InGroup<OpenMPClauses>;
436442

437443
// Static Analyzer Core
438444
def err_unknown_analyzer_checker_or_package : Error<

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include "clang/AST/DeclObjC.h"
2727
#include "clang/AST/DeclTemplate.h"
2828
#include "clang/AST/Expr.h"
29-
#include "clang/AST/LambdaCapture.h"
3029
#include "clang/AST/RecordLayout.h"
3130
#include "clang/AST/RecursiveASTVisitor.h"
3231
#include "clang/AST/VTableBuilder.h"
@@ -1904,59 +1903,46 @@ CGDebugInfo::createInlinedSubprogram(StringRef FuncName,
19041903
return SP;
19051904
}
19061905

1907-
llvm::StringRef
1908-
CGDebugInfo::GetLambdaCaptureName(const LambdaCapture &Capture) {
1909-
if (Capture.capturesThis())
1910-
return CGM.getCodeGenOpts().EmitCodeView ? "__this" : "this";
1911-
1912-
assert(Capture.capturesVariable());
1913-
1914-
const ValueDecl *CaptureDecl = Capture.getCapturedVar();
1915-
assert(CaptureDecl && "Expected valid decl for captured variable.");
1916-
1917-
return CaptureDecl->getName();
1918-
}
1919-
19201906
void CGDebugInfo::CollectRecordLambdaFields(
19211907
const CXXRecordDecl *CXXDecl, SmallVectorImpl<llvm::Metadata *> &elements,
19221908
llvm::DIType *RecordTy) {
19231909
// For C++11 Lambdas a Field will be the same as a Capture, but the Capture
19241910
// has the name and the location of the variable so we should iterate over
19251911
// both concurrently.
1912+
const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(CXXDecl);
19261913
RecordDecl::field_iterator Field = CXXDecl->field_begin();
19271914
unsigned fieldno = 0;
19281915
for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(),
19291916
E = CXXDecl->captures_end();
19301917
I != E; ++I, ++Field, ++fieldno) {
1931-
const LambdaCapture &Capture = *I;
1932-
const uint64_t FieldOffset =
1933-
CGM.getContext().getASTRecordLayout(CXXDecl).getFieldOffset(fieldno);
1934-
1935-
assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1936-
1937-
SourceLocation Loc;
1938-
uint32_t Align = 0;
1939-
1940-
if (Capture.capturesThis()) {
1918+
const LambdaCapture &C = *I;
1919+
if (C.capturesVariable()) {
1920+
SourceLocation Loc = C.getLocation();
1921+
assert(!Field->isBitField() && "lambdas don't have bitfield members!");
1922+
ValueDecl *V = C.getCapturedVar();
1923+
StringRef VName = V->getName();
1924+
llvm::DIFile *VUnit = getOrCreateFile(Loc);
1925+
auto Align = getDeclAlignIfRequired(V, CGM.getContext());
1926+
llvm::DIType *FieldType = createFieldType(
1927+
VName, Field->getType(), Loc, Field->getAccess(),
1928+
layout.getFieldOffset(fieldno), Align, VUnit, RecordTy, CXXDecl);
1929+
elements.push_back(FieldType);
1930+
} else if (C.capturesThis()) {
19411931
// TODO: Need to handle 'this' in some way by probably renaming the
19421932
// this of the lambda class and having a field member of 'this' or
19431933
// by using AT_object_pointer for the function and having that be
19441934
// used as 'this' for semantic references.
1945-
Loc = Field->getLocation();
1946-
} else {
1947-
Loc = Capture.getLocation();
1948-
1949-
const ValueDecl *CaptureDecl = Capture.getCapturedVar();
1950-
assert(CaptureDecl && "Expected valid decl for captured variable.");
1951-
1952-
Align = getDeclAlignIfRequired(CaptureDecl, CGM.getContext());
1935+
FieldDecl *f = *Field;
1936+
llvm::DIFile *VUnit = getOrCreateFile(f->getLocation());
1937+
QualType type = f->getType();
1938+
StringRef ThisName =
1939+
CGM.getCodeGenOpts().EmitCodeView ? "__this" : "this";
1940+
llvm::DIType *fieldType = createFieldType(
1941+
ThisName, type, f->getLocation(), f->getAccess(),
1942+
layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl);
1943+
1944+
elements.push_back(fieldType);
19531945
}
1954-
1955-
llvm::DIFile *VUnit = getOrCreateFile(Loc);
1956-
1957-
elements.push_back(createFieldType(
1958-
GetLambdaCaptureName(Capture), Field->getType(), Loc,
1959-
Field->getAccess(), FieldOffset, Align, VUnit, RecordTy, CXXDecl));
19601946
}
19611947
}
19621948

clang/lib/CodeGen/CGDebugInfo.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,6 @@ class CGDebugInfo {
397397
void CollectRecordFields(const RecordDecl *Decl, llvm::DIFile *F,
398398
SmallVectorImpl<llvm::Metadata *> &E,
399399
llvm::DICompositeType *RecordTy);
400-
llvm::StringRef GetLambdaCaptureName(const LambdaCapture &Capture);
401400

402401
/// If the C++ class has vtable info then insert appropriate debug
403402
/// info entry in EltTys vector.

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,7 +1550,8 @@ static llvm::TargetRegionEntryInfo getEntryInfoFromPresumedLoc(
15501550
return std::pair<std::string, uint64_t>(PLoc.getFilename(), PLoc.getLine());
15511551
};
15521552

1553-
return OMPBuilder.getTargetEntryUniqueInfo(FileInfoCallBack, ParentName);
1553+
return OMPBuilder.getTargetEntryUniqueInfo(FileInfoCallBack,
1554+
*CGM.getFileSystem(), ParentName);
15541555
}
15551556

15561557
ConstantAddress CGOpenMPRuntime::getAddrOfDeclareTargetVar(const VarDecl *VD) {
@@ -2703,7 +2704,8 @@ llvm::Value *CGOpenMPRuntime::emitForNext(CodeGenFunction &CGF,
27032704
}
27042705

27052706
llvm::Value *CGOpenMPRuntime::emitMessageClause(CodeGenFunction &CGF,
2706-
const Expr *Message) {
2707+
const Expr *Message,
2708+
SourceLocation Loc) {
27072709
if (!Message)
27082710
return llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
27092711
return CGF.EmitScalarExpr(Message);
@@ -2713,11 +2715,13 @@ llvm::Value *
27132715
CGOpenMPRuntime::emitMessageClause(CodeGenFunction &CGF,
27142716
const OMPMessageClause *MessageClause) {
27152717
return emitMessageClause(
2716-
CGF, MessageClause ? MessageClause->getMessageString() : nullptr);
2718+
CGF, MessageClause ? MessageClause->getMessageString() : nullptr,
2719+
MessageClause->getBeginLoc());
27172720
}
27182721

27192722
llvm::Value *
2720-
CGOpenMPRuntime::emitSeverityClause(OpenMPSeverityClauseKind Severity) {
2723+
CGOpenMPRuntime::emitSeverityClause(OpenMPSeverityClauseKind Severity,
2724+
SourceLocation Loc) {
27212725
// OpenMP 6.0, 10.4: "If no severity clause is specified then the effect is
27222726
// as if sev-level is fatal."
27232727
return llvm::ConstantInt::get(CGM.Int32Ty,
@@ -2727,13 +2731,15 @@ CGOpenMPRuntime::emitSeverityClause(OpenMPSeverityClauseKind Severity) {
27272731
llvm::Value *
27282732
CGOpenMPRuntime::emitSeverityClause(const OMPSeverityClause *SeverityClause) {
27292733
return emitSeverityClause(SeverityClause ? SeverityClause->getSeverityKind()
2730-
: OMPC_SEVERITY_unknown);
2734+
: OMPC_SEVERITY_unknown,
2735+
SeverityClause->getBeginLoc());
27312736
}
27322737

27332738
void CGOpenMPRuntime::emitNumThreadsClause(
27342739
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
27352740
OpenMPNumThreadsClauseModifier Modifier, OpenMPSeverityClauseKind Severity,
2736-
const Expr *Message) {
2741+
SourceLocation SeverityLoc, const Expr *Message,
2742+
SourceLocation MessageLoc) {
27372743
if (!CGF.HaveInsertPoint())
27382744
return;
27392745
llvm::SmallVector<llvm::Value *, 4> Args(
@@ -2745,8 +2751,8 @@ void CGOpenMPRuntime::emitNumThreadsClause(
27452751
RuntimeFunction FnID = OMPRTL___kmpc_push_num_threads;
27462752
if (Modifier == OMPC_NUMTHREADS_strict) {
27472753
FnID = OMPRTL___kmpc_push_num_threads_strict;
2748-
Args.push_back(emitSeverityClause(Severity));
2749-
Args.push_back(emitMessageClause(CGF, Message));
2754+
Args.push_back(emitSeverityClause(Severity, SeverityLoc));
2755+
Args.push_back(emitMessageClause(CGF, Message, MessageLoc));
27502756
}
27512757
CGF.EmitRuntimeCall(
27522758
OMPBuilder.getOrCreateRuntimeFunction(CGM.getModule(), FnID), Args);
@@ -12654,7 +12660,8 @@ llvm::Value *CGOpenMPSIMDRuntime::emitForNext(CodeGenFunction &CGF,
1265412660
void CGOpenMPSIMDRuntime::emitNumThreadsClause(
1265512661
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
1265612662
OpenMPNumThreadsClauseModifier Modifier, OpenMPSeverityClauseKind Severity,
12657-
const Expr *Message) {
12663+
SourceLocation SeverityLoc, const Expr *Message,
12664+
SourceLocation MessageLoc) {
1265812665
llvm_unreachable("Not supported in SIMD-only mode");
1265912666
}
1266012667

clang/lib/CodeGen/CGOpenMPRuntime.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,11 +1049,13 @@ class CGOpenMPRuntime {
10491049
Address UB, Address ST);
10501050

10511051
virtual llvm::Value *emitMessageClause(CodeGenFunction &CGF,
1052-
const Expr *Message);
1052+
const Expr *Message,
1053+
SourceLocation Loc);
10531054
virtual llvm::Value *emitMessageClause(CodeGenFunction &CGF,
10541055
const OMPMessageClause *MessageClause);
10551056

1056-
virtual llvm::Value *emitSeverityClause(OpenMPSeverityClauseKind Severity);
1057+
virtual llvm::Value *emitSeverityClause(OpenMPSeverityClauseKind Severity,
1058+
SourceLocation Loc);
10571059
virtual llvm::Value *
10581060
emitSeverityClause(const OMPSeverityClause *SeverityClause);
10591061

@@ -1069,7 +1071,9 @@ class CGOpenMPRuntime {
10691071
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
10701072
OpenMPNumThreadsClauseModifier Modifier = OMPC_NUMTHREADS_unknown,
10711073
OpenMPSeverityClauseKind Severity = OMPC_SEVERITY_fatal,
1072-
const Expr *Message = nullptr);
1074+
SourceLocation SeverityLoc = SourceLocation(),
1075+
const Expr *Message = nullptr,
1076+
SourceLocation MessageLoc = SourceLocation());
10731077

10741078
/// Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32
10751079
/// global_tid, int proc_bind) to generate code for 'proc_bind' clause.
@@ -1956,7 +1960,9 @@ class CGOpenMPSIMDRuntime final : public CGOpenMPRuntime {
19561960
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
19571961
OpenMPNumThreadsClauseModifier Modifier = OMPC_NUMTHREADS_unknown,
19581962
OpenMPSeverityClauseKind Severity = OMPC_SEVERITY_fatal,
1959-
const Expr *Message = nullptr) override;
1963+
SourceLocation SeverityLoc = SourceLocation(),
1964+
const Expr *Message = nullptr,
1965+
SourceLocation MessageLoc = SourceLocation()) override;
19601966

19611967
/// Emit call to void __kmpc_push_proc_bind(ident_t *loc, kmp_int32
19621968
/// global_tid, int proc_bind) to generate code for 'proc_bind' clause.

clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -899,10 +899,34 @@ void CGOpenMPRuntimeGPU::emitProcBindClause(CodeGenFunction &CGF,
899899
// Nothing to do.
900900
}
901901

902+
llvm::Value *CGOpenMPRuntimeGPU::emitMessageClause(CodeGenFunction &CGF,
903+
const Expr *Message,
904+
SourceLocation Loc) {
905+
CGM.getDiags().Report(Loc, diag::warn_omp_gpu_unsupported_clause)
906+
<< getOpenMPClauseName(OMPC_message);
907+
return nullptr;
908+
}
909+
910+
llvm::Value *
911+
CGOpenMPRuntimeGPU::emitSeverityClause(OpenMPSeverityClauseKind Severity,
912+
SourceLocation Loc) {
913+
CGM.getDiags().Report(Loc, diag::warn_omp_gpu_unsupported_clause)
914+
<< getOpenMPClauseName(OMPC_severity);
915+
return nullptr;
916+
}
917+
902918
void CGOpenMPRuntimeGPU::emitNumThreadsClause(
903919
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
904920
OpenMPNumThreadsClauseModifier Modifier, OpenMPSeverityClauseKind Severity,
905-
const Expr *Message) {
921+
SourceLocation SeverityLoc, const Expr *Message,
922+
SourceLocation MessageLoc) {
923+
if (Modifier == OMPC_NUMTHREADS_strict) {
924+
CGM.getDiags().Report(Loc,
925+
diag::warn_omp_gpu_unsupported_modifier_for_clause)
926+
<< "strict" << getOpenMPClauseName(OMPC_num_threads);
927+
return;
928+
}
929+
906930
// Nothing to do.
907931
}
908932

clang/lib/CodeGen/CGOpenMPRuntimeGPU.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,24 @@ class CGOpenMPRuntimeGPU : public CGOpenMPRuntime {
162162
llvm::omp::ProcBindKind ProcBind,
163163
SourceLocation Loc) override;
164164

165+
// Currently unsupported on the device.
166+
llvm::Value *emitMessageClause(CodeGenFunction &CGF, const Expr *Message,
167+
SourceLocation Loc) override;
168+
169+
// Currently unsupported on the device.
170+
virtual llvm::Value *emitSeverityClause(OpenMPSeverityClauseKind Severity,
171+
SourceLocation Loc) override;
172+
165173
/// Emits call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32
166174
/// global_tid, kmp_int32 num_threads) to generate code for 'num_threads'
167175
/// clause.
168176
void emitNumThreadsClause(
169177
CodeGenFunction &CGF, llvm::Value *NumThreads, SourceLocation Loc,
170178
OpenMPNumThreadsClauseModifier Modifier = OMPC_NUMTHREADS_unknown,
171179
OpenMPSeverityClauseKind Severity = OMPC_SEVERITY_fatal,
172-
const Expr *Message = nullptr) override;
180+
SourceLocation SeverityLoc = SourceLocation(),
181+
const Expr *Message = nullptr,
182+
SourceLocation MessageLoc = SourceLocation()) override;
173183

174184
/// This function ought to emit, in the general case, a call to
175185
// the openmp runtime kmpc_push_num_teams. In NVPTX backend it is not needed

clang/lib/CodeGen/CGStmtOpenMP.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,22 +1622,30 @@ static void emitCommonOMPParallelDirective(
16221622
// if sev-level is fatal."
16231623
OpenMPSeverityClauseKind Severity = OMPC_SEVERITY_fatal;
16241624
clang::Expr *Message = nullptr;
1625+
SourceLocation SeverityLoc = SourceLocation();
1626+
SourceLocation MessageLoc = SourceLocation();
1627+
16251628
llvm::Function *OutlinedFn =
16261629
CGF.CGM.getOpenMPRuntime().emitParallelOutlinedFunction(
16271630
CGF, S, *CS->getCapturedDecl()->param_begin(), InnermostKind,
16281631
CodeGen);
1632+
16291633
if (const auto *NumThreadsClause = S.getSingleClause<OMPNumThreadsClause>()) {
16301634
CodeGenFunction::RunCleanupsScope NumThreadsScope(CGF);
16311635
NumThreads = CGF.EmitScalarExpr(NumThreadsClause->getNumThreads(),
16321636
/*IgnoreResultAssign=*/true);
16331637
Modifier = NumThreadsClause->getModifier();
1634-
if (const auto *MessageClause = S.getSingleClause<OMPMessageClause>())
1638+
if (const auto *MessageClause = S.getSingleClause<OMPMessageClause>()) {
16351639
Message = MessageClause->getMessageString();
1636-
if (const auto *SeverityClause = S.getSingleClause<OMPSeverityClause>())
1640+
MessageLoc = MessageClause->getBeginLoc();
1641+
}
1642+
if (const auto *SeverityClause = S.getSingleClause<OMPSeverityClause>()) {
16371643
Severity = SeverityClause->getSeverityKind();
1644+
SeverityLoc = SeverityClause->getBeginLoc();
1645+
}
16381646
CGF.CGM.getOpenMPRuntime().emitNumThreadsClause(
16391647
CGF, NumThreads, NumThreadsClause->getBeginLoc(), Modifier, Severity,
1640-
Message);
1648+
SeverityLoc, Message, MessageLoc);
16411649
}
16421650
if (const auto *ProcBindClause = S.getSingleClause<OMPProcBindClause>()) {
16431651
CodeGenFunction::RunCleanupsScope ProcBindScope(CGF);

0 commit comments

Comments
 (0)