Skip to content

Commit 83d34f8

Browse files
authored
Merge branch 'main' into reg-hint-avoid-hazard
2 parents 6963db4 + c580ad4 commit 83d34f8

File tree

106 files changed

+49919
-44515
lines changed

Some content is hidden

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

106 files changed

+49919
-44515
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/include/clang/CodeGen/BackendUtil.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void EmbedBitcode(llvm::Module *M, const CodeGenOptions &CGOpts,
4949
llvm::MemoryBufferRef Buf);
5050

5151
void EmbedObject(llvm::Module *M, const CodeGenOptions &CGOpts,
52-
DiagnosticsEngine &Diags);
52+
llvm::vfs::FileSystem &VFS, DiagnosticsEngine &Diags);
5353
} // namespace clang
5454

5555
#endif

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,13 +1476,13 @@ void clang::EmbedBitcode(llvm::Module *M, const CodeGenOptions &CGOpts,
14761476
}
14771477

14781478
void clang::EmbedObject(llvm::Module *M, const CodeGenOptions &CGOpts,
1479-
DiagnosticsEngine &Diags) {
1479+
llvm::vfs::FileSystem &VFS, DiagnosticsEngine &Diags) {
14801480
if (CGOpts.OffloadObjects.empty())
14811481
return;
14821482

14831483
for (StringRef OffloadObject : CGOpts.OffloadObjects) {
14841484
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> ObjectOrErr =
1485-
llvm::MemoryBuffer::getFileOrSTDIN(OffloadObject);
1485+
VFS.getBufferForFile(OffloadObject);
14861486
if (ObjectOrErr.getError()) {
14871487
auto DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
14881488
"could not open '%0' for embedding");

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);

clang/lib/CodeGen/CodeGenAction.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,8 @@ void CodeGenAction::ExecuteAction() {
11411141
TheModule->setTargetTriple(Triple(TargetOpts.Triple));
11421142
}
11431143

1144-
EmbedObject(TheModule.get(), CodeGenOpts, Diagnostics);
1144+
EmbedObject(TheModule.get(), CodeGenOpts, CI.getVirtualFileSystem(),
1145+
Diagnostics);
11451146
EmbedBitcode(TheModule.get(), CodeGenOpts, *MainFile);
11461147

11471148
LLVMContext &Ctx = TheModule->getContext();

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,7 @@ void CodeGenModule::Release() {
15561556
EmitBackendOptionsMetadata(getCodeGenOpts());
15571557

15581558
// If there is device offloading code embed it in the host now.
1559-
EmbedObject(&getModule(), CodeGenOpts, getDiags());
1559+
EmbedObject(&getModule(), CodeGenOpts, *getFileSystem(), getDiags());
15601560

15611561
// Set visibility from DLL storage class
15621562
// We do this at the end of LLVM IR generation; after any operation

0 commit comments

Comments
 (0)