diff options
author | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-06-20 10:08:11 +0000 |
---|---|---|
committer | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-06-20 10:08:11 +0000 |
commit | 2145b13fc92c531d0218963c0dab1fb25722f3de (patch) | |
tree | 789fe54248e5f40d6972c16c1227e9c75397b7bb /lldb/packages/Python/lldbsuite/test/expression_command/ir-interpreter | |
parent | 031c748bdbacc0d3db5e5a8e37ab4d4036aa8952 (diff) | |
download | bcm5719-llvm-2145b13fc92c531d0218963c0dab1fb25722f3de.tar.gz bcm5719-llvm-2145b13fc92c531d0218963c0dab1fb25722f3de.zip |
[llvm-mca][X86] Teach how to identify register writes that implicitly clear the upper portion of a super-register.
This patch teaches llvm-mca how to identify register writes that implicitly zero
the upper portion of a super-register.
On X86-64, a general purpose register is implemented in hardware as a 64-bit
register. Quoting the Intel 64 Software Developer's Manual: "an update to the
lower 32 bits of a 64 bit integer register is architecturally defined to zero
extend the upper 32 bits". Also, a write to an XMM register performed by an AVX
instruction implicitly zeroes the upper 128 bits of the aliasing YMM register.
This patch adds a new method named clearsSuperRegisters to the MCInstrAnalysis
interface to help identify instructions that implicitly clear the upper portion
of a super-register. The rest of the patch teaches llvm-mca how to use that new
method to obtain the information, and update the register dependencies
accordingly.
I compared the kernels from tests clear-super-register-1.s and
clear-super-register-2.s against the output from perf on btver2. Previously
there was a large discrepancy between the estimated IPC and the measured IPC.
Now the differences are mostly in the noise.
Differential Revision: https://reviews.llvm.org/D48225
llvm-svn: 335113
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command/ir-interpreter')
0 files changed, 0 insertions, 0 deletions