Skip to content

Commit 173781d

Browse files
committed
WIP
Signed-off-by: Jiang, Zhiwei <zhiwei.jiang@intel.com>
1 parent e9bbff1 commit 173781d

3 files changed

Lines changed: 20 additions & 97 deletions

File tree

clang/lib/DPCT/AnalysisInfo.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2811,6 +2811,7 @@ void CtTypeInfo::setArrayInfo(const DependentSizedArrayTypeLoc &TL,
28112811
bool NeedSizeFold) {
28122812
ContainSizeofType = containSizeOfType(TL.getSizeExpr());
28132813
ExprAnalysis EA;
2814+
EA.IsAnalyzingCtTypeInfo = true;
28142815
EA.analyze(TL.getSizeExpr());
28152816
auto TDSI = EA.getTemplateDependentStringInfo();
28162817
if (TDSI->containsTemplateDependentMacro())

clang/lib/DPCT/RuleInfra/ExprAnalysis.cpp

Lines changed: 4 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -421,74 +421,6 @@ void StringReplacements::replaceString() {
421421
ReplMap.clear();
422422
}
423423

424-
void StringReplacements::adjustSourceStrAndTDRs() {
425-
std::vector<size_t> Occurrences;
426-
size_t Pos = 0;
427-
while ((Pos = SourceStr.find(ConstExprExpansionInfoVDStr, Pos)) !=
428-
std::string::npos) {
429-
Occurrences.push_back(Pos);
430-
Pos += ConstExprExpansionInfoVDStr.length();
431-
}
432-
433-
int LengthDiff = ConstExprExpansionInfoVDInitStr.length() -
434-
ConstExprExpansionInfoVDStr.length();
435-
436-
for (auto Occ : Occurrences) {
437-
const auto &Iter = TDRs.find(Occ);
438-
if (Iter != TDRs.end()) {
439-
TDRs.erase(Iter);
440-
}
441-
}
442-
std::map<size_t, std::shared_ptr<TemplateDependentReplacement>> NewTDRs;
443-
for (const auto &[Pos, Value] : TDRs) {
444-
int NewPos = Pos;
445-
for (auto Occ : Occurrences) {
446-
if (Occ < static_cast<size_t>(Pos)) {
447-
NewPos += LengthDiff;
448-
} else {
449-
break;
450-
}
451-
}
452-
auto NewValue = std::make_shared<TemplateDependentReplacement>(
453-
SourceStr, NewPos, Value->getLength(), Value->getTemplateIndex());
454-
NewTDRs[NewPos] = NewValue;
455-
}
456-
TDRs = std::move(NewTDRs);
457-
458-
std::map<size_t, std::shared_ptr<TemplateDependentReplacement>>
459-
NewTDRsInConstExprExpansion;
460-
for (const auto &[Pos, Value] : TDRsInConstExprExpansion) {
461-
for (auto Occ : Occurrences) {
462-
int NewPos = Occ + Pos;
463-
for (auto PrevOcc : Occurrences) {
464-
if (PrevOcc < static_cast<size_t>(Occ)) {
465-
NewPos += LengthDiff;
466-
} else {
467-
break;
468-
}
469-
}
470-
auto NewValue = std::make_shared<TemplateDependentReplacement>(
471-
SourceStr, NewPos, Value->getLength(), Value->getTemplateIndex());
472-
NewTDRsInConstExprExpansion[NewPos] = NewValue;
473-
break;
474-
}
475-
}
476-
TDRsInConstExprExpansion = std::move(NewTDRsInConstExprExpansion);
477-
478-
Pos = 0;
479-
while ((Pos = SourceStr.find(ConstExprExpansionInfoVDStr, Pos)) !=
480-
std::string::npos) {
481-
SourceStr.replace(Pos, ConstExprExpansionInfoVDStr.length(),
482-
ConstExprExpansionInfoVDInitStr);
483-
Pos += ConstExprExpansionInfoVDInitStr.length();
484-
}
485-
486-
TDRs.insert(TDRsInConstExprExpansion.begin(), TDRsInConstExprExpansion.end());
487-
for (const auto &[Pos, Value] : TDRs) {
488-
Value->alterSource(SourceStr);
489-
}
490-
}
491-
492424
ExprAnalysis::ExprAnalysis(const Expr *Expression)
493425
: Context(DpctGlobalInfo::getContext()),
494426
SM(DpctGlobalInfo::getSourceManager()) {
@@ -622,17 +554,13 @@ void ExprAnalysis::analyzeExpr(const DeclRefExpr *DRE) {
622554
if (auto TemplateDecl = dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl()))
623555
addReplacement(DRE, TemplateDecl->getIndex());
624556
else if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl());
625-
VD && VD->isConstexpr()) {
626-
if (VD->getInit() && VD->getInit()->getBeginLoc().isValid() &&
627-
!ConstExprExpansion) {
628-
ConstExprExpansion = true;
557+
VD && VD->isConstexpr() &&
558+
IsAnalyzingCtTypeInfo /*&& IsDependent*/) {
559+
if (VD->getInit() && VD->getInit()->getBeginLoc().isValid()) {
629560
ExprAnalysis EA(VD->getInit());
630561
std::string VDInitStr = EA.getReplacedString();
631562
std::string VDStr = VD->getNameAsString();
632-
ReplSet.addConstExprExpansionInfo(VDStr, VDInitStr);
633-
ReplSet.addTemplateDependentReplacementInConstExprExpansion(
634-
EA.getReplSetTDRs());
635-
ConstExprExpansion = false;
563+
addReplacement(0, VDStr.size(), VDInitStr);
636564
}
637565
} else if (auto ECD = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
638566
std::unordered_set<std::string> targetStr = {

clang/lib/DPCT/RuleInfra/ExprAnalysis.h

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,12 @@ class StringReplacements {
138138
SourceStr, Offset, Length, TemplateIndex)));
139139
}
140140

141-
inline void addTemplateDependentReplacementInConstExprExpansion(
142-
const std::map<size_t, std::shared_ptr<TemplateDependentReplacement>>
143-
&InTDRs) {
144-
TDRsInConstExprExpansion.insert(InTDRs.begin(), InTDRs.end());
145-
}
146-
147-
inline void addConstExprExpansionInfo(std::string VDStr,
148-
std::string VDInitStr) {
149-
ConstExprExpansionInfoVDStr = VDStr;
150-
ConstExprExpansionInfoVDInitStr = VDInitStr;
141+
inline void addTemplateDependentReplacement(
142+
size_t Offset, size_t Length,
143+
std::shared_ptr<TemplateDependentStringInfo> TDSI) {
144+
// TDRs.insert(
145+
// std::make_pair(Offset, std::make_shared<TemplateDependentReplacement>(
146+
// SourceStr, Offset, Length, TemplateIndex)));
151147
}
152148

153149
// Add a string replacement
@@ -169,11 +165,6 @@ class StringReplacements {
169165
// Generate replacement text info which dependent on template args.
170166
std::shared_ptr<TemplateDependentStringInfo>
171167
getTemplateDependentStringInfo() {
172-
if (!ConstExprExpansionInfoVDStr.empty() &&
173-
!ConstExprExpansionInfoVDInitStr.empty() &&
174-
!TDRsInConstExprExpansion.empty()) {
175-
adjustSourceStrAndTDRs();
176-
}
177168
replaceString();
178169
return std::make_shared<TemplateDependentStringInfo>(SourceStr, TDRs);
179170
}
@@ -193,16 +184,11 @@ class StringReplacements {
193184
StringReplacements &operator=(StringReplacements) = delete;
194185

195186
void replaceString();
196-
void adjustSourceStrAndTDRs();
197187

198188
unsigned ShiftLength;
199189
std::string SourceStr;
200190
std::map<size_t, std::shared_ptr<StringReplacement>> ReplMap;
201191
std::map<size_t, std::shared_ptr<TemplateDependentReplacement>> TDRs;
202-
std::map<size_t, std::shared_ptr<TemplateDependentReplacement>>
203-
TDRsInConstExprExpansion;
204-
std::string ConstExprExpansionInfoVDStr;
205-
std::string ConstExprExpansionInfoVDInitStr;
206192
};
207193

208194
/// Analyze expression and generate its migrated string
@@ -618,6 +604,12 @@ class ExprAnalysis {
618604
ReplSet.addTemplateDependentReplacement(Offset, Length, TemplateIndex);
619605
}
620606

607+
inline void
608+
addReplacement(size_t Offset, size_t Length,
609+
std::shared_ptr<TemplateDependentStringInfo> TDSI) {
610+
ReplSet.addTemplateDependentReplacement(Offset, Length, TDSI);
611+
}
612+
621613
// Analyze the expression, jump to corresponding analysis function according
622614
// to its class
623615
// Precondition: Expression != nullptr
@@ -723,7 +715,9 @@ class ExprAnalysis {
723715
std::string RewritePrefix;
724716
std::string RewritePostfix;
725717
std::set<HelperFeatureEnum> HelperFeatureSet;
726-
bool ConstExprExpansion = false;
718+
719+
public:
720+
bool IsAnalyzingCtTypeInfo = false;
727721
};
728722

729723
// Analyze pointer allocated by cudaMallocManaged.

0 commit comments

Comments
 (0)