[Alignment][NFC] Instructions::getLoadStoreAlignment
[llvm-complete.git] / test / tools / llvm-xray / X86 / graph-deduce-tail-call.yaml
blob6f756bf018f904a99ba79964e414ea0d8b614406
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
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
19 ---
20 header:
21   version: 1
22   type: 0
23   constant-tsc: true
24   nonstop-tsc: true
25   cycle-frequency: 0
26 records:
27 # Here we reconstruct the following call trace:
29 #   f1()
30 #     f2()
31 #       f3()
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().
39 # Note that by default, tail/sibling call deduction is disabled, and is enabled
40 # with a flag "-d" or "-deduce-sibling-calls".
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 ...
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:       }
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:       }
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:       }