1#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d \
2#RUN:    | FileCheck %s -check-prefix=EMPTY
3#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e count \
4#RUN:    | FileCheck %s -check-prefix=COUNT
5#
6#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e min \
7#RUN:    | FileCheck %s -check-prefix=TIME
8#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e med \
9#RUN:    | FileCheck %s -check-prefix=TIME
10#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e 90p \
11#RUN:    | FileCheck %s -check-prefix=TIME
12#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e 99p \
13#RUN:    | FileCheck %s -check-prefix=TIME
14#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e max \
15#RUN:    | FileCheck %s -check-prefix=TIME
16#RUN: llvm-xray graph %s -o - -m %S/Inputs/simple-instrmap.yaml -d -e sum \
17#RUN:    | FileCheck %s -check-prefix=TIME
18#
19---
20header:
21  version: 1
22  type: 0
23  constant-tsc: true
24  nonstop-tsc: true
25  cycle-frequency: 0
26records:
27# Here we reconstruct the following call trace:
28#
29#   f1()
30#     f2()
31#       f3()
32#
33# But we find that we're missing an exit record for f2() because it's
34# tail-called f3(). We make sure that if we see a trace like this that we can
35# deduce tail calls, and account the time (potentially wrongly) to f2() when
36# f1() exits. That is because we don't go back to f3()'s entry record to
37# properly do the math on the timing of f2().
38#
39# Note that by default, tail/sibling call deduction is disabled, and is enabled
40# with a flag "-d" or "-deduce-sibling-calls".
41#
42  - { type: 0, func-id: 1, cpu: 1, thread: 111, kind: function-enter, tsc: 10000 }
43  - { type: 0, func-id: 2, cpu: 1, thread: 111, kind: function-enter, tsc: 10001 }
44  - { type: 0, func-id: 3, cpu: 1, thread: 111, kind: function-enter, tsc: 10002 }
45  - { type: 0, func-id: 3, cpu: 1, thread: 111, kind: function-exit,  tsc: 10003 }
46  - { type: 0, func-id: 1, cpu: 1, thread: 111, kind: function-exit,  tsc: 10004 }
47...
48
49#EMPTY:       digraph xray {
50#EMPTY-DAG:   F0 -> F1 [label=""];
51#EMPTY-DAG:   F1 -> F2 [label=""];
52#EMPTY-DAG:   F2 -> F3 [label=""];
53#EMPTY-DAG:   F1 [label="@(1)"];
54#EMPTY-DAG:   F2 [label="@(2)"];
55#EMPTY-DAG:   F3 [label="@(3)"];
56#EMPTY-NEXT:       }
57
58#COUNT:       digraph xray {
59#COUNT-DAG:   F0 -> F1 [label="1"];
60#COUNT-DAG:   F1 -> F2 [label="1"];
61#COUNT-DAG:   F2 -> F3 [label="1"];
62#COUNT-DAG:   F1 [label="@(1)"];
63#COUNT-DAG:   F2 [label="@(2)"];
64#COUNT-DAG:   F3 [label="@(3)"];
65#COUNT-NEXT:       }
66
67
68#TIME:       digraph xray {
69#TIME-DAG:   F0 -> F1 [label="4.{{.*}}"];
70#TIME-DAG:   F1 -> F2 [label="3.{{.*}}"];
71#TIME-DAG:   F2 -> F3 [label="1.{{.*}}"];
72#TIME-DAG:   F1 [label="@(1)"];
73#TIME-DAG:   F2 [label="@(2)"];
74#TIME-DAG:   F3 [label="@(3)"];
75#TIME-NEXT:       }
76