[llvm-bugs] [Bug 41275] New: [llvm-exegesis] analysis: incorrect analysis for chained(?) instructions?
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Mar 28 07:31:44 PDT 2019
https://bugs.llvm.org/show_bug.cgi?id=41275
Bug ID: 41275
Summary: [llvm-exegesis] analysis: incorrect analysis for
chained(?) instructions?
Product: tools
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: llvm-exegesis
Assignee: unassignedbugs at nondot.org
Reporter: lebedev.ri at gmail.com
CC: clement.courbet at gmail.com, gchatelet at google.com,
llvm-bugs at lists.llvm.org
llvm-exegesis sometimes chains instructions so that it can measure
characteristsics.
It happens e.g. for CMP, TEST, BT, SETcc, CVT*, etc.
But in analysis, that chaining does not appear to be accounted for.
Example:
$ ./bin/llvm-exegesis -num-repetitions=10000 -mode=latency -opcode-name=BT32rr
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-1ce014.o
---
mode: latency
key:
instructions:
- 'BT32rr R12D EDX'
- 'CMOVA16rr DX DX BP'
config: ''
register_initial_values:
- 'R12D=0x0'
- 'EDX=0x0'
- 'DX=0x0'
- 'BP=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 1.0454, per_snippet_value: 2.0908 }
error: ''
info: Repeating two instructions
assembled_snippet:
55415441BC00000000BA0000000066BA000066BD0000410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5410FA3D4660F47D5415C5DC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-591007.o
---
mode: latency
key:
instructions:
- 'BT32rr R11D R8D'
- 'CMOVL32rr R8D R8D R8D'
config: ''
register_initial_values:
- 'R11D=0x0'
- 'R8D=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 0.8549, per_snippet_value: 1.7098 }
error: ''
info: Repeating two instructions
assembled_snippet:
41BB0000000041B800000000450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0450FA3C3450F4CC0C3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-fba941.o
---
mode: latency
key:
instructions:
- 'BT32rr R12D ESI'
- 'SETBEr SIL'
config: ''
register_initial_values:
- 'R12D=0x0'
- 'ESI=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 1.0265, per_snippet_value: 2.053 }
error: ''
info: Repeating two instructions
assembled_snippet:
415441BC00000000BE00000000410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6410FA3F4400F96C6415CC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-ad11fe.o
---
mode: latency
key:
instructions:
- 'BT32rr R9D R12D'
- 'SETB_C32r R12D'
config: ''
register_initial_values:
- 'R9D=0x0'
- 'R12D=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 0.3787, per_snippet_value: 0.7574 }
error: ''
info: Repeating two instructions
assembled_snippet:
415441B90000000041BC00000000450FA3E1450FA3E1450FA3E1450FA3E1450FA3E1450FA3E1450FA3E1450FA3E1415CC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-97701b.o
---
mode: latency
key:
instructions:
- 'BT32rr EBX EBX'
- 'RCR16ri BX BX i_0x1'
config: ''
register_initial_values:
- 'EBX=0x0'
- 'BX=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 5.0276, per_snippet_value: 10.0552 }
error: ''
info: Repeating two instructions
assembled_snippet:
53BB0000000066BB00000FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB010FA3DB66C1DB015BC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-d11a67.o
---
mode: latency
key:
instructions:
- 'BT32rr R14D R10D'
- 'CMOVLE32rr R14D R14D R9D'
config: ''
register_initial_values:
- 'R14D=0x0'
- 'R10D=0x0'
- 'R9D=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 0.9323, per_snippet_value: 1.8646 }
error: ''
info: Repeating two instructions
assembled_snippet:
415641BE0000000041BA0000000041B900000000450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1450FA3D6450F4EF1415EC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-828f4c.o
---
mode: latency
key:
instructions:
- 'BT32rr ESI EAX'
- 'SETPr SIL'
config: ''
register_initial_values:
- 'ESI=0x0'
- 'EAX=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 0.7112, per_snippet_value: 1.4224 }
error: ''
info: Repeating two instructions
assembled_snippet:
BE00000000B8000000000FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC60FA3C6400F9AC6C3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-9f6fb0.o
---
mode: latency
key:
instructions:
- 'BT32rr R9D R11D'
- 'CMOVP64rr R9 R9 R10'
config: ''
register_initial_values:
- 'R9D=0x0'
- 'R11D=0x0'
- 'R9=0x0'
- 'R10=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 0.8673, per_snippet_value: 1.7346 }
error: ''
info: Repeating two instructions
assembled_snippet:
41B90000000041BB0000000049B9000000000000000049BA0000000000000000450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACA450FA3D94D0F4ACAC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-3c8869.o
---
mode: latency
key:
instructions:
- 'BT32rr R14D R10D'
- 'ADC64rr_REV R10 R10 R9'
config: ''
register_initial_values:
- 'R14D=0x0'
- 'R10D=0x0'
- 'R10=0x0'
- 'R9=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 1.0499, per_snippet_value: 2.0998 }
error: ''
info: Repeating two instructions
assembled_snippet:
415641BE0000000041BA0000000049BA000000000000000049B90000000000000000450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1450FA3D64D13D1415EC3
...
Check generated assembly with: /usr/bin/objdump -d /tmp/snippet-03e41c.o
---
mode: latency
key:
instructions:
- 'BT32rr EDX EDI'
- 'RCL64rCL RDI RDI'
config: ''
register_initial_values:
- 'EDX=0x0'
- 'EDI=0x0'
- 'RDI=0x0'
- 'CL=0x0'
cpu_name: bdver2
llvm_triple: x86_64-unknown-linux-gnu
num_repetitions: 10000
measurements:
- { key: latency, value: 3.7896, per_snippet_value: 7.5792 }
error: ''
info: Repeating two instructions
assembled_snippet:
BA00000000BF0000000048BF0000000000000000B1000FA3FA48D3D70FA3FA48D3D70FA3FA48D3D70FA3FA48D3D70FA3FA48D3D70FA3FA48D3D70FA3FA48D3D70FA3FA48D3D7C3
...
So for a single opcode (BT32rr), we got several wildly different
per-instruction latency values: 1.0454, 0.8549, 1.0265, 0.3787, 5.0276, 0.9323,
0.7112, 0.8673, 1.0499, 3.7896.
These are the values that analysis mode will use.
It does not appear to account for the second instruction in the snippet.
I'm not sure what it *should* be doing, but that does not seem like the correct
thing to do?
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190328/af818c55/attachment-0001.html>
More information about the llvm-bugs
mailing list