[X86] Added missing RCL/RCR schedule overrides to the generic SNB model
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 23 Sep 2018 17:40:24 +0000 (17:40 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 23 Sep 2018 17:40:24 +0000 (17:40 +0000)
The SandyBridge model was missing schedule values for the RCL/RCR values - instead using the (incredibly optimistic) WriteShift (now WriteRotate) defaults.

I've added overrides with more realistic (slow) values, based on a mixture of Agner/instlatx64 numbers and what later Intel models do as well.

This is necessary to allow WriteRotate to be updated to remove other rotate overrides.

It'd probably be a good idea to investigate a WriteRotateCarry class at some point but its not high priority given the unusualness of these instructions.

llvm-svn: 342842

llvm/lib/Target/X86/X86SchedSandyBridge.td
llvm/test/CodeGen/X86/schedule-x86_64.ll
llvm/test/tools/llvm-mca/X86/Generic/resources-x86_64.s
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-x86_64.s

index d6a73a3..f805e82 100644 (file)
@@ -655,6 +655,14 @@ def SBWriteResGroup22 : SchedWriteRes<[SBPort0,SBPort5]> {
 }
 def: InstRW<[SBWriteResGroup22], (instregex "(V?)EXTRACTPSrr")>;
 
+def SBWriteResGroup23 : SchedWriteRes<[SBPort05]> {
+  let Latency = 2;
+  let NumMicroOps = 3;
+  let ResourceCycles = [3];
+}
+def: InstRW<[SBWriteResGroup23], (instregex "RCL(8|16|32|64)r1",
+                                            "RCR(8|16|32|64)r1")>;
+
 def SBWriteResGroup23_2 : SchedWriteRes<[SBPort05]> {
   let Latency = 3;
   let NumMicroOps = 3;
@@ -729,6 +737,14 @@ def SBWriteResGroup31 : SchedWriteRes<[SBPort23]> {
 def: InstRW<[SBWriteResGroup31], (instregex "MOVSX(16|32|64)rm(8|16|32)",
                                             "MOVZX(16|32|64)rm(8|16)")>;
 
+def SBWriteResGroup76 : SchedWriteRes<[SBPort05]> {
+  let Latency = 5;
+  let NumMicroOps = 8;
+  let ResourceCycles = [8];
+}
+def: InstRW<[SBWriteResGroup76], (instregex "RCL(8|16|32|64)r(i|CL)",
+                                            "RCR(8|16|32|64)r(i|CL)")>;
+
 def SBWriteResGroup33 : SchedWriteRes<[SBPort4,SBPort23]> {
   let Latency = 5;
   let NumMicroOps = 2;
@@ -1102,6 +1118,14 @@ def SBWriteResGroup106 : SchedWriteRes<[SBPort1,SBPort23]> {
 }
 def: InstRW<[SBWriteResGroup106], (instregex "FICOM(P?)(16|32)m")>;
 
+def SBWriteResGroup108 : SchedWriteRes<[SBPort05,SBPort23]> {\r
+  let Latency = 11;\r
+  let NumMicroOps = 11;\r
+  let ResourceCycles = [7,4];\r
+}\r
+def: InstRW<[SBWriteResGroup108], (instregex "RCL(8|16|32|64)m",\r
+                                             "RCR(8|16|32|64)m")>;
+
 def SBWriteResGroup111 : SchedWriteRes<[SBPort0,SBPort23]> {
   let Latency = 12;
   let NumMicroOps = 2;
index 0a9eee2..30289cd 100644 (file)
@@ -9972,18 +9972,18 @@ define void @test_rcl_rcr_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
 ; GENERIC-LABEL: test_rcl_rcr_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
-; GENERIC-NEXT:    rclb %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rcrb %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rclb (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrb (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclb $7, %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rcrb $7, %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rclb $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrb $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclb %cl, %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rcrb %cl, %dil # sched: [1:0.50]
-; GENERIC-NEXT:    rclb %cl, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrb %cl, (%rdx) # sched: [6:1.00]
+; GENERIC-NEXT:    rclb %dil # sched: [2:1.50]
+; GENERIC-NEXT:    rcrb %dil # sched: [2:1.50]
+; GENERIC-NEXT:    rclb (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrb (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclb $7, %dil # sched: [5:4.00]
+; GENERIC-NEXT:    rcrb $7, %dil # sched: [5:4.00]
+; GENERIC-NEXT:    rclb $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrb $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclb %cl, %dil # sched: [5:4.00]
+; GENERIC-NEXT:    rcrb %cl, %dil # sched: [5:4.00]
+; GENERIC-NEXT:    rclb %cl, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrb %cl, (%rdx) # sched: [11:3.50]
 ; GENERIC-NEXT:    #NO_APP
 ; GENERIC-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10026,18 +10026,18 @@ define void @test_rcl_rcr_8(i8 %a0, i8 %a1, i8 *%a2) optsize {
 ; SANDY-LABEL: test_rcl_rcr_8:
 ; SANDY:       # %bb.0:
 ; SANDY-NEXT:    #APP
-; SANDY-NEXT:    rclb %dil # sched: [1:0.50]
-; SANDY-NEXT:    rcrb %dil # sched: [1:0.50]
-; SANDY-NEXT:    rclb (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrb (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclb $7, %dil # sched: [1:0.50]
-; SANDY-NEXT:    rcrb $7, %dil # sched: [1:0.50]
-; SANDY-NEXT:    rclb $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrb $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclb %cl, %dil # sched: [1:0.50]
-; SANDY-NEXT:    rcrb %cl, %dil # sched: [1:0.50]
-; SANDY-NEXT:    rclb %cl, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrb %cl, (%rdx) # sched: [6:1.00]
+; SANDY-NEXT:    rclb %dil # sched: [2:1.50]
+; SANDY-NEXT:    rcrb %dil # sched: [2:1.50]
+; SANDY-NEXT:    rclb (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrb (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclb $7, %dil # sched: [5:4.00]
+; SANDY-NEXT:    rcrb $7, %dil # sched: [5:4.00]
+; SANDY-NEXT:    rclb $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrb $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclb %cl, %dil # sched: [5:4.00]
+; SANDY-NEXT:    rcrb %cl, %dil # sched: [5:4.00]
+; SANDY-NEXT:    rclb %cl, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrb %cl, (%rdx) # sched: [11:3.50]
 ; SANDY-NEXT:    #NO_APP
 ; SANDY-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10155,18 +10155,18 @@ define void @test_rcl_rcr_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
 ; GENERIC-LABEL: test_rcl_rcr_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
-; GENERIC-NEXT:    rclw %di # sched: [1:0.50]
-; GENERIC-NEXT:    rcrw %di # sched: [1:0.50]
-; GENERIC-NEXT:    rclw (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrw (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclw $7, %di # sched: [1:0.50]
-; GENERIC-NEXT:    rcrw $7, %di # sched: [1:0.50]
-; GENERIC-NEXT:    rclw $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrw $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclw %cl, %di # sched: [1:0.50]
-; GENERIC-NEXT:    rcrw %cl, %di # sched: [1:0.50]
-; GENERIC-NEXT:    rclw %cl, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrw %cl, (%rdx) # sched: [6:1.00]
+; GENERIC-NEXT:    rclw %di # sched: [2:1.50]
+; GENERIC-NEXT:    rcrw %di # sched: [2:1.50]
+; GENERIC-NEXT:    rclw (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrw (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclw $7, %di # sched: [5:4.00]
+; GENERIC-NEXT:    rcrw $7, %di # sched: [5:4.00]
+; GENERIC-NEXT:    rclw $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrw $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclw %cl, %di # sched: [5:4.00]
+; GENERIC-NEXT:    rcrw %cl, %di # sched: [5:4.00]
+; GENERIC-NEXT:    rclw %cl, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrw %cl, (%rdx) # sched: [11:3.50]
 ; GENERIC-NEXT:    #NO_APP
 ; GENERIC-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10209,18 +10209,18 @@ define void @test_rcl_rcr_16(i16 %a0, i16 %a1, i16 *%a2) optsize {
 ; SANDY-LABEL: test_rcl_rcr_16:
 ; SANDY:       # %bb.0:
 ; SANDY-NEXT:    #APP
-; SANDY-NEXT:    rclw %di # sched: [1:0.50]
-; SANDY-NEXT:    rcrw %di # sched: [1:0.50]
-; SANDY-NEXT:    rclw (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrw (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclw $7, %di # sched: [1:0.50]
-; SANDY-NEXT:    rcrw $7, %di # sched: [1:0.50]
-; SANDY-NEXT:    rclw $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrw $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclw %cl, %di # sched: [1:0.50]
-; SANDY-NEXT:    rcrw %cl, %di # sched: [1:0.50]
-; SANDY-NEXT:    rclw %cl, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrw %cl, (%rdx) # sched: [6:1.00]
+; SANDY-NEXT:    rclw %di # sched: [2:1.50]
+; SANDY-NEXT:    rcrw %di # sched: [2:1.50]
+; SANDY-NEXT:    rclw (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrw (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclw $7, %di # sched: [5:4.00]
+; SANDY-NEXT:    rcrw $7, %di # sched: [5:4.00]
+; SANDY-NEXT:    rclw $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrw $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclw %cl, %di # sched: [5:4.00]
+; SANDY-NEXT:    rcrw %cl, %di # sched: [5:4.00]
+; SANDY-NEXT:    rclw %cl, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrw %cl, (%rdx) # sched: [11:3.50]
 ; SANDY-NEXT:    #NO_APP
 ; SANDY-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10338,18 +10338,18 @@ define void @test_rcl_rcr_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
 ; GENERIC-LABEL: test_rcl_rcr_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
-; GENERIC-NEXT:    rcll %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrl %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcll (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrl (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcll $7, %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrl $7, %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcll $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrl $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcll %cl, %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrl %cl, %edi # sched: [1:0.50]
-; GENERIC-NEXT:    rcll %cl, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrl %cl, (%rdx) # sched: [6:1.00]
+; GENERIC-NEXT:    rcll %edi # sched: [2:1.50]
+; GENERIC-NEXT:    rcrl %edi # sched: [2:1.50]
+; GENERIC-NEXT:    rcll (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrl (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcll $7, %edi # sched: [5:4.00]
+; GENERIC-NEXT:    rcrl $7, %edi # sched: [5:4.00]
+; GENERIC-NEXT:    rcll $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrl $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcll %cl, %edi # sched: [5:4.00]
+; GENERIC-NEXT:    rcrl %cl, %edi # sched: [5:4.00]
+; GENERIC-NEXT:    rcll %cl, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrl %cl, (%rdx) # sched: [11:3.50]
 ; GENERIC-NEXT:    #NO_APP
 ; GENERIC-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10392,18 +10392,18 @@ define void @test_rcl_rcr_32(i32 %a0, i32 %a1, i32 *%a2) optsize {
 ; SANDY-LABEL: test_rcl_rcr_32:
 ; SANDY:       # %bb.0:
 ; SANDY-NEXT:    #APP
-; SANDY-NEXT:    rcll %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcrl %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcll (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrl (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcll $7, %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcrl $7, %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcll $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrl $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcll %cl, %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcrl %cl, %edi # sched: [1:0.50]
-; SANDY-NEXT:    rcll %cl, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrl %cl, (%rdx) # sched: [6:1.00]
+; SANDY-NEXT:    rcll %edi # sched: [2:1.50]
+; SANDY-NEXT:    rcrl %edi # sched: [2:1.50]
+; SANDY-NEXT:    rcll (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrl (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcll $7, %edi # sched: [5:4.00]
+; SANDY-NEXT:    rcrl $7, %edi # sched: [5:4.00]
+; SANDY-NEXT:    rcll $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrl $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcll %cl, %edi # sched: [5:4.00]
+; SANDY-NEXT:    rcrl %cl, %edi # sched: [5:4.00]
+; SANDY-NEXT:    rcll %cl, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrl %cl, (%rdx) # sched: [11:3.50]
 ; SANDY-NEXT:    #NO_APP
 ; SANDY-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10521,18 +10521,18 @@ define void @test_rcl_rcr_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
 ; GENERIC-LABEL: test_rcl_rcr_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
-; GENERIC-NEXT:    rclq %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrq %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rclq (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrq (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclq $7, %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrq $7, %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rclq $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrq $7, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rclq %cl, %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rcrq %cl, %rdi # sched: [1:0.50]
-; GENERIC-NEXT:    rclq %cl, (%rdx) # sched: [6:1.00]
-; GENERIC-NEXT:    rcrq %cl, (%rdx) # sched: [6:1.00]
+; GENERIC-NEXT:    rclq %rdi # sched: [2:1.50]
+; GENERIC-NEXT:    rcrq %rdi # sched: [2:1.50]
+; GENERIC-NEXT:    rclq (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrq (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclq $7, %rdi # sched: [5:4.00]
+; GENERIC-NEXT:    rcrq $7, %rdi # sched: [5:4.00]
+; GENERIC-NEXT:    rclq $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrq $7, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rclq %cl, %rdi # sched: [5:4.00]
+; GENERIC-NEXT:    rcrq %cl, %rdi # sched: [5:4.00]
+; GENERIC-NEXT:    rclq %cl, (%rdx) # sched: [11:3.50]
+; GENERIC-NEXT:    rcrq %cl, (%rdx) # sched: [11:3.50]
 ; GENERIC-NEXT:    #NO_APP
 ; GENERIC-NEXT:    retq # sched: [1:1.00]
 ;
@@ -10575,18 +10575,18 @@ define void @test_rcl_rcr_64(i64 %a0, i64 %a1, i64 *%a2) optsize {
 ; SANDY-LABEL: test_rcl_rcr_64:
 ; SANDY:       # %bb.0:
 ; SANDY-NEXT:    #APP
-; SANDY-NEXT:    rclq %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rcrq %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rclq (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrq (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclq $7, %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rcrq $7, %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rclq $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrq $7, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rclq %cl, %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rcrq %cl, %rdi # sched: [1:0.50]
-; SANDY-NEXT:    rclq %cl, (%rdx) # sched: [6:1.00]
-; SANDY-NEXT:    rcrq %cl, (%rdx) # sched: [6:1.00]
+; SANDY-NEXT:    rclq %rdi # sched: [2:1.50]
+; SANDY-NEXT:    rcrq %rdi # sched: [2:1.50]
+; SANDY-NEXT:    rclq (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrq (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclq $7, %rdi # sched: [5:4.00]
+; SANDY-NEXT:    rcrq $7, %rdi # sched: [5:4.00]
+; SANDY-NEXT:    rclq $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrq $7, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rclq %cl, %rdi # sched: [5:4.00]
+; SANDY-NEXT:    rcrq %cl, %rdi # sched: [5:4.00]
+; SANDY-NEXT:    rclq %cl, (%rdx) # sched: [11:3.50]
+; SANDY-NEXT:    rcrq %cl, (%rdx) # sched: [11:3.50]
 ; SANDY-NEXT:    #NO_APP
 ; SANDY-NEXT:    retq # sched: [1:1.00]
 ;
index ed66bc6..2ab041c 100644 (file)
@@ -1235,54 +1235,54 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      100   0.33                  U     outsw  (%rsi), %dx
 # CHECK-NEXT:  1      100   0.33                  U     outsl  (%rsi), %dx
 # CHECK-NEXT:  4      4     1.33    *      *      U     pause
-# CHECK-NEXT:  1      1     0.50                        rclb   %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclb   $7, %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   $7, %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclb   %cl, %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   %cl, %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   $7, %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   $7, %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   %cl, %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   %cl, %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   $7, %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   $7, %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   %cl, %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   %cl, %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   $7, %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   $7, %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   %cl, %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   %cl, %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclb   %dil
+# CHECK-NEXT:  3      2     1.50                        rcrb   %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclb   $7, %dil
+# CHECK-NEXT:  8      5     4.00                        rcrb   $7, %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclb   %cl, %dil
+# CHECK-NEXT:  8      5     4.00                        rcrb   %cl, %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclw   %di
+# CHECK-NEXT:  3      2     1.50                        rcrw   %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclw   $7, %di
+# CHECK-NEXT:  8      5     4.00                        rcrw   $7, %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclw   %cl, %di
+# CHECK-NEXT:  8      5     4.00                        rcrw   %cl, %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rcll   %edi
+# CHECK-NEXT:  3      2     1.50                        rcrl   %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rcll   $7, %edi
+# CHECK-NEXT:  8      5     4.00                        rcrl   $7, %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rcll   %cl, %edi
+# CHECK-NEXT:  8      5     4.00                        rcrl   %cl, %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclq   %rdi
+# CHECK-NEXT:  3      2     1.50                        rcrq   %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclq   $7, %rdi
+# CHECK-NEXT:  8      5     4.00                        rcrq   $7, %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclq   %cl, %rdi
+# CHECK-NEXT:  8      5     4.00                        rcrq   %cl, %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   %cl, (%rax)
 # CHECK-NEXT:  2      2     1.00                        rolb   %dil
 # CHECK-NEXT:  2      2     1.00                        rorb   %dil
 # CHECK-NEXT:  5      8     1.00    *      *            rolb   (%rax)
@@ -1620,7 +1620,7 @@ xorq (%rax), %rdi
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
-# CHECK-NEXT: 160.00  -     435.83 221.33 246.00 435.83 292.00 292.00
+# CHECK-NEXT: 160.00  -     571.83 221.33 222.00 571.83 316.00 316.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]  Instructions:
@@ -1998,54 +1998,54 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     outsw    (%rsi), %dx
 # CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     outsl    (%rsi), %dx
 # CHECK-NEXT:  -      -     1.00   1.00    -     2.00    -      -     pause
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     $7, %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     $7, %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     %cl, %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     %cl, %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     $7, %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     $7, %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     %cl, %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     %cl, %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     $7, %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     $7, %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     %cl, %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     %cl, %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     $7, %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     $7, %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     %cl, %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     %cl, %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclb     %dil
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrb     %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclb     $7, %dil
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrb     $7, %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclb     %cl, %dil
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrb     %cl, %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclw     %di
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrw     %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclw     $7, %di
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrw     $7, %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclw     %cl, %di
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrw     %cl, %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcll     %edi
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrl     %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcll     $7, %edi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrl     $7, %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcll     %cl, %edi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrl     %cl, %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclq     %rdi
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrq     %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclq     $7, %rdi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrq     $7, %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclq     %cl, %rdi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrq     %cl, %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     %cl, (%rax)
 # CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -     rolb     %dil
 # CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -     rorb     %dil
 # CHECK-NEXT:  -      -     1.00    -     1.00   1.00   1.00   1.00   rolb     (%rax)
index 6fb5e83..f255cbd 100644 (file)
@@ -1237,54 +1237,54 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      100   0.33                  U     outsw  (%rsi), %dx
 # CHECK-NEXT:  1      100   0.33                  U     outsl  (%rsi), %dx
 # CHECK-NEXT:  4      4     1.33    *      *      U     pause
-# CHECK-NEXT:  1      1     0.50                        rclb   %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclb   $7, %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   $7, %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclb   %cl, %dil
-# CHECK-NEXT:  1      1     0.50                        rcrb   %cl, %dil
-# CHECK-NEXT:  3      6     1.00           *            rclb   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrb   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   $7, %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   $7, %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclw   %cl, %di
-# CHECK-NEXT:  1      1     0.50                        rcrw   %cl, %di
-# CHECK-NEXT:  3      6     1.00           *            rclw   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrw   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   $7, %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   $7, %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rcll   %cl, %edi
-# CHECK-NEXT:  1      1     0.50                        rcrl   %cl, %edi
-# CHECK-NEXT:  3      6     1.00           *            rcll   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrl   %cl, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   $7, %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   $7, %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   $7, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   $7, (%rax)
-# CHECK-NEXT:  1      1     0.50                        rclq   %cl, %rdi
-# CHECK-NEXT:  1      1     0.50                        rcrq   %cl, %rdi
-# CHECK-NEXT:  3      6     1.00           *            rclq   %cl, (%rax)
-# CHECK-NEXT:  3      6     1.00           *            rcrq   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclb   %dil
+# CHECK-NEXT:  3      2     1.50                        rcrb   %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclb   $7, %dil
+# CHECK-NEXT:  8      5     4.00                        rcrb   $7, %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclb   %cl, %dil
+# CHECK-NEXT:  8      5     4.00                        rcrb   %cl, %dil
+# CHECK-NEXT:  11     11    3.50           *            rclb   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrb   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclw   %di
+# CHECK-NEXT:  3      2     1.50                        rcrw   %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclw   $7, %di
+# CHECK-NEXT:  8      5     4.00                        rcrw   $7, %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclw   %cl, %di
+# CHECK-NEXT:  8      5     4.00                        rcrw   %cl, %di
+# CHECK-NEXT:  11     11    3.50           *            rclw   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrw   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rcll   %edi
+# CHECK-NEXT:  3      2     1.50                        rcrl   %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rcll   $7, %edi
+# CHECK-NEXT:  8      5     4.00                        rcrl   $7, %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rcll   %cl, %edi
+# CHECK-NEXT:  8      5     4.00                        rcrl   %cl, %edi
+# CHECK-NEXT:  11     11    3.50           *            rcll   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrl   %cl, (%rax)
+# CHECK-NEXT:  3      2     1.50                        rclq   %rdi
+# CHECK-NEXT:  3      2     1.50                        rcrq   %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclq   $7, %rdi
+# CHECK-NEXT:  8      5     4.00                        rcrq   $7, %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   $7, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   $7, (%rax)
+# CHECK-NEXT:  8      5     4.00                        rclq   %cl, %rdi
+# CHECK-NEXT:  8      5     4.00                        rcrq   %cl, %rdi
+# CHECK-NEXT:  11     11    3.50           *            rclq   %cl, (%rax)
+# CHECK-NEXT:  11     11    3.50           *            rcrq   %cl, (%rax)
 # CHECK-NEXT:  2      2     1.00                        rolb   %dil
 # CHECK-NEXT:  2      2     1.00                        rorb   %dil
 # CHECK-NEXT:  5      8     1.00    *      *            rolb   (%rax)
@@ -1622,7 +1622,7 @@ xorq (%rax), %rdi
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
-# CHECK-NEXT: 160.00  -     435.83 221.33 246.00 435.83 292.00 292.00
+# CHECK-NEXT: 160.00  -     571.83 221.33 222.00 571.83 316.00 316.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]  Instructions:
@@ -2000,54 +2000,54 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     outsw    (%rsi), %dx
 # CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     outsl    (%rsi), %dx
 # CHECK-NEXT:  -      -     1.00   1.00    -     2.00    -      -     pause
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     $7, %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     $7, %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclb     %cl, %dil
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrb     %cl, %dil
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclb     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrb     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     $7, %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     $7, %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclw     %cl, %di
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrw     %cl, %di
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclw     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrw     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     $7, %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     $7, %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcll     %cl, %edi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrl     %cl, %edi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcll     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrl     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     $7, %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     $7, %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     $7, (%rax)
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rclq     %cl, %rdi
-# CHECK-NEXT:  -      -     0.50    -      -     0.50    -      -     rcrq     %cl, %rdi
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rclq     %cl, (%rax)
-# CHECK-NEXT:  -      -     0.50    -     1.00   0.50   1.00   1.00   rcrq     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclb     %dil
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrb     %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclb     $7, %dil
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrb     $7, %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclb     %cl, %dil
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrb     %cl, %dil
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclb     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrb     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclw     %di
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrw     %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclw     $7, %di
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrw     $7, %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclw     %cl, %di
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrw     %cl, %di
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclw     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrw     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcll     %edi
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrl     %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcll     $7, %edi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrl     $7, %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcll     %cl, %edi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrl     %cl, %edi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcll     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrl     %cl, (%rax)
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rclq     %rdi
+# CHECK-NEXT:  -      -     1.50    -      -     1.50    -      -     rcrq     %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclq     $7, %rdi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrq     $7, %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     $7, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     $7, (%rax)
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rclq     %cl, %rdi
+# CHECK-NEXT:  -      -     4.00    -      -     4.00    -      -     rcrq     %cl, %rdi
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rclq     %cl, (%rax)
+# CHECK-NEXT:  -      -     3.50    -      -     3.50   2.00   2.00   rcrq     %cl, (%rax)
 # CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -     rolb     %dil
 # CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -     rorb     %dil
 # CHECK-NEXT:  -      -     1.00    -     1.00   1.00   1.00   1.00   rolb     (%rax)