Skip to content

Commit 40612bd

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:5ecce45ea298 into amd-gfx:6bc5341daabb
Local branch amd-gfx 6bc5341 Merged main:74cb1f9f51e5 into amd-gfx:437902434321 Remote branch main 5ecce45 [SandboxVec] Move seed collection into its own separate pass (llvm#127132)
2 parents 6bc5341 + 5ecce45 commit 40612bd

File tree

92 files changed

+1447
-687
lines changed

Some content is hidden

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

92 files changed

+1447
-687
lines changed

.github/workflows/libcxx-build-and-test.yaml

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
stage1:
3838
if: github.repository_owner == 'llvm'
3939
runs-on: libcxx-self-hosted-linux
40-
container: ghcr.io/llvm/libcxx-linux-builder:d8a0709b1090350a7fe3604d8ab78c7d62f10698
40+
container: ghcr.io/llvm/libcxx-linux-builder:b319dfef21f6c7b0bc6a356d6b9f41a3b3b98ae9
4141
continue-on-error: false
4242
strategy:
4343
fail-fast: false
@@ -48,8 +48,8 @@ jobs:
4848
'generic-cxx26',
4949
'generic-modules'
5050
]
51-
cc: [ 'clang-20' ]
52-
cxx: [ 'clang++-20' ]
51+
cc: [ 'clang-21' ]
52+
cxx: [ 'clang++-21' ]
5353
include:
5454
- config: 'generic-gcc'
5555
cc: 'gcc-14'
@@ -75,7 +75,7 @@ jobs:
7575
stage2:
7676
if: github.repository_owner == 'llvm'
7777
runs-on: libcxx-self-hosted-linux
78-
container: ghcr.io/llvm/libcxx-linux-builder:d8a0709b1090350a7fe3604d8ab78c7d62f10698
78+
container: ghcr.io/llvm/libcxx-linux-builder:b319dfef21f6c7b0bc6a356d6b9f41a3b3b98ae9
7979
needs: [ stage1 ]
8080
continue-on-error: false
8181
strategy:
@@ -88,18 +88,22 @@ jobs:
8888
'generic-cxx20',
8989
'generic-cxx23'
9090
]
91-
cc: [ 'clang-20' ]
92-
cxx: [ 'clang++-20' ]
91+
cc: [ 'clang-21' ]
92+
cxx: [ 'clang++-21' ]
9393
include:
9494
- config: 'generic-gcc-cxx11'
9595
cc: 'gcc-14'
9696
cxx: 'g++-14'
97-
- config: 'generic-cxx23'
98-
cc: 'clang-18'
99-
cxx: 'clang++-18'
97+
- config: 'generic-cxx26'
98+
cc: 'clang-20'
99+
cxx: 'clang++-20'
100100
- config: 'generic-cxx26'
101101
cc: 'clang-19'
102102
cxx: 'clang++-19'
103+
# Release transition
104+
- config: 'generic-cxx23'
105+
cc: 'clang-18'
106+
cxx: 'clang++-18'
103107
steps:
104108
- uses: actions/checkout@v4
105109
- name: ${{ matrix.config }}
@@ -163,14 +167,14 @@ jobs:
163167
- config: 'generic-msan'
164168
machine: libcxx-self-hosted-linux
165169
runs-on: ${{ matrix.machine }}
166-
container: ghcr.io/llvm/libcxx-linux-builder:d8a0709b1090350a7fe3604d8ab78c7d62f10698
170+
container: ghcr.io/llvm/libcxx-linux-builder:b319dfef21f6c7b0bc6a356d6b9f41a3b3b98ae9
167171
steps:
168172
- uses: actions/checkout@v4
169173
- name: ${{ matrix.config }}
170174
run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
171175
env:
172-
CC: clang-20
173-
CXX: clang++-20
176+
CC: clang-21
177+
CXX: clang++-21
174178
- uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
175179
if: always()
176180
with:

clang/lib/AST/ASTContext.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3898,7 +3898,8 @@ QualType ASTContext::getArrayParameterType(QualType Ty) const {
38983898
if (Ty->isArrayParameterType())
38993899
return Ty;
39003900
assert(Ty->isConstantArrayType() && "Ty must be an array type.");
3901-
const auto *ATy = cast<ConstantArrayType>(Ty.getDesugaredType(*this));
3901+
QualType DTy = Ty.getDesugaredType(*this);
3902+
const auto *ATy = cast<ConstantArrayType>(DTy);
39023903
llvm::FoldingSetNodeID ID;
39033904
ATy->Profile(ID, *this, ATy->getElementType(), ATy->getZExtSize(),
39043905
ATy->getSizeExpr(), ATy->getSizeModifier(),
@@ -3910,7 +3911,7 @@ QualType ASTContext::getArrayParameterType(QualType Ty) const {
39103911
return QualType(AT, 0);
39113912

39123913
QualType Canonical;
3913-
if (!Ty.isCanonical()) {
3914+
if (!DTy.isCanonical()) {
39143915
Canonical = getArrayParameterType(getCanonicalType(Ty));
39153916

39163917
// Get the new insert position for the node we care about.

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8879,17 +8879,17 @@ static void emitOffloadingArraysAndArgs(
88798879
};
88808880

88818881
auto CustomMapperCB = [&](unsigned int I) {
8882-
llvm::Value *MFunc = nullptr;
8882+
llvm::Function *MFunc = nullptr;
88838883
if (CombinedInfo.Mappers[I]) {
88848884
Info.HasMapper = true;
88858885
MFunc = CGM.getOpenMPRuntime().getOrCreateUserDefinedMapperFunc(
88868886
cast<OMPDeclareMapperDecl>(CombinedInfo.Mappers[I]));
88878887
}
88888888
return MFunc;
88898889
};
8890-
OMPBuilder.emitOffloadingArraysAndArgs(
8891-
AllocaIP, CodeGenIP, Info, Info.RTArgs, CombinedInfo, IsNonContiguous,
8892-
ForEndCall, DeviceAddrCB, CustomMapperCB);
8890+
cantFail(OMPBuilder.emitOffloadingArraysAndArgs(
8891+
AllocaIP, CodeGenIP, Info, Info.RTArgs, CombinedInfo, CustomMapperCB,
8892+
IsNonContiguous, ForEndCall, DeviceAddrCB));
88938893
}
88948894

88958895
/// Check for inner distribute directive.
@@ -9082,24 +9082,24 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
90829082
return CombinedInfo;
90839083
};
90849084

9085-
auto CustomMapperCB = [&](unsigned I, llvm::Function **MapperFunc) {
9085+
auto CustomMapperCB = [&](unsigned I) {
9086+
llvm::Function *MapperFunc = nullptr;
90869087
if (CombinedInfo.Mappers[I]) {
90879088
// Call the corresponding mapper function.
9088-
*MapperFunc = getOrCreateUserDefinedMapperFunc(
9089+
MapperFunc = getOrCreateUserDefinedMapperFunc(
90899090
cast<OMPDeclareMapperDecl>(CombinedInfo.Mappers[I]));
9090-
assert(*MapperFunc && "Expect a valid mapper function is available.");
9091-
return true;
9091+
assert(MapperFunc && "Expect a valid mapper function is available.");
90929092
}
9093-
return false;
9093+
return MapperFunc;
90949094
};
90959095

90969096
SmallString<64> TyStr;
90979097
llvm::raw_svector_ostream Out(TyStr);
90989098
CGM.getCXXABI().getMangleContext().mangleCanonicalTypeName(Ty, Out);
90999099
std::string Name = getName({"omp_mapper", TyStr, D->getName()});
91009100

9101-
auto *NewFn = OMPBuilder.emitUserDefinedMapper(PrivatizeAndGenMapInfoCB,
9102-
ElemTy, Name, CustomMapperCB);
9101+
llvm::Function *NewFn = cantFail(OMPBuilder.emitUserDefinedMapper(
9102+
PrivatizeAndGenMapInfoCB, ElemTy, Name, CustomMapperCB));
91039103
UDMMap.try_emplace(D, NewFn);
91049104
if (CGF)
91059105
FunctionUDMMap[CGF->CurFn].push_back(D);
@@ -10073,7 +10073,7 @@ void CGOpenMPRuntime::emitTargetDataCalls(
1007310073
};
1007410074

1007510075
auto CustomMapperCB = [&](unsigned int I) {
10076-
llvm::Value *MFunc = nullptr;
10076+
llvm::Function *MFunc = nullptr;
1007710077
if (CombinedInfo.Mappers[I]) {
1007810078
Info.HasMapper = true;
1007910079
MFunc = CGF.CGM.getOpenMPRuntime().getOrCreateUserDefinedMapperFunc(
@@ -10093,7 +10093,8 @@ void CGOpenMPRuntime::emitTargetDataCalls(
1009310093
llvm::OpenMPIRBuilder::InsertPointTy AfterIP =
1009410094
cantFail(OMPBuilder.createTargetData(
1009510095
OmpLoc, AllocaIP, CodeGenIP, DeviceID, IfCondVal, Info, GenMapInfoCB,
10096-
/*MapperFunc=*/nullptr, BodyCB, DeviceAddrCB, CustomMapperCB, RTLoc));
10096+
CustomMapperCB,
10097+
/*MapperFunc=*/nullptr, BodyCB, DeviceAddrCB, RTLoc));
1009710098
CGF.Builder.restoreIP(AfterIP);
1009810099
}
1009910100

clang/test/AST/HLSL/TypdefArrayParam.hlsl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,14 @@ void call2() {
5555
uint4 C[2] = {A,A};
5656
uint32_t D = Accumulate(C);
5757
}
58+
59+
typedef int Foo[2];
60+
61+
// CHECK-LABEL: call3
62+
// CHECK: ArraySubscriptExpr {{.*}} 'int' lvalue
63+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int *' <ArrayToPointerDecay>
64+
// CHECK-NEXT: DeclRefExpr {{.*}} 'int[2]' lvalue ParmVar {{.*}} 'F' 'int[2]'
65+
// CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0
66+
int call3(Foo F) {
67+
return F[0];
68+
}

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -969,8 +969,11 @@ void ClauseProcessor::processMapObjects(
969969
llvm::omp::OpenMPOffloadMappingFlags mapTypeBits,
970970
std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
971971
llvm::SmallVectorImpl<mlir::Value> &mapVars,
972-
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms) const {
972+
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
973+
llvm::StringRef mapperIdNameRef) const {
973974
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
975+
mlir::FlatSymbolRefAttr mapperId;
976+
std::string mapperIdName = mapperIdNameRef.str();
974977

975978
for (const omp::Object &object : objects) {
976979
llvm::SmallVector<mlir::Value> bounds;
@@ -1003,6 +1006,20 @@ void ClauseProcessor::processMapObjects(
10031006
}
10041007
}
10051008

1009+
if (!mapperIdName.empty()) {
1010+
if (mapperIdName == "default") {
1011+
auto &typeSpec = object.sym()->owner().IsDerivedType()
1012+
? *object.sym()->owner().derivedTypeSpec()
1013+
: object.sym()->GetType()->derivedTypeSpec();
1014+
mapperIdName = typeSpec.name().ToString() + ".default";
1015+
mapperIdName = converter.mangleName(mapperIdName, *typeSpec.GetScope());
1016+
}
1017+
assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
1018+
"mapper not found");
1019+
mapperId = mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
1020+
mapperIdName);
1021+
mapperIdName.clear();
1022+
}
10061023
// Explicit map captures are captured ByRef by default,
10071024
// optimisation passes may alter this to ByCopy or other capture
10081025
// types to optimise
@@ -1016,7 +1033,8 @@ void ClauseProcessor::processMapObjects(
10161033
static_cast<
10171034
std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
10181035
mapTypeBits),
1019-
mlir::omp::VariableCaptureKind::ByRef, baseOp.getType());
1036+
mlir::omp::VariableCaptureKind::ByRef, baseOp.getType(),
1037+
/*partialMap=*/false, mapperId);
10201038

10211039
if (parentObj.has_value()) {
10221040
parentMemberIndices[parentObj.value()].addChildIndexAndMapToParent(
@@ -1047,6 +1065,7 @@ bool ClauseProcessor::processMap(
10471065
const auto &[mapType, typeMods, mappers, iterator, objects] = clause.t;
10481066
llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
10491067
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE;
1068+
std::string mapperIdName;
10501069
// If the map type is specified, then process it else Tofrom is the
10511070
// default.
10521071
Map::MapType type = mapType.value_or(Map::MapType::Tofrom);
@@ -1090,13 +1109,17 @@ bool ClauseProcessor::processMap(
10901109
"Support for iterator modifiers is not implemented yet");
10911110
}
10921111
if (mappers) {
1093-
TODO(currentLocation,
1094-
"Support for mapper modifiers is not implemented yet");
1112+
assert(mappers->size() == 1 && "more than one mapper");
1113+
mapperIdName = mappers->front().v.id().symbol->name().ToString();
1114+
if (mapperIdName != "default")
1115+
mapperIdName = converter.mangleName(
1116+
mapperIdName, mappers->front().v.id().symbol->owner());
10951117
}
10961118

10971119
processMapObjects(stmtCtx, clauseLocation,
10981120
std::get<omp::ObjectList>(clause.t), mapTypeBits,
1099-
parentMemberIndices, result.mapVars, *ptrMapSyms);
1121+
parentMemberIndices, result.mapVars, *ptrMapSyms,
1122+
mapperIdName);
11001123
};
11011124

11021125
bool clauseFound = findRepeatableClause<omp::clause::Map>(process);

flang/lib/Lower/OpenMP/ClauseProcessor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ class ClauseProcessor {
175175
llvm::omp::OpenMPOffloadMappingFlags mapTypeBits,
176176
std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
177177
llvm::SmallVectorImpl<mlir::Value> &mapVars,
178-
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms) const;
178+
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
179+
llvm::StringRef mapperIdNameRef = "") const;
179180

180181
lower::AbstractConverter &converter;
181182
semantics::SemanticsContext &semaCtx;

flang/lib/Lower/OpenMP/Utils.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ createMapInfoOp(fir::FirOpBuilder &builder, mlir::Location loc,
125125
llvm::ArrayRef<mlir::Value> members,
126126
mlir::ArrayAttr membersIndex, uint64_t mapType,
127127
mlir::omp::VariableCaptureKind mapCaptureType, mlir::Type retTy,
128-
bool partialMap) {
128+
bool partialMap, mlir::FlatSymbolRefAttr mapperId) {
129129
if (auto boxTy = llvm::dyn_cast<fir::BaseBoxType>(baseAddr.getType())) {
130130
baseAddr = builder.create<fir::BoxAddrOp>(loc, baseAddr);
131131
retTy = baseAddr.getType();
@@ -144,6 +144,7 @@ createMapInfoOp(fir::FirOpBuilder &builder, mlir::Location loc,
144144
mlir::omp::MapInfoOp op = builder.create<mlir::omp::MapInfoOp>(
145145
loc, retTy, baseAddr, varType, varPtrPtr, members, membersIndex, bounds,
146146
builder.getIntegerAttr(builder.getIntegerType(64, false), mapType),
147+
mapperId,
147148
builder.getAttr<mlir::omp::VariableCaptureKindAttr>(mapCaptureType),
148149
builder.getStringAttr(name), builder.getBoolAttr(partialMap));
149150
return op;

flang/lib/Lower/OpenMP/Utils.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ createMapInfoOp(fir::FirOpBuilder &builder, mlir::Location loc,
116116
llvm::ArrayRef<mlir::Value> members,
117117
mlir::ArrayAttr membersIndex, uint64_t mapType,
118118
mlir::omp::VariableCaptureKind mapCaptureType, mlir::Type retTy,
119-
bool partialMap = false);
119+
bool partialMap = false,
120+
mlir::FlatSymbolRefAttr mapperId = mlir::FlatSymbolRefAttr());
120121

121122
void insertChildMapInfoIntoParent(
122123
Fortran::lower::AbstractConverter &converter,

flang/lib/Optimizer/OpenMP/MapInfoFinalization.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ class MapInfoFinalizationPass
184184
/*members=*/mlir::SmallVector<mlir::Value>{},
185185
/*membersIndex=*/mlir::ArrayAttr{}, bounds,
186186
builder.getIntegerAttr(builder.getIntegerType(64, false), mapType),
187+
/*mapperId*/ mlir::FlatSymbolRefAttr(),
187188
builder.getAttr<mlir::omp::VariableCaptureKindAttr>(
188189
mlir::omp::VariableCaptureKind::ByRef),
189190
/*name=*/builder.getStringAttr(""),
@@ -329,7 +330,8 @@ class MapInfoFinalizationPass
329330
builder.getIntegerAttr(
330331
builder.getIntegerType(64, false),
331332
getDescriptorMapType(op.getMapType().value_or(0), target)),
332-
op.getMapCaptureTypeAttr(), op.getNameAttr(),
333+
/*mapperId*/ mlir::FlatSymbolRefAttr(), op.getMapCaptureTypeAttr(),
334+
op.getNameAttr(),
333335
/*partial_map=*/builder.getBoolAttr(false));
334336
op.replaceAllUsesWith(newDescParentMapOp.getResult());
335337
op->erase();
@@ -623,6 +625,7 @@ class MapInfoFinalizationPass
623625
/*members=*/mlir::ValueRange{},
624626
/*members_index=*/mlir::ArrayAttr{},
625627
/*bounds=*/bounds, op.getMapTypeAttr(),
628+
/*mapperId*/ mlir::FlatSymbolRefAttr(),
626629
builder.getAttr<mlir::omp::VariableCaptureKindAttr>(
627630
mlir::omp::VariableCaptureKind::ByRef),
628631
builder.getStringAttr(op.getNameAttr().strref() + "." +

flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class MapsForPrivatizedSymbolsPass
9191
/*bounds=*/ValueRange{},
9292
builder.getIntegerAttr(builder.getIntegerType(64, /*isSigned=*/false),
9393
mapTypeTo),
94+
/*mapperId*/ mlir::FlatSymbolRefAttr(),
9495
builder.getAttr<omp::VariableCaptureKindAttr>(
9596
omp::VariableCaptureKind::ByRef),
9697
StringAttr(), builder.getBoolAttr(false));

0 commit comments

Comments
 (0)