@@ -323,6 +323,39 @@ Error BasicBlockSectionsProfileReader::ReadV1Profile() {
323323 }
324324 continue ;
325325 }
326+ case ' i' : { // Prefetch hint specifier.
327+ // Skip the profile when we the profile iterator (FI) refers to the
328+ // past-the-end element.
329+ if (FI == ProgramPathAndClusterInfo.end ())
330+ continue ;
331+ assert (Values.size () == 2 );
332+ SmallVector<StringRef, 2 > PrefetchSiteStr;
333+ Values[0 ].split (PrefetchSiteStr, ' @' );
334+ assert (PrefetchSiteStr.size () == 2 );
335+ auto SiteBBID = parseUniqueBBID (PrefetchSiteStr[0 ]);
336+ if (!SiteBBID)
337+ return SiteBBID.takeError ();
338+ unsigned long long SiteBBOffset;
339+ if (getAsUnsignedInteger (PrefetchSiteStr[1 ], 10 , SiteBBOffset))
340+ return createProfileParseError (Twine (" unsigned integer expected: '" ) +
341+ PrefetchSiteStr[1 ]);
342+
343+ SmallVector<StringRef, 3 > PrefetchTargetStr;
344+ Values[1 ].split (PrefetchTargetStr, ' @' );
345+ assert (PrefetchTargetStr.size () == 3 );
346+ auto TargetBBID = parseUniqueBBID (PrefetchTargetStr[1 ]);
347+ if (!TargetBBID)
348+ return TargetBBID.takeError ();
349+ unsigned long long TargetBBOffset;
350+ if (getAsUnsignedInteger (PrefetchTargetStr[2 ], 10 , TargetBBOffset))
351+ return createProfileParseError (Twine (" unsigned integer expected: '" ) +
352+ PrefetchTargetStr[2 ]);
353+ FI->second .PrefetchHints .push_back (
354+ PrefetchHint{{*SiteBBID, static_cast <unsigned >(SiteBBOffset)},
355+ PrefetchTargetStr[0 ],
356+ {*TargetBBID, static_cast <unsigned >(TargetBBOffset)}});
357+ continue ;
358+ }
326359 case ' t' : { // Prefetch target specifier.
327360 // Skip the profile when we the profile iterator (FI) refers to the
328361 // past-the-end element.
0 commit comments