-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm-mca] Add -skip-unsupported-instructions option (#89733)
Prior to this patch, if llvm-mca encountered an instruction which parses but has no scheduler info, the instruction is always reported as unsupported, and llvm-mca halts with an error. However, it would still be useful to allow MCA to continue even in the case of instructions lacking scheduling information. Obviously if scheduling information is lacking, it's not possible to give an accurate analysis for those instructions, and therefore a warning is emitted. A user could previously have worked around such unsupported instructions manually by deleting such instructions from the input, but this provides them a way of doing this for bulk inputs where they may not have a list of such unsupported instructions to drop up front. Note that this behaviour of instructions with no scheduling information under -skip-unsupported-instructions is analagous to current instructions which fail to parse: those are currently dropped from the input with a message printed, after which the analysis continues. ~Testing the feature is a little awkward currently, it relies on an instruction which is currently marked as unsupported, which may not remain so; should the situation change it would be necessary to find an alternative unsupported instruction or drop the test.~ A test is added to check that analysis still reports an error if all instructions are removed from the input, to mirror the current behaviour of giving an error if no instructions are supplied.
- Loading branch information
1 parent
e1622e1
commit 5f79f75
Showing
5 changed files
with
116 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
llvm/test/tools/llvm-mca/X86/BtVer2/skip-unsupported-instructions-none-remain.s
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# RUN: not llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -skip-unsupported-instructions %s |& FileCheck --check-prefixes=CHECK-ALL,CHECK-SKIP %s | ||
# RUN: not llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 %s |& FileCheck --check-prefixes=CHECK-ALL,CHECK-ERROR %s | ||
|
||
# Test defends that if all instructions are skipped leaving an empty input, an error is printed. | ||
|
||
bzhi %eax, %ebx, %ecx | ||
|
||
# CHECK-ALL-NOT: error | ||
|
||
# CHECK-ERROR: error: found an unsupported instruction in the input assembly sequence, use -skip-unsupported-instructions to ignore. | ||
|
||
# CHECK-SKIP: warning: found an unsupported instruction in the input assembly sequence, skipping with -skip-unsupported-instructions, note accuracy will be impacted: | ||
# CHECK-SKIP: note: instruction: bzhil %eax, %ebx, %ecx | ||
# CHECK-SKIP: error: no assembly instructions found. |
55 changes: 52 additions & 3 deletions
55
llvm/test/tools/llvm-mca/X86/BtVer2/unsupported-instruction.s
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,55 @@ | ||
# RUN: not llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 %s 2>&1 | FileCheck %s | ||
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -skip-unsupported-instructions -timeline %s |& FileCheck --check-prefix=CHECK-SKIP %s | ||
# RUN: not llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 %s |& FileCheck --check-prefix=CHECK-ERROR %s | ||
|
||
# Test checks that unsupported instructions exit with an error, unless -skip-unsupported-instructions is passed, in which case the remaining instructions should be analysed. | ||
|
||
# CHECK-SKIP: warning: found an unsupported instruction in the input assembly sequence, skipping with -skip-unsupported-instructions, note accuracy will be impacted: | ||
# CHECK-ERROR: error: found an unsupported instruction in the input assembly sequence, use -skip-unsupported-instructions to ignore. | ||
|
||
bzhi %eax, %ebx, %ecx | ||
|
||
# CHECK: error: found an unsupported instruction in the input assembly sequence. | ||
# CHECK-NEXT: note: instruction: bzhil %eax, %ebx, %ecx | ||
# Supported instruction that may be analysed. | ||
add %eax, %eax | ||
|
||
# CHECK-SKIP: Iterations: 100 | ||
# CHECK-SKIP: Instructions: 100 | ||
# CHECK-SKIP: Total Cycles: 103 | ||
# CHECK-SKIP: Total uOps: 100 | ||
|
||
# CHECK-SKIP: Dispatch Width: 2 | ||
# CHECK-SKIP: uOps Per Cycle: 0.97 | ||
# CHECK-SKIP: IPC: 0.97 | ||
# CHECK-SKIP: Block RThroughput: 0.5 | ||
|
||
# CHECK-SKIP: Instruction Info: | ||
# CHECK-SKIP: [1]: #uOps | ||
# CHECK-SKIP: [2]: Latency | ||
# CHECK-SKIP: [3]: RThroughput | ||
# CHECK-SKIP: [4]: MayLoad | ||
# CHECK-SKIP: [5]: MayStore | ||
# CHECK-SKIP: [6]: HasSideEffects (U) | ||
|
||
# CHECK-SKIP: [1] [2] [3] [4] [5] [6] Instructions: | ||
# CHECK-SKIP: 1 1 0.50 addl %eax, %eax | ||
|
||
# CHECK-SKIP: Timeline view: | ||
|
||
# CHECK-SKIP: [0,0] DeER . . . addl %eax, %eax | ||
# CHECK-SKIP: [1,0] D=eER. . . addl %eax, %eax | ||
# CHECK-SKIP: [2,0] .D=eER . . addl %eax, %eax | ||
# CHECK-SKIP: [3,0] .D==eER . . addl %eax, %eax | ||
# CHECK-SKIP: [4,0] . D==eER . . addl %eax, %eax | ||
# CHECK-SKIP: [5,0] . D===eER . . addl %eax, %eax | ||
# CHECK-SKIP: [6,0] . D===eER. . addl %eax, %eax | ||
# CHECK-SKIP: [7,0] . D====eER . addl %eax, %eax | ||
# CHECK-SKIP: [8,0] . D====eER. addl %eax, %eax | ||
# CHECK-SKIP: [9,0] . D=====eER addl %eax, %eax | ||
|
||
# CHECK-SKIP: Average Wait times (based on the timeline view): | ||
# CHECK-SKIP: [0]: Executions | ||
# CHECK-SKIP: [1]: Average time spent waiting in a scheduler's queue | ||
# CHECK-SKIP: [2]: Average time spent waiting in a scheduler's queue while ready | ||
# CHECK-SKIP: [3]: Average time elapsed from WB until retire stage | ||
|
||
# CHECK-SKIP: [0] [1] [2] [3] | ||
# CHECK-SKIP: 0. 10 3.5 0.1 0.0 addl %eax, %eax |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters