[XRay][llvm] Load XRay Profiles

Authored by dberris on Aug 3 2018, 12:18 AM.


[XRay][llvm] Load XRay Profiles

This change implements the profile loading functionality in LLVM to
support XRay's profiling mode in compiler-rt.

We introduce a type named llvm::xray::Profile which allows building a
profile representation. We can load an XRay profile from a file to build
Profile instances, or do it manually through the Profile type's API.

The intent is to get the llvm-xray tool to generate Profile
instances and use that as the common abstraction through which all
conversion and analysis can be done. In the future we can generate
Profile instances from Trace instances as well, through conversion

Some of the key operations supported by the Profile API are:

  • Path interning (Profile::internPath(...)) which returns a unique path identifier.
  • Block appending (Profile::addBlock(...)) to add thread-associated profile information.
  • Path ID to Path lookup (Profile::expandPath(...)) to look up a PathID and return the original interned path.
  • Block iteration.

A 'Path' in this context represents the function call stack in
leaf-to-root order. This is represented as a path in an internally
managed prefix tree in the Profile instance. Having a handle (PathID)
to identify the unique Paths we encounter for a particular Profile
allows us to reduce the amount of memory required to associate profile
data to a particular Path.

This is the first of a series of patches to migrate the llvm-stacks
tool towards using a single profile representation.

Depends on D48653.

Reviewers: kpw, eizan

Reviewed By: kpw

Subscribers: mgorny, llvm-commits, hiraditya

Differential Revision: https://reviews.llvm.org/D48370

llvm-svn: 338825


dberrisAug 3 2018, 12:18 AM
Differential Revision
D48370: [XRay][llvm] Load XRay Profiles
rGa7a12399a1f2: [X86] Remove all the vector NOP bitcast patterns. Use a few lines of code in…