Skip to content

Commit fb647e6

Browse files
committed
feat(AsmPrinter): Add support for emitting prefetch target symbols
1 parent a265dbc commit fb647e6

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,40 @@ Error BasicBlockSectionsProfileReader::ReadV1Profile() {
353353
}
354354
continue;
355355
}
356-
case 't': { // Callsite target specifier.
356+
case 'i': { // Prefetch hint specifier.
357+
// Skip the profile when we the profile iterator (FI) refers to the
358+
// past-the-end element.
359+
if (FI == ProgramPathAndClusterInfo.end())
360+
continue;
361+
assert(Values.size() == 2);
362+
SmallVector<StringRef, 2> PrefetchSiteStr;
363+
Values[0].split(PrefetchSiteStr, ',');
364+
assert(PrefetchSiteStr.size() == 2);
365+
auto SiteBBID = parseUniqueBBID(PrefetchSiteStr[0]);
366+
if (!SiteBBID)
367+
return SiteBBID.takeError();
368+
unsigned long long SiteBBOffset;
369+
if (getAsUnsignedInteger(PrefetchSiteStr[1], 10, SiteBBOffset))
370+
return createProfileParseError(Twine("unsigned integer expected: '") +
371+
PrefetchSiteStr[1]);
372+
373+
SmallVector<StringRef, 3> PrefetchTargetStr;
374+
Values[1].split(PrefetchTargetStr, ',');
375+
assert(PrefetchTargetStr.size() == 3);
376+
auto TargetBBID = parseUniqueBBID(PrefetchTargetStr[1]);
377+
if (!TargetBBID)
378+
return TargetBBID.takeError();
379+
unsigned long long TargetBBOffset;
380+
if (getAsUnsignedInteger(PrefetchTargetStr[2], 10, TargetBBOffset))
381+
return createProfileParseError(Twine("unsigned integer expected: '") +
382+
PrefetchTargetStr[2]);
383+
FI->second.PrefetchHints.push_back(
384+
PrefetchHint{{*SiteBBID, static_cast<unsigned>(SiteBBOffset)},
385+
PrefetchTargetStr[0],
386+
{*TargetBBID, static_cast<unsigned>(TargetBBOffset)}});
387+
continue;
388+
}
389+
case 't': { // Prefetch target specifier.
357390
// Skip the profile when we the profile iterator (FI) refers to the
358391
// past-the-end element.
359392
if (FI == ProgramPathAndClusterInfo.end())

0 commit comments

Comments
 (0)