This patch teaches llvm-profdata to output the sample profile in the
JSON format. The new option is intended to be used for research and
development purposes. For example, one can write a Python script to
take a JSON file and analyze how similar different inline instances of
a given function are to each other.
I've chosen JSON because Python can parse it reasonably fast, and it
just takes a couple of lines to read the whole data:
import json
with open ('profile.json') as f:
profile = json.load(f)
Differential Revision: https://reviews.llvm.org/D130944
105 lines
2.8 KiB
Plaintext
105 lines
2.8 KiB
Plaintext
RUN: llvm-profdata show --sample --json %p/Inputs/sample-profile.proftext | FileCheck %s --check-prefix=JSON
|
|
JSON: [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "name": "main",
|
|
JSON-NEXT: "total": 184019,
|
|
JSON-NEXT: "head": 0,
|
|
JSON-NEXT: "body": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 4,
|
|
JSON-NEXT: "samples": 534
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 4,
|
|
JSON-NEXT: "discriminator": 2,
|
|
JSON-NEXT: "samples": 534
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 5,
|
|
JSON-NEXT: "samples": 1075
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 5,
|
|
JSON-NEXT: "discriminator": 1,
|
|
JSON-NEXT: "samples": 1075
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 6,
|
|
JSON-NEXT: "samples": 2080
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 7,
|
|
JSON-NEXT: "samples": 534
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 9,
|
|
JSON-NEXT: "samples": 2064,
|
|
JSON-NEXT: "calls": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "function": "_Z3bari",
|
|
JSON-NEXT: "samples": 1471
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "function": "_Z3fooi",
|
|
JSON-NEXT: "samples": 631
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ],
|
|
JSON-NEXT: "callsites": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 10,
|
|
JSON-NEXT: "samples": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "name": "inline1",
|
|
JSON-NEXT: "total": 1000,
|
|
JSON-NEXT: "body": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 1,
|
|
JSON-NEXT: "samples": 1000
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 10,
|
|
JSON-NEXT: "samples": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "name": "inline2",
|
|
JSON-NEXT: "total": 2000,
|
|
JSON-NEXT: "body": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 1,
|
|
JSON-NEXT: "samples": 2000
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "name": "_Z3bari",
|
|
JSON-NEXT: "total": 20301,
|
|
JSON-NEXT: "head": 1437,
|
|
JSON-NEXT: "body": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 1,
|
|
JSON-NEXT: "samples": 1437
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: },
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "name": "_Z3fooi",
|
|
JSON-NEXT: "total": 7711,
|
|
JSON-NEXT: "head": 610,
|
|
JSON-NEXT: "body": [
|
|
JSON-NEXT: {
|
|
JSON-NEXT: "line": 1,
|
|
JSON-NEXT: "samples": 610
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|
|
JSON-NEXT: }
|
|
JSON-NEXT: ]
|