]> granicus.if.org Git - llvm/commit
[X86][BtVer2] Fix latency of ALU RMW instructions.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 23 Aug 2019 11:34:10 +0000 (11:34 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 23 Aug 2019 11:34:10 +0000 (11:34 +0000)
commit83240b0bfa66046929cc1025aa0635dea00ff999
tree1416cc9aa31baa779d357c8a8ed9ddea17951563
parent74a6cc7ff5df17a843a2dde0bdb479d94fc9f384
[X86][BtVer2] Fix latency of ALU RMW instructions.

Excluding ADC/SBB and the bit-test instructions (BTR/BTS/BTC), the observed
latency of all other RMW integer arithmetic/logic instructions is 6cy and not
5cy.

Example (ADD):

```
addb $0, (%rsp)            # Latency: 6cy
addb $7, (%rsp)            # Latency: 6cy
addb %sil, (%rsp)          # Latency: 6cy

addw $0, (%rsp)            # Latency: 6cy
addw $511, (%rsp)          # Latency: 6cy
addw %si, (%rsp)           # Latency: 6cy

addl $0, (%rsp)            # Latency: 6cy
addl $511, (%rsp)          # Latency: 6cy
addl %esi, (%rsp)          # Latency: 6cy

addq $0, (%rsp)            # Latency: 6cy
addq $511, (%rsp)          # Latency: 6cy
addq %rsi, (%rsp)          # Latency: 6cy
```

The same latency profile applies to SUB/AND/OR/XOR/INC/DEC.

The observed latency of ADC/SBB is 7-8cy. So we need a different write to model
those.  Latency of BTS/BTR/BTC is not fixed by this patch (they are much slower
than what the model for btver2 currently reports).

Differential Revision: https://reviews.llvm.org/D66636

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369748 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ScheduleBtVer2.td
test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s