[llvm-mca] add flag -all-views and flag -all-stats.

Flag -all-views enables all the views.
Flag -all-stats enables all the views that print hardware statistics.

llvm-svn: 332602
This commit is contained in:
Andrea Di Biagio 2018-05-17 12:27:03 +00:00
parent 448550d947
commit 650b5fc6cb
6 changed files with 490 additions and 0 deletions

View File

@ -176,6 +176,16 @@ option specifies "``-``", then the output will also be sent to standard output.
Enable the instruction info view. This is enabled by default.
.. option:: -all-stats
Print all hardware statistics. This enables extra statistics related to the
dispatch logic, the hardware schedulers, the register file(s), and the retire
control unit. This option is disabled by default.
.. option:: -all-views
Enable all the view.
.. option:: -instruction-tables
Prints resource pressure information based on the static information

View File

@ -0,0 +1,92 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats=true < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats=false < %s | FileCheck %s -check-prefix=ALL
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 < %s | FileCheck %s -check-prefix=ALL
add %eax, %eax
# ALL: Iterations: 100
# ALL-NEXT: Instructions: 100
# ALL-NEXT: Total Cycles: 103
# ALL-NEXT: Dispatch Width: 2
# ALL-NEXT: IPC: 0.97
# ALL: Instruction Info:
# ALL-NEXT: [1]: #uOps
# ALL-NEXT: [2]: Latency
# ALL-NEXT: [3]: RThroughput
# ALL-NEXT: [4]: MayLoad
# ALL-NEXT: [5]: MayStore
# ALL-NEXT: [6]: HasSideEffects
# ALL: [1] [2] [3] [4] [5] [6] Instructions:
# ALL-NEXT: 1 1 0.50 addl %eax, %eax
# FULLREPORT: Dynamic Dispatch Stall Cycles:
# FULLREPORT-NEXT: RAT - Register unavailable: 0
# FULLREPORT-NEXT: RCU - Retire tokens unavailable: 0
# FULLREPORT-NEXT: SCHEDQ - Scheduler full: 61
# FULLREPORT-NEXT: LQ - Load queue full: 0
# FULLREPORT-NEXT: SQ - Store queue full: 0
# FULLREPORT-NEXT: GROUP - Static restrictions on the dispatch group: 0
# FULLREPORT: Dispatch Logic - number of cycles where we saw N instructions dispatched:
# FULLREPORT-NEXT: [# dispatched], [# cycles]
# FULLREPORT-NEXT: 0, 22 (21.4%)
# FULLREPORT-NEXT: 2, 19 (18.4%)
# FULLREPORT-NEXT: 1, 62 (60.2%)
# FULLREPORT: Schedulers - number of cycles where we saw N instructions issued:
# FULLREPORT-NEXT: [# issued], [# cycles]
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
# FULLREPORT: Scheduler's queue usage:
# FULLREPORT-NEXT: JALU01, 20/20
# FULLREPORT-NEXT: JFPU01, 0/18
# FULLREPORT-NEXT: JLSAGU, 0/12
# FULLREPORT: Retire Control Unit - number of cycles where we saw N instructions retired:
# FULLREPORT-NEXT: [# retired], [# cycles]
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
# FULLREPORT: Register File statistics:
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
# FULLREPORT: * Register File #1 -- FpuPRF:
# FULLREPORT-NEXT: Number of physical registers: 72
# FULLREPORT-NEXT: Total number of mappings created: 0
# FULLREPORT-NEXT: Max number of mappings used: 0
# FULLREPORT: * Register File #2 -- IntegerPRF:
# FULLREPORT-NEXT: Number of physical registers: 64
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
# FULLREPORT: Resources:
# FULLREPORT-NEXT: [0] - JALU0
# FULLREPORT-NEXT: [1] - JALU1
# FULLREPORT-NEXT: [2] - JDiv
# FULLREPORT-NEXT: [3] - JFPA
# FULLREPORT-NEXT: [4] - JFPM
# FULLREPORT-NEXT: [5] - JFPU0
# FULLREPORT-NEXT: [6] - JFPU1
# FULLREPORT-NEXT: [7] - JLAGU
# FULLREPORT-NEXT: [8] - JMul
# FULLREPORT-NEXT: [9] - JSAGU
# FULLREPORT-NEXT: [10] - JSTC
# FULLREPORT-NEXT: [11] - JVALU0
# FULLREPORT-NEXT: [12] - JVALU1
# FULLREPORT-NEXT: [13] - JVIMUL
# FULLREPORT: Resource pressure per iteration:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - -
# FULLREPORT: Resource pressure by instruction:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions:
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - - addl %eax, %eax

View File

@ -0,0 +1,93 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats -dispatch-stats=false < %s | FileCheck %s -check-prefix=ALL
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULL
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-stats -dispatch-stats < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULL
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -dispatch-stats -all-stats < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULL
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -dispatch-stats=false -all-stats < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULL
add %eax, %eax
# ALL: Iterations: 100
# ALL-NEXT: Instructions: 100
# ALL-NEXT: Total Cycles: 103
# ALL-NEXT: Dispatch Width: 2
# ALL-NEXT: IPC: 0.97
# ALL: Instruction Info:
# ALL-NEXT: [1]: #uOps
# ALL-NEXT: [2]: Latency
# ALL-NEXT: [3]: RThroughput
# ALL-NEXT: [4]: MayLoad
# ALL-NEXT: [5]: MayStore
# ALL-NEXT: [6]: HasSideEffects
# ALL: [1] [2] [3] [4] [5] [6] Instructions:
# ALL-NEXT: 1 1 0.50 addl %eax, %eax
# FULL: Dynamic Dispatch Stall Cycles:
# FULL-NEXT: RAT - Register unavailable: 0
# FULL-NEXT: RCU - Retire tokens unavailable: 0
# FULL-NEXT: SCHEDQ - Scheduler full: 61
# FULL-NEXT: LQ - Load queue full: 0
# FULL-NEXT: SQ - Store queue full: 0
# FULL-NEXT: GROUP - Static restrictions on the dispatch group: 0
# FULL: Dispatch Logic - number of cycles where we saw N instructions dispatched:
# FULL-NEXT: [# dispatched], [# cycles]
# FULL-NEXT: 0, 22 (21.4%)
# FULL-NEXT: 2, 19 (18.4%)
# FULL-NEXT: 1, 62 (60.2%)
# FULL: Schedulers - number of cycles where we saw N instructions issued:
# FULL-NEXT: [# issued], [# cycles]
# FULL-NEXT: 0, 3 (2.9%)
# FULL-NEXT: 1, 100 (97.1%)
# FULL: Scheduler's queue usage:
# FULL-NEXT: JALU01, 20/20
# FULL-NEXT: JFPU01, 0/18
# FULL-NEXT: JLSAGU, 0/12
# FULL: Retire Control Unit - number of cycles where we saw N instructions retired:
# FULL-NEXT: [# retired], [# cycles]
# FULL-NEXT: 0, 3 (2.9%)
# FULL-NEXT: 1, 100 (97.1%)
# FULL: Register File statistics:
# FULL-NEXT: Total number of mappings created: 200
# FULL-NEXT: Max number of mappings used: 44
# FULL: * Register File #1 -- FpuPRF:
# FULL-NEXT: Number of physical registers: 72
# FULL-NEXT: Total number of mappings created: 0
# FULL-NEXT: Max number of mappings used: 0
# FULL: * Register File #2 -- IntegerPRF:
# FULL-NEXT: Number of physical registers: 64
# FULL-NEXT: Total number of mappings created: 200
# FULL-NEXT: Max number of mappings used: 44
# FULL: Resources:
# FULL-NEXT: [0] - JALU0
# FULL-NEXT: [1] - JALU1
# FULL-NEXT: [2] - JDiv
# FULL-NEXT: [3] - JFPA
# FULL-NEXT: [4] - JFPM
# FULL-NEXT: [5] - JFPU0
# FULL-NEXT: [6] - JFPU1
# FULL-NEXT: [7] - JLAGU
# FULL-NEXT: [8] - JMul
# FULL-NEXT: [9] - JSAGU
# FULL-NEXT: [10] - JSTC
# FULL-NEXT: [11] - JVALU0
# FULL-NEXT: [12] - JVALU1
# FULL-NEXT: [13] - JVIMUL
# FULL: Resource pressure per iteration:
# FULL-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
# FULL-NEXT: 0.50 0.50 - - - - - - - - - - - -
# FULL: Resource pressure by instruction:
# FULL-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions:
# FULL-NEXT: 0.50 0.50 - - - - - - - - - - - - addl %eax, %eax

View File

@ -0,0 +1,116 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views < %s | FileCheck %s -check-prefix=ALL -check-prefix=DEFAULTREPORT -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=true < %s | FileCheck %s -check-prefix=ALL -check-prefix=DEFAULTREPORT -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views=false < %s | FileCheck %s -check-prefix=ALL -check-prefix=NOREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 < %s | FileCheck %s -check-prefix=ALL -check-prefix=DEFAULTREPORT
add %eax, %eax
# ALL: Iterations: 100
# ALL-NEXT: Instructions: 100
# ALL-NEXT: Total Cycles: 103
# ALL-NEXT: Dispatch Width: 2
# ALL-NEXT: IPC: 0.97
# DEFAULTREPORT: Instruction Info:
# DEFAULTREPORT-NEXT: [1]: #uOps
# DEFAULTREPORT-NEXT: [2]: Latency
# DEFAULTREPORT-NEXT: [3]: RThroughput
# DEFAULTREPORT-NEXT: [4]: MayLoad
# DEFAULTREPORT-NEXT: [5]: MayStore
# DEFAULTREPORT-NEXT: [6]: HasSideEffects
# DEFAULTREPORT: [1] [2] [3] [4] [5] [6] Instructions:
# DEFAULTREPORT-NEXT: 1 1 0.50 addl %eax, %eax
# FULLREPORT: Dynamic Dispatch Stall Cycles:
# FULLREPORT-NEXT: RAT - Register unavailable: 0
# FULLREPORT-NEXT: RCU - Retire tokens unavailable: 0
# FULLREPORT-NEXT: SCHEDQ - Scheduler full: 61
# FULLREPORT-NEXT: LQ - Load queue full: 0
# FULLREPORT-NEXT: SQ - Store queue full: 0
# FULLREPORT-NEXT: GROUP - Static restrictions on the dispatch group: 0
# FULLREPORT: Dispatch Logic - number of cycles where we saw N instructions dispatched:
# FULLREPORT-NEXT: [# dispatched], [# cycles]
# FULLREPORT-NEXT: 0, 22 (21.4%)
# FULLREPORT-NEXT: 2, 19 (18.4%)
# FULLREPORT-NEXT: 1, 62 (60.2%)
# FULLREPORT: Schedulers - number of cycles where we saw N instructions issued:
# FULLREPORT-NEXT: [# issued], [# cycles]
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
# FULLREPORT: Scheduler's queue usage:
# FULLREPORT-NEXT: JALU01, 20/20
# FULLREPORT-NEXT: JFPU01, 0/18
# FULLREPORT-NEXT: JLSAGU, 0/12
# FULLREPORT: Retire Control Unit - number of cycles where we saw N instructions retired:
# FULLREPORT-NEXT: [# retired], [# cycles]
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
# FULLREPORT: Register File statistics:
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
# FULLREPORT: * Register File #1 -- FpuPRF:
# FULLREPORT-NEXT: Number of physical registers: 72
# FULLREPORT-NEXT: Total number of mappings created: 0
# FULLREPORT-NEXT: Max number of mappings used: 0
# FULLREPORT: * Register File #2 -- IntegerPRF:
# FULLREPORT-NEXT: Number of physical registers: 64
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
# FULLREPORT: Resources:
# FULLREPORT-NEXT: [0] - JALU0
# FULLREPORT-NEXT: [1] - JALU1
# FULLREPORT-NEXT: [2] - JDiv
# FULLREPORT-NEXT: [3] - JFPA
# FULLREPORT-NEXT: [4] - JFPM
# FULLREPORT-NEXT: [5] - JFPU0
# FULLREPORT-NEXT: [6] - JFPU1
# FULLREPORT-NEXT: [7] - JLAGU
# FULLREPORT-NEXT: [8] - JMul
# FULLREPORT-NEXT: [9] - JSAGU
# FULLREPORT-NEXT: [10] - JSTC
# FULLREPORT-NEXT: [11] - JVALU0
# FULLREPORT-NEXT: [12] - JVALU1
# FULLREPORT-NEXT: [13] - JVIMUL
# FULLREPORT: Resource pressure per iteration:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - -
# FULLREPORT: Resource pressure by instruction:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions:
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - - addl %eax, %eax
# FULLREPORT: Timeline view:
# FULLREPORT-NEXT: 012
# FULLREPORT-NEXT: Index 0123456789
# FULLREPORT: [0,0] DeER . . . addl %eax, %eax
# FULLREPORT-NEXT: [1,0] D=eER. . . addl %eax, %eax
# FULLREPORT-NEXT: [2,0] .D=eER . . addl %eax, %eax
# FULLREPORT-NEXT: [3,0] .D==eER . . addl %eax, %eax
# FULLREPORT-NEXT: [4,0] . D==eER . . addl %eax, %eax
# FULLREPORT-NEXT: [5,0] . D===eER . . addl %eax, %eax
# FULLREPORT-NEXT: [6,0] . D===eER. . addl %eax, %eax
# FULLREPORT-NEXT: [7,0] . D====eER . addl %eax, %eax
# FULLREPORT-NEXT: [8,0] . D====eER. addl %eax, %eax
# FULLREPORT-NEXT: [9,0] . D=====eER addl %eax, %eax
# FULLREPORT: Average Wait times (based on the timeline view):
# FULLREPORT-NEXT: [0]: Executions
# FULLREPORT-NEXT: [1]: Average time spent waiting in a scheduler's queue
# FULLREPORT-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
# FULLREPORT-NEXT: [3]: Average time elapsed from WB until retire stage
# FULLREPORT: [0] [1] [2] [3]
# FULLREPORT-NEXT: 0. 10 3.5 0.1 0.0 addl %eax, %eax

View File

@ -0,0 +1,141 @@
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views -resource-pressure < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -resource-pressure -all-views < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -resource-pressure=false -all-views < %s | FileCheck %s -check-prefix=ALL -check-prefix=FULLREPORT
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -all-views -resource-pressure=false < %s | FileCheck %s -check-prefix=ALL -check-prefix=NORPV
add %eax, %eax
# ALL: Iterations: 100
# ALL-NEXT: Instructions: 100
# ALL-NEXT: Total Cycles: 103
# ALL-NEXT: Dispatch Width: 2
# ALL-NEXT: IPC: 0.97
# ALL: Instruction Info:
# ALL-NEXT: [1]: #uOps
# ALL-NEXT: [2]: Latency
# ALL-NEXT: [3]: RThroughput
# ALL-NEXT: [4]: MayLoad
# ALL-NEXT: [5]: MayStore
# ALL-NEXT: [6]: HasSideEffects
# ALL: [1] [2] [3] [4] [5] [6] Instructions:
# ALL-NEXT: 1 1 0.50 addl %eax, %eax
# ALL: Dynamic Dispatch Stall Cycles:
# ALL-NEXT: RAT - Register unavailable: 0
# ALL-NEXT: RCU - Retire tokens unavailable: 0
# ALL-NEXT: SCHEDQ - Scheduler full: 61
# ALL-NEXT: LQ - Load queue full: 0
# ALL-NEXT: SQ - Store queue full: 0
# ALL-NEXT: GROUP - Static restrictions on the dispatch group: 0
# ALL: Dispatch Logic - number of cycles where we saw N instructions dispatched:
# ALL-NEXT: [# dispatched], [# cycles]
# ALL-NEXT: 0, 22 (21.4%)
# ALL-NEXT: 2, 19 (18.4%)
# ALL-NEXT: 1, 62 (60.2%)
# ALL: Schedulers - number of cycles where we saw N instructions issued:
# ALL-NEXT: [# issued], [# cycles]
# ALL-NEXT: 0, 3 (2.9%)
# ALL-NEXT: 1, 100 (97.1%)
# ALL: Scheduler's queue usage:
# ALL-NEXT: JALU01, 20/20
# ALL-NEXT: JFPU01, 0/18
# ALL-NEXT: JLSAGU, 0/12
# ALL: Retire Control Unit - number of cycles where we saw N instructions retired:
# ALL-NEXT: [# retired], [# cycles]
# ALL-NEXT: 0, 3 (2.9%)
# ALL-NEXT: 1, 100 (97.1%)
# ALL: Register File statistics:
# ALL-NEXT: Total number of mappings created: 200
# ALL-NEXT: Max number of mappings used: 44
# ALL: * Register File #1 -- FpuPRF:
# ALL-NEXT: Number of physical registers: 72
# ALL-NEXT: Total number of mappings created: 0
# ALL-NEXT: Max number of mappings used: 0
# ALL: * Register File #2 -- IntegerPRF:
# ALL-NEXT: Number of physical registers: 64
# ALL-NEXT: Total number of mappings created: 200
# ALL-NEXT: Max number of mappings used: 44
# FULLREPORT: Resources:
# FULLREPORT-NEXT: [0] - JALU0
# FULLREPORT-NEXT: [1] - JALU1
# FULLREPORT-NEXT: [2] - JDiv
# FULLREPORT-NEXT: [3] - JFPA
# FULLREPORT-NEXT: [4] - JFPM
# FULLREPORT-NEXT: [5] - JFPU0
# FULLREPORT-NEXT: [6] - JFPU1
# FULLREPORT-NEXT: [7] - JLAGU
# FULLREPORT-NEXT: [8] - JMul
# FULLREPORT-NEXT: [9] - JSAGU
# FULLREPORT-NEXT: [10] - JSTC
# FULLREPORT-NEXT: [11] - JVALU0
# FULLREPORT-NEXT: [12] - JVALU1
# FULLREPORT-NEXT: [13] - JVIMUL
# NORPV: Timeline view:
# NORPV-NEXT: 012
# NORPV-NEXT: Index 0123456789
# FULLREPORT: Resource pressure per iteration:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - -
# NORPV: [0,0] DeER . . . addl %eax, %eax
# NORPV-NEXT: [1,0] D=eER. . . addl %eax, %eax
# NORPV-NEXT: [2,0] .D=eER . . addl %eax, %eax
# NORPV-NEXT: [3,0] .D==eER . . addl %eax, %eax
# NORPV-NEXT: [4,0] . D==eER . . addl %eax, %eax
# NORPV-NEXT: [5,0] . D===eER . . addl %eax, %eax
# NORPV-NEXT: [6,0] . D===eER. . addl %eax, %eax
# NORPV-NEXT: [7,0] . D====eER . addl %eax, %eax
# NORPV-NEXT: [8,0] . D====eER. addl %eax, %eax
# NORPV-NEXT: [9,0] . D=====eER addl %eax, %eax
# NORPV: Average Wait times (based on the timeline view):
# NORPV-NEXT: [0]: Executions
# NORPV-NEXT: [1]: Average time spent waiting in a scheduler's queue
# NORPV-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
# NORPV-NEXT: [3]: Average time elapsed from WB until retire stage
# FULLREPORT: Resource pressure by instruction:
# FULLREPORT-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions:
# FULLREPORT-NEXT: 0.50 0.50 - - - - - - - - - - - - addl %eax, %eax
# NORPV: [0] [1] [2] [3]
# NORPV-NEXT: 0. 10 3.5 0.1 0.0 addl %eax, %eax
# FULLREPORT: Timeline view:
# FULLREPORT-NEXT: 012
# FULLREPORT-NEXT: Index 0123456789
# FULLREPORT: [0,0] DeER . . . addl %eax, %eax
# FULLREPORT-NEXT: [1,0] D=eER. . . addl %eax, %eax
# FULLREPORT-NEXT: [2,0] .D=eER . . addl %eax, %eax
# FULLREPORT-NEXT: [3,0] .D==eER . . addl %eax, %eax
# FULLREPORT-NEXT: [4,0] . D==eER . . addl %eax, %eax
# FULLREPORT-NEXT: [5,0] . D===eER . . addl %eax, %eax
# FULLREPORT-NEXT: [6,0] . D===eER. . addl %eax, %eax
# FULLREPORT-NEXT: [7,0] . D====eER . addl %eax, %eax
# FULLREPORT-NEXT: [8,0] . D====eER. addl %eax, %eax
# FULLREPORT-NEXT: [9,0] . D=====eER addl %eax, %eax
# FULLREPORT: Average Wait times (based on the timeline view):
# FULLREPORT-NEXT: [0]: Executions
# FULLREPORT-NEXT: [1]: Average time spent waiting in a scheduler's queue
# FULLREPORT-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
# FULLREPORT-NEXT: [3]: Average time elapsed from WB until retire stage
# FULLREPORT: [0] [1] [2] [3]
# FULLREPORT-NEXT: 0. 10 3.5 0.1 0.0 addl %eax, %eax

View File

@ -154,6 +154,15 @@ static cl::opt<bool> PrintInstructionInfoView(
cl::desc("Print the instruction info view (enabled by default)"),
cl::cat(ViewOptions), cl::init(true));
static cl::opt<bool> EnableAllStats("all-stats",
cl::desc("Print all hardware statistics"),
cl::cat(ViewOptions), cl::init(false));
static cl::opt<bool>
EnableAllViews("all-views",
cl::desc("Print all views including hardware statistics"),
cl::cat(ViewOptions), cl::init(false));
namespace {
const Target *getTarget(const char *ProgName) {
@ -273,6 +282,32 @@ public:
};
} // end of anonymous namespace
static void processOptionImpl(cl::opt<bool> &O, const cl::opt<bool> &Default) {
if (!O.getNumOccurrences() || O.getPosition() < Default.getPosition())
O = Default.getValue();
}
static void processViewOptions() {
if (!EnableAllViews.getNumOccurrences() &&
!EnableAllStats.getNumOccurrences())
return;
if (EnableAllViews.getNumOccurrences()) {
processOptionImpl(PrintResourcePressureView, EnableAllViews);
processOptionImpl(PrintTimelineView, EnableAllViews);
processOptionImpl(PrintInstructionInfoView, EnableAllViews);
}
const cl::opt<bool> &Default =
EnableAllViews.getPosition() < EnableAllStats.getPosition()
? EnableAllStats
: EnableAllViews;
processOptionImpl(PrintRegisterFileStats, Default);
processOptionImpl(PrintDispatchStats, Default);
processOptionImpl(PrintSchedulerStats, Default);
processOptionImpl(PrintRetireStats, Default);
}
int main(int argc, char **argv) {
InitLLVM X(argc, argv);
@ -309,6 +344,9 @@ int main(int argc, char **argv) {
return 1;
}
// Apply overrides to llvm-mca specific options.
processViewOptions();
SourceMgr SrcMgr;
// Tell SrcMgr about this buffer, which is what the parser will pick up.