Skip to content

Commit 25844bb

Browse files
committed
Merge remote-tracking branch 'origin/main' into aballman-gh139267
2 parents 6ea754b + b249b49 commit 25844bb

File tree

70 files changed

+4149
-904
lines changed

Some content is hidden

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

70 files changed

+4149
-904
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,8 @@ OpenMP Support
905905
``partial`` was an invalid expression. (#GH139267)
906906
- Fixed a crashing bug with ``omp tile sizes`` if the argument to ``sizes`` was
907907
an invalid expression. (#GH139073)
908+
- Fixed a crashing bug with ``omp distribute dist_schedule`` if the argument to
909+
``dist_schedule`` was not strictly positive. (#GH139266)
908910

909911
Improvements
910912
^^^^^^^^^^^^

clang/include/clang/AST/OpenMPClause.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9475,15 +9475,17 @@ class ConstOMPClauseVisitor :
94759475
class OMPClausePrinter final : public OMPClauseVisitor<OMPClausePrinter> {
94769476
raw_ostream &OS;
94779477
const PrintingPolicy &Policy;
9478+
unsigned Version;
94789479

94799480
/// Process clauses with list of variables.
94809481
template <typename T> void VisitOMPClauseList(T *Node, char StartSym);
94819482
/// Process motion clauses.
94829483
template <typename T> void VisitOMPMotionClause(T *Node);
94839484

94849485
public:
9485-
OMPClausePrinter(raw_ostream &OS, const PrintingPolicy &Policy)
9486-
: OS(OS), Policy(Policy) {}
9486+
OMPClausePrinter(raw_ostream &OS, const PrintingPolicy &Policy,
9487+
unsigned OpenMPVersion)
9488+
: OS(OS), Policy(Policy), Version(OpenMPVersion) {}
94879489

94889490
#define GEN_CLANG_CLAUSE_CLASS
94899491
#define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *S);

clang/include/clang/CIR/MissingFeatures.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ struct MissingFeatures {
104104
static bool opCallExtParameterInfo() { return false; }
105105
static bool opCallCIRGenFuncInfoParamInfo() { return false; }
106106
static bool opCallCIRGenFuncInfoExtParamInfo() { return false; }
107+
static bool opCallLandingPad() { return false; }
108+
static bool opCallContinueBlock() { return false; }
107109

108110
// ScopeOp handling
109111
static bool opScopeCleanupRegion() { return false; }

clang/lib/AST/DeclPrinter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1827,7 +1827,7 @@ void DeclPrinter::VisitOMPAllocateDecl(OMPAllocateDecl *D) {
18271827
Out << ")";
18281828
}
18291829
if (!D->clauselist_empty()) {
1830-
OMPClausePrinter Printer(Out, Policy);
1830+
OMPClausePrinter Printer(Out, Policy, Context.getLangOpts().OpenMP);
18311831
for (OMPClause *C : D->clauselists()) {
18321832
Out << " ";
18331833
Printer.Visit(C);
@@ -1838,7 +1838,7 @@ void DeclPrinter::VisitOMPAllocateDecl(OMPAllocateDecl *D) {
18381838
void DeclPrinter::VisitOMPRequiresDecl(OMPRequiresDecl *D) {
18391839
Out << "#pragma omp requires ";
18401840
if (!D->clauselist_empty()) {
1841-
OMPClausePrinter Printer(Out, Policy);
1841+
OMPClausePrinter Printer(Out, Policy, Context.getLangOpts().OpenMP);
18421842
for (auto I = D->clauselist_begin(), E = D->clauselist_end(); I != E; ++I)
18431843
Printer.Visit(*I);
18441844
}
@@ -1891,7 +1891,7 @@ void DeclPrinter::VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D) {
18911891
Out << D->getVarName();
18921892
Out << ")";
18931893
if (!D->clauselist_empty()) {
1894-
OMPClausePrinter Printer(Out, Policy);
1894+
OMPClausePrinter Printer(Out, Policy, Context.getLangOpts().OpenMP);
18951895
for (auto *C : D->clauselists()) {
18961896
Out << " ";
18971897
Printer.Visit(C);

clang/lib/AST/OpenMPClause.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,7 +1821,7 @@ OMPThreadLimitClause *OMPThreadLimitClause::CreateEmpty(const ASTContext &C,
18211821
void OMPClausePrinter::VisitOMPIfClause(OMPIfClause *Node) {
18221822
OS << "if(";
18231823
if (Node->getNameModifier() != OMPD_unknown)
1824-
OS << getOpenMPDirectiveName(Node->getNameModifier()) << ": ";
1824+
OS << getOpenMPDirectiveName(Node->getNameModifier(), Version) << ": ";
18251825
Node->getCondition()->printPretty(OS, nullptr, Policy, 0);
18261826
OS << ")";
18271827
}
@@ -2049,7 +2049,7 @@ void OMPClausePrinter::VisitOMPAbsentClause(OMPAbsentClause *Node) {
20492049
for (auto &D : Node->getDirectiveKinds()) {
20502050
if (!First)
20512051
OS << ", ";
2052-
OS << getOpenMPDirectiveName(D);
2052+
OS << getOpenMPDirectiveName(D, Version);
20532053
First = false;
20542054
}
20552055
OS << ")";
@@ -2067,7 +2067,7 @@ void OMPClausePrinter::VisitOMPContainsClause(OMPContainsClause *Node) {
20672067
for (auto &D : Node->getDirectiveKinds()) {
20682068
if (!First)
20692069
OS << ", ";
2070-
OS << getOpenMPDirectiveName(D);
2070+
OS << getOpenMPDirectiveName(D, Version);
20712071
First = false;
20722072
}
20732073
OS << ")";

clang/lib/AST/StmtPrinter.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,9 @@ void StmtPrinter::VisitOMPCanonicalLoop(OMPCanonicalLoop *Node) {
737737

738738
void StmtPrinter::PrintOMPExecutableDirective(OMPExecutableDirective *S,
739739
bool ForceNoStmt) {
740-
OMPClausePrinter Printer(OS, Policy);
740+
unsigned OpenMPVersion =
741+
Context ? Context->getLangOpts().OpenMP : llvm::omp::FallbackVersion;
742+
OMPClausePrinter Printer(OS, Policy, OpenMPVersion);
741743
ArrayRef<OMPClause *> Clauses = S->clauses();
742744
for (auto *Clause : Clauses)
743745
if (Clause && !Clause->isImplicit()) {
@@ -964,14 +966,18 @@ void StmtPrinter::VisitOMPTeamsDirective(OMPTeamsDirective *Node) {
964966

965967
void StmtPrinter::VisitOMPCancellationPointDirective(
966968
OMPCancellationPointDirective *Node) {
969+
unsigned OpenMPVersion =
970+
Context ? Context->getLangOpts().OpenMP : llvm::omp::FallbackVersion;
967971
Indent() << "#pragma omp cancellation point "
968-
<< getOpenMPDirectiveName(Node->getCancelRegion());
972+
<< getOpenMPDirectiveName(Node->getCancelRegion(), OpenMPVersion);
969973
PrintOMPExecutableDirective(Node);
970974
}
971975

972976
void StmtPrinter::VisitOMPCancelDirective(OMPCancelDirective *Node) {
977+
unsigned OpenMPVersion =
978+
Context ? Context->getLangOpts().OpenMP : llvm::omp::FallbackVersion;
973979
Indent() << "#pragma omp cancel "
974-
<< getOpenMPDirectiveName(Node->getCancelRegion());
980+
<< getOpenMPDirectiveName(Node->getCancelRegion(), OpenMPVersion);
975981
PrintOMPExecutableDirective(Node);
976982
}
977983

clang/lib/Basic/OpenMPKinds.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,8 @@ void clang::getOpenMPCaptureRegions(
850850
case OMPD_master:
851851
return false;
852852
default:
853-
llvm::errs() << getOpenMPDirectiveName(LKind) << '\n';
853+
llvm::errs() << getOpenMPDirectiveName(LKind, llvm::omp::FallbackVersion)
854+
<< '\n';
854855
llvm_unreachable("Unexpected directive");
855856
}
856857
return false;

clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,50 @@ mlir::LogicalResult CIRToLLVMReturnOpLowering::matchAndRewrite(
651651
return mlir::LogicalResult::success();
652652
}
653653

654+
static mlir::LogicalResult
655+
rewriteCallOrInvoke(mlir::Operation *op, mlir::ValueRange callOperands,
656+
mlir::ConversionPatternRewriter &rewriter,
657+
const mlir::TypeConverter *converter,
658+
mlir::FlatSymbolRefAttr calleeAttr) {
659+
llvm::SmallVector<mlir::Type, 8> llvmResults;
660+
mlir::ValueTypeRange<mlir::ResultRange> cirResults = op->getResultTypes();
661+
662+
if (converter->convertTypes(cirResults, llvmResults).failed())
663+
return mlir::failure();
664+
665+
assert(!cir::MissingFeatures::opCallCallConv());
666+
assert(!cir::MissingFeatures::opCallSideEffect());
667+
668+
mlir::LLVM::LLVMFunctionType llvmFnTy;
669+
if (calleeAttr) { // direct call
670+
mlir::FunctionOpInterface fn =
671+
mlir::SymbolTable::lookupNearestSymbolFrom<mlir::FunctionOpInterface>(
672+
op, calleeAttr);
673+
assert(fn && "Did not find function for call");
674+
llvmFnTy = cast<mlir::LLVM::LLVMFunctionType>(
675+
converter->convertType(fn.getFunctionType()));
676+
} else { // indirect call
677+
assert(!cir::MissingFeatures::opCallIndirect());
678+
return op->emitError("Indirect calls are NYI");
679+
}
680+
681+
assert(!cir::MissingFeatures::opCallLandingPad());
682+
assert(!cir::MissingFeatures::opCallContinueBlock());
683+
assert(!cir::MissingFeatures::opCallCallConv());
684+
assert(!cir::MissingFeatures::opCallSideEffect());
685+
686+
rewriter.replaceOpWithNewOp<mlir::LLVM::CallOp>(op, llvmFnTy, calleeAttr,
687+
callOperands);
688+
return mlir::success();
689+
}
690+
691+
mlir::LogicalResult CIRToLLVMCallOpLowering::matchAndRewrite(
692+
cir::CallOp op, OpAdaptor adaptor,
693+
mlir::ConversionPatternRewriter &rewriter) const {
694+
return rewriteCallOrInvoke(op.getOperation(), adaptor.getOperands(), rewriter,
695+
getTypeConverter(), op.getCalleeAttr());
696+
}
697+
654698
mlir::LogicalResult CIRToLLVMLoadOpLowering::matchAndRewrite(
655699
cir::LoadOp op, OpAdaptor adaptor,
656700
mlir::ConversionPatternRewriter &rewriter) const {
@@ -1589,6 +1633,7 @@ void ConvertCIRToLLVMPass::runOnOperation() {
15891633
CIRToLLVMBinOpLowering,
15901634
CIRToLLVMBrCondOpLowering,
15911635
CIRToLLVMBrOpLowering,
1636+
CIRToLLVMCallOpLowering,
15921637
CIRToLLVMCmpOpLowering,
15931638
CIRToLLVMConstantOpLowering,
15941639
CIRToLLVMFuncOpLowering,

clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,15 @@ class CIRToLLVMReturnOpLowering
6464
mlir::ConversionPatternRewriter &) const override;
6565
};
6666

67+
class CIRToLLVMCallOpLowering : public mlir::OpConversionPattern<cir::CallOp> {
68+
public:
69+
using mlir::OpConversionPattern<cir::CallOp>::OpConversionPattern;
70+
71+
mlir::LogicalResult
72+
matchAndRewrite(cir::CallOp op, OpAdaptor adaptor,
73+
mlir::ConversionPatternRewriter &rewriter) const override;
74+
};
75+
6776
class CIRToLLVMAllocaOpLowering
6877
: public mlir::OpConversionPattern<cir::AllocaOp> {
6978
mlir::DataLayout const &dataLayout;

0 commit comments

Comments
 (0)