@@ -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