Skip to content

Commit 38a7418

Browse files
committed
Merge remote-tracking branch 'origin/SYCLomatic' into mig_cu
2 parents c2cee3f + 8f31872 commit 38a7418

68 files changed

Lines changed: 1190 additions & 392 deletions

File tree

Some content is hidden

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

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ in daily releases. None of the branches in the project are stable or rigorously
2727
tested for production quality control, so the quality of these releases is
2828
expected to be similar to the daily releases.
2929

30-
SYCLomatic supports migrating programs implemented with CUDA versions 8.0, 9.x, 10.x, 11.x, 12.0-12.8. The list of supported languages and versions may be extended in the future.
30+
SYCLomatic supports migrating programs implemented with CUDA versions 8.0, 9.x, 10.x, 11.x, 12.0-12.9. The list of supported languages and versions may be extended in the future.
3131

3232
## Build from source code
3333
### Prerequisites

clang/include/clang/Basic/Cuda.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,16 @@ enum class CudaVersion {
5050
CUDA_126,
5151
CUDA_128,
5252
#ifdef SYCLomatic_CUSTOMIZATION
53-
FULLY_SUPPORTED = CUDA_126,
53+
CUDA_129,
54+
FULLY_SUPPORTED = CUDA_123,
55+
PARTIALLY_SUPPORTED =
56+
CUDA_129, // Partially supported. Proceed with a warning.
5457
#else
5558
FULLY_SUPPORTED = CUDA_123,
56-
#endif
5759
PARTIALLY_SUPPORTED =
5860
CUDA_128, // Partially supported. Proceed with a warning.
59-
NEW = 10000, // Too new. Issue a warning, but allow using it.
61+
#endif
62+
NEW = 10000, // Too new. Issue a warning, but allow using it.
6063
};
6164
const char *CudaVersionToString(CudaVersion V);
6265
#ifdef SYCLomatic_CUSTOMIZATION

clang/lib/Basic/Cuda.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ static const CudaVersionMapEntry CudaNameVersionMap[] = {
4545
CUDA_ENTRY(12, 5),
4646
CUDA_ENTRY(12, 6),
4747
CUDA_ENTRY(12, 8),
48+
#ifdef SYCLomatic_CUSTOMIZATION
49+
CUDA_ENTRY(12, 9),
50+
#endif
4851
{"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
4952
{"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
5053
};

clang/lib/DPCT/AnalysisInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2544,7 +2544,8 @@ std::vector<std::pair<std::string, std::vector<std::string>>>
25442544
std::unordered_set<std::string> DpctGlobalInfo::NeedParenAPISet = {};
25452545
std::unordered_set<std::string>
25462546
DpctGlobalInfo::CustomHelperFunctionAddtionalIncludes = {};
2547-
std::unordered_map<clang::tooling::UnifiedPath, std::bitset<32>>
2547+
std::unordered_map<clang::tooling::UnifiedPath,
2548+
std::bitset<HeaderType::NUM_HEADERS>>
25482549
DpctGlobalInfo::HeaderInsertedBitMap = {};
25492550
///// class DpctNameGenerator /////
25502551
void DpctNameGenerator::printName(const FunctionDecl *FD,

clang/lib/DPCT/AnalysisInfo.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,7 +1393,8 @@ class DpctGlobalInfo {
13931393
getCustomHelperFunctionAddtionalIncludes() {
13941394
return CustomHelperFunctionAddtionalIncludes;
13951395
}
1396-
static std::unordered_map<clang::tooling::UnifiedPath, std::bitset<32>> &
1396+
static std::unordered_map<clang::tooling::UnifiedPath,
1397+
std::bitset<HeaderType::NUM_HEADERS>> &
13971398
getHeaderInsertedBitMap() {
13981399
return HeaderInsertedBitMap;
13991400
}
@@ -1722,7 +1723,8 @@ class DpctGlobalInfo {
17221723
CodePinDumpFuncDepsVec;
17231724
static std::unordered_set<std::string> NeedParenAPISet;
17241725
static std::unordered_set<std::string> CustomHelperFunctionAddtionalIncludes;
1725-
static std::unordered_map<clang::tooling::UnifiedPath, std::bitset<32>>
1726+
static std::unordered_map<clang::tooling::UnifiedPath,
1727+
std::bitset<HeaderType::NUM_HEADERS>>
17261728
HeaderInsertedBitMap;
17271729
};
17281730

clang/lib/DPCT/RuleInfra/CallExprRewriter.h

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,24 +1038,18 @@ template <class NameT> class TypeNamePrinter {
10381038
}
10391039
};
10401040

1041-
template <class BaseT, class MemberT, bool HasExplicitTemplateArg>
1041+
template <class BaseT, class MemberT, bool NeedDisambiguator>
10421042
class MemberExprPrinter {
10431043
BaseT Base;
10441044
bool IsArrow;
10451045
MemberT MemberName;
1046-
bool IsBaseDependentType = false;
10471046

10481047
public:
10491048
MemberExprPrinter(const BaseT &Base, bool IsArrow, MemberT MemberName)
1050-
: Base(Base), IsArrow(IsArrow), MemberName(MemberName) {
1051-
if constexpr (std::is_same_v<BaseT, const Expr *>) {
1052-
IsBaseDependentType = Base->getType()->isDependentType();
1053-
}
1054-
}
1049+
: Base(Base), IsArrow(IsArrow), MemberName(MemberName) {}
10551050

10561051
template <class StreamT> void print(StreamT &Stream) const {
1057-
printBase(Stream, Base, IsArrow,
1058-
HasExplicitTemplateArg && IsBaseDependentType);
1052+
printBase(Stream, Base, IsArrow, NeedDisambiguator);
10591053
dpct::print(Stream, MemberName);
10601054
}
10611055
};
@@ -1074,19 +1068,17 @@ template <class BaseT, class MemberT> class StaticMemberExprPrinter {
10741068
}
10751069
};
10761070

1077-
template <class BaseT, class MemberT, bool HasExplicitTemplateArg,
1071+
template <class BaseT, class MemberT, bool NeedDisambiguator,
10781072
class... CallArgsT>
10791073
class MemberCallPrinter
10801074
: public CallExprPrinter<
1081-
MemberExprPrinter<BaseT, MemberT, HasExplicitTemplateArg>,
1082-
CallArgsT...> {
1075+
MemberExprPrinter<BaseT, MemberT, NeedDisambiguator>, CallArgsT...> {
10831076
public:
10841077
MemberCallPrinter(const BaseT &Base, bool IsArrow, MemberT MemberName,
10851078
CallArgsT &&...Args)
1086-
: CallExprPrinter<
1087-
MemberExprPrinter<BaseT, MemberT, HasExplicitTemplateArg>,
1088-
CallArgsT...>(
1089-
MemberExprPrinter<BaseT, MemberT, HasExplicitTemplateArg>(
1079+
: CallExprPrinter<MemberExprPrinter<BaseT, MemberT, NeedDisambiguator>,
1080+
CallArgsT...>(
1081+
MemberExprPrinter<BaseT, MemberT, NeedDisambiguator>(
10901082
std::move(Base), IsArrow, std::move(MemberName)),
10911083
std::forward<CallArgsT>(Args)...) {}
10921084
};
@@ -1451,25 +1443,25 @@ class MemberExprRewriter
14511443
C, Source, BaseCreator(C), IsArrow, MemberCreator(C)) {}
14521444
};
14531445

1454-
template <class BaseT, bool HasExplicitTemplateArg, class... ArgsT>
1446+
template <class BaseT, bool NeedDisambiguator, class... ArgsT>
14551447
class MemberCallExprRewriter
1456-
: public PrinterRewriter<MemberCallPrinter<
1457-
BaseT, StringRef, HasExplicitTemplateArg, ArgsT...>> {
1448+
: public PrinterRewriter<
1449+
MemberCallPrinter<BaseT, StringRef, NeedDisambiguator, ArgsT...>> {
14581450
public:
14591451
MemberCallExprRewriter(
14601452
const CallExpr *C, StringRef Source,
14611453
const std::function<BaseT(const CallExpr *)> &BaseCreator, bool IsArrow,
14621454
StringRef Member,
14631455
const std::function<ArgsT(const CallExpr *)> &...ArgsCreator)
1464-
: PrinterRewriter<MemberCallPrinter<BaseT, StringRef,
1465-
HasExplicitTemplateArg, ArgsT...>>(
1456+
: PrinterRewriter<
1457+
MemberCallPrinter<BaseT, StringRef, NeedDisambiguator, ArgsT...>>(
14661458
C, Source, BaseCreator(C), IsArrow, Member, ArgsCreator(C)...) {}
14671459
MemberCallExprRewriter(
14681460
const CallExpr *C, StringRef Source, const BaseT &BaseCreator,
14691461
bool IsArrow, StringRef Member,
14701462
const std::function<ArgsT(const CallExpr *)> &...ArgsCreator)
1471-
: PrinterRewriter<MemberCallPrinter<BaseT, StringRef,
1472-
HasExplicitTemplateArg, ArgsT...>>(
1463+
: PrinterRewriter<
1464+
MemberCallPrinter<BaseT, StringRef, NeedDisambiguator, ArgsT...>>(
14731465
C, Source, BaseCreator, IsArrow, Member, ArgsCreator(C)...) {}
14741466
};
14751467

clang/lib/DPCT/RuleInfra/CallExprRewriterCommon.h

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -439,32 +439,32 @@ inline std::function<std::string(const CallExpr *)> makeDeviceStr() {
439439
};
440440
}
441441

442-
template <class BaseT, bool HasExplicitTemplateArg, class... CallArgsT>
442+
template <class BaseT, bool NeedDisambiguator, class... CallArgsT>
443443
using MemberCallPrinterCreator = PrinterCreator<
444-
MemberCallPrinter<BaseT, StringRef, HasExplicitTemplateArg, CallArgsT...>,
444+
MemberCallPrinter<BaseT, StringRef, NeedDisambiguator, CallArgsT...>,
445445
std::function<BaseT(const CallExpr *)>, bool, std::string,
446446
std::function<CallArgsT(const CallExpr *)>...>;
447447

448-
template <bool HasExplicitTemplateArg, class BaseT, class... CallArgsT>
449-
inline std::function<MemberCallPrinter<BaseT, StringRef, HasExplicitTemplateArg,
448+
template <bool NeedDisambiguator, class BaseT, class... CallArgsT>
449+
inline std::function<MemberCallPrinter<BaseT, StringRef, NeedDisambiguator,
450450
CallArgsT...>(const CallExpr *)>
451451
makeMemberCallCreator(std::function<BaseT(const CallExpr *)> BaseFunc,
452452
bool IsArrow, std::string Member,
453453
std::function<CallArgsT(const CallExpr *)>... Args) {
454-
return MemberCallPrinterCreator<BaseT, HasExplicitTemplateArg, CallArgsT...>(
454+
return MemberCallPrinterCreator<BaseT, NeedDisambiguator, CallArgsT...>(
455455
BaseFunc, IsArrow, Member, Args...);
456456
}
457457

458-
template <bool HasExplicitTemplateArg, class BaseT, class MemberT>
458+
template <bool NeedDisambiguator, class BaseT, class MemberT>
459459
inline std::function<
460-
MemberCallPrinter<BaseT, MemberT, HasExplicitTemplateArg>(const CallExpr *)>
460+
MemberCallPrinter<BaseT, MemberT, NeedDisambiguator>(const CallExpr *)>
461461
makeMemberCallCreator(std::function<BaseT(const CallExpr *)> BaseFunc,
462462
bool IsArrow,
463463
std::function<MemberT(const CallExpr *)> Member) {
464-
return PrinterCreator<
465-
MemberCallPrinter<BaseT, MemberT, HasExplicitTemplateArg>,
466-
std::function<BaseT(const CallExpr *)>, bool,
467-
std::function<MemberT(const CallExpr *)>>(BaseFunc, IsArrow, Member);
464+
return PrinterCreator<MemberCallPrinter<BaseT, MemberT, NeedDisambiguator>,
465+
std::function<BaseT(const CallExpr *)>, bool,
466+
std::function<MemberT(const CallExpr *)>>(
467+
BaseFunc, IsArrow, Member);
468468
}
469469

470470
template <class... StmtT>
@@ -1344,15 +1344,15 @@ createTemplatedCallExprRewriterFactory(
13441344
/// \p BaseCreator use to get base expr from original call expr.
13451345
/// \p IsArrow the member operator is arrow or dot as default.
13461346
/// \p ArgsCreator use to get call args from original call expr.
1347-
template <bool HasExplicitTemplateArg, class BaseT, class... ArgsT>
1347+
template <bool NeedDisambiguator, class BaseT, class... ArgsT>
13481348
inline std::shared_ptr<CallExprRewriterFactoryBase>
13491349
createMemberCallExprRewriterFactory(
13501350
const std::string &SourceName,
13511351
std::function<BaseT(const CallExpr *)> BaseCreator, bool IsArrow,
13521352
std::string MemberName,
13531353
std::function<ArgsT(const CallExpr *)>... ArgsCreator) {
13541354
return std::make_shared<CallExprRewriterFactory<
1355-
MemberCallExprRewriter<BaseT, HasExplicitTemplateArg, ArgsT...>,
1355+
MemberCallExprRewriter<BaseT, NeedDisambiguator, ArgsT...>,
13561356
std::function<BaseT(const CallExpr *)>, bool, std::string,
13571357
std::function<ArgsT(const CallExpr *)>...>>(
13581358
SourceName,
@@ -1361,16 +1361,16 @@ createMemberCallExprRewriterFactory(
13611361
std::forward<std::function<ArgsT(const CallExpr *)>>(ArgsCreator)...);
13621362
}
13631363

1364-
template <bool HasExplicitTemplateArg, class BaseT, class... ArgsT>
1364+
template <bool NeedDisambiguator, class BaseT, class... ArgsT>
13651365
inline std::shared_ptr<std::enable_if_t<
13661366
!std::is_invocable_v<BaseT, const CallExpr *>, CallExprRewriterFactoryBase>>
13671367
createMemberCallExprRewriterFactory(
13681368
const std::string &SourceName, BaseT BaseCreator, bool IsArrow,
13691369
std::string MemberName,
13701370
std::function<ArgsT(const CallExpr *)>... ArgsCreator) {
13711371
return std::make_shared<CallExprRewriterFactory<
1372-
MemberCallExprRewriter<BaseT, HasExplicitTemplateArg, ArgsT...>, BaseT,
1373-
bool, std::string, std::function<ArgsT(const CallExpr *)>...>>(
1372+
MemberCallExprRewriter<BaseT, NeedDisambiguator, ArgsT...>, BaseT, bool,
1373+
std::string, std::function<ArgsT(const CallExpr *)>...>>(
13741374
SourceName, BaseCreator, IsArrow, MemberName,
13751375
std::forward<std::function<ArgsT(const CallExpr *)>>(ArgsCreator)...);
13761376
}
@@ -2252,7 +2252,7 @@ const std::string MipmapNeedBindlessImage =
22522252
#define MEMBER_CALL_FACTORY_ENTRY(FuncName, ...) \
22532253
std::make_pair(FuncName, createMemberCallExprRewriterFactory<false>( \
22542254
FuncName, __VA_ARGS__)),
2255-
#define MEMBER_CALL_HAS_EXPLICIT_TEMP_ARG_FACTORY_ENTRY(FuncName, ...) \
2255+
#define MEMBER_CALL_WITH_DISAMBIGUATOR_FACTORY_ENTRY(FuncName, ...) \
22562256
std::make_pair(FuncName, createMemberCallExprRewriterFactory<true>( \
22572257
FuncName, __VA_ARGS__)),
22582258
#define ARRAYSUBSCRIPT_EXPR_FACTORY_ENTRY(FuncName, ...) \

clang/lib/DPCT/RuleInfra/ExprAnalysis.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,12 @@ void ExprAnalysis::analyzeExpr(const DeclRefExpr *DRE) {
535535
dyn_cast<NamespaceDecl>(Qualifier->getAsNamespace())) {
536536
CTSName = getNameSpace(NSD) + "::" + DRE->getNameInfo().getAsString();
537537
}
538+
} else if (auto NA = Qualifier->getAsNamespaceAlias()) {
539+
auto ND = NA->getNamespace();
540+
if (ND && (ND->getName() == "wmma") &&
541+
dpct::DpctGlobalInfo::isInCudaPath(ND->getBeginLoc())) {
542+
CTSName = getNameSpace(ND) + "::" + DRE->getNameInfo().getAsString();
543+
}
538544
} else if (!IsNamespaceOrAlias || !IsSpecicalAPI) {
539545
if (DRE->getDecl()->isCXXClassMember()) {
540546
std::string Result;

0 commit comments

Comments
 (0)