[X86][Atom] Fix BSR/BSF uops + port usage
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 1 Oct 2021 20:53:00 +0000 (21:53 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 2 Oct 2021 18:09:44 +0000 (19:09 +0100)
Both ports are required for BitScan ops. Update the uops counts + port usage based off the most recent llvm-exegesis captures (PR36895) and what Intel AoM / Agner reports as well.

llvm/lib/Target/X86/X86ScheduleAtom.td
llvm/test/tools/llvm-mca/X86/Atom/resources-x86_64.s

index 9f41b45..97dcef4 100644 (file)
@@ -139,8 +139,8 @@ defm : X86WriteRes<WriteBitTestSet,      [AtomPort1],  1, [1], 1>;
 def : WriteRes<WriteLEA, [AtomPort1]>;
 
 // Bit counts.
-defm : AtomWriteResPair<WriteBSF, [AtomPort01], [AtomPort01], 16, 16, [16], [16]>;
-defm : AtomWriteResPair<WriteBSR, [AtomPort01], [AtomPort01], 16, 16, [16], [16]>;
+defm : AtomWriteResPair<WriteBSF, [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 16, 16, [16,16], [16,16], 10, 10>;
+defm : AtomWriteResPair<WriteBSR, [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 16, 16, [16,16], [16,16], 10, 10>;
 defm : X86WriteResPairUnsupported<WritePOPCNT>;
 defm : X86WriteResPairUnsupported<WriteLZCNT>;
 defm : X86WriteResPairUnsupported<WriteTZCNT>;
index cad85f1..8a65c75 100644 (file)
@@ -1169,18 +1169,18 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      1     1.00    *      *            andq   %rsi, (%rax)
 # CHECK-NEXT:  1      1     1.00    *      *            lock           andq    %rsi, (%rax)
 # CHECK-NEXT:  1      1     1.00    *                   andq   (%rax), %rdi
-# CHECK-NEXT:  1      16    8.00                        bsfw   %si, %di
-# CHECK-NEXT:  1      16    8.00                        bsrw   %si, %di
-# CHECK-NEXT:  1      16    8.00    *                   bsfw   (%rax), %di
-# CHECK-NEXT:  1      16    8.00    *                   bsrw   (%rax), %di
-# CHECK-NEXT:  1      16    8.00                        bsfl   %esi, %edi
-# CHECK-NEXT:  1      16    8.00                        bsrl   %esi, %edi
-# CHECK-NEXT:  1      16    8.00    *                   bsfl   (%rax), %edi
-# CHECK-NEXT:  1      16    8.00    *                   bsrl   (%rax), %edi
-# CHECK-NEXT:  1      16    8.00                        bsfq   %rsi, %rdi
-# CHECK-NEXT:  1      16    8.00                        bsrq   %rsi, %rdi
-# CHECK-NEXT:  1      16    8.00    *                   bsfq   (%rax), %rdi
-# CHECK-NEXT:  1      16    8.00    *                   bsrq   (%rax), %rdi
+# CHECK-NEXT:  10     16    16.00                       bsfw   %si, %di
+# CHECK-NEXT:  10     16    16.00                       bsrw   %si, %di
+# CHECK-NEXT:  10     16    16.00   *                   bsfw   (%rax), %di
+# CHECK-NEXT:  10     16    16.00   *                   bsrw   (%rax), %di
+# CHECK-NEXT:  10     16    16.00                       bsfl   %esi, %edi
+# CHECK-NEXT:  10     16    16.00                       bsrl   %esi, %edi
+# CHECK-NEXT:  10     16    16.00   *                   bsfl   (%rax), %edi
+# CHECK-NEXT:  10     16    16.00   *                   bsrl   (%rax), %edi
+# CHECK-NEXT:  10     16    16.00                       bsfq   %rsi, %rdi
+# CHECK-NEXT:  10     16    16.00                       bsrq   %rsi, %rdi
+# CHECK-NEXT:  10     16    16.00   *                   bsfq   (%rax), %rdi
+# CHECK-NEXT:  10     16    16.00   *                   bsrq   (%rax), %rdi
 # CHECK-NEXT:  1      1     1.00                        bswapl %eax
 # CHECK-NEXT:  1      1     1.00                        bswapq %rax
 # CHECK-NEXT:  1      1     1.00                        btw    %si, %di
@@ -1947,7 +1947,7 @@ xorq (%rax), %rdi
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 3616.50 3163.50
+# CHECK-NEXT: 3712.50 3259.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -2090,18 +2090,18 @@ xorq (%rax), %rdi
 # CHECK-NEXT: 1.00    -     andq       %rsi, (%rax)
 # CHECK-NEXT: 1.00    -     lock               andq    %rsi, (%rax)
 # CHECK-NEXT: 1.00    -     andq       (%rax), %rdi
-# CHECK-NEXT: 8.00   8.00   bsfw       %si, %di
-# CHECK-NEXT: 8.00   8.00   bsrw       %si, %di
-# CHECK-NEXT: 8.00   8.00   bsfw       (%rax), %di
-# CHECK-NEXT: 8.00   8.00   bsrw       (%rax), %di
-# CHECK-NEXT: 8.00   8.00   bsfl       %esi, %edi
-# CHECK-NEXT: 8.00   8.00   bsrl       %esi, %edi
-# CHECK-NEXT: 8.00   8.00   bsfl       (%rax), %edi
-# CHECK-NEXT: 8.00   8.00   bsrl       (%rax), %edi
-# CHECK-NEXT: 8.00   8.00   bsfq       %rsi, %rdi
-# CHECK-NEXT: 8.00   8.00   bsrq       %rsi, %rdi
-# CHECK-NEXT: 8.00   8.00   bsfq       (%rax), %rdi
-# CHECK-NEXT: 8.00   8.00   bsrq       (%rax), %rdi
+# CHECK-NEXT: 16.00  16.00  bsfw       %si, %di
+# CHECK-NEXT: 16.00  16.00  bsrw       %si, %di
+# CHECK-NEXT: 16.00  16.00  bsfw       (%rax), %di
+# CHECK-NEXT: 16.00  16.00  bsrw       (%rax), %di
+# CHECK-NEXT: 16.00  16.00  bsfl       %esi, %edi
+# CHECK-NEXT: 16.00  16.00  bsrl       %esi, %edi
+# CHECK-NEXT: 16.00  16.00  bsfl       (%rax), %edi
+# CHECK-NEXT: 16.00  16.00  bsrl       (%rax), %edi
+# CHECK-NEXT: 16.00  16.00  bsfq       %rsi, %rdi
+# CHECK-NEXT: 16.00  16.00  bsrq       %rsi, %rdi
+# CHECK-NEXT: 16.00  16.00  bsfq       (%rax), %rdi
+# CHECK-NEXT: 16.00  16.00  bsrq       (%rax), %rdi
 # CHECK-NEXT: 1.00    -     bswapl     %eax
 # CHECK-NEXT: 1.00    -     bswapq     %rax
 # CHECK-NEXT:  -     1.00   btw        %si, %di