Reported by D138359 - they were being overridden as WriteMicrocoded despite already being declared WriteMicrocoded
It also fixes a rather funny instregex mismatch that was matching the movsldup shuffle by mistake
// XGETBV.
def : InstRW<[WriteMicrocoded], (instrs XGETBV)>;
-//-- String instructions --//
-// CMPS.
-def : InstRW<[WriteMicrocoded], (instregex "CMPS(B|L|Q|W)")>;
-
-// LODSB/W.
-def : InstRW<[WriteMicrocoded], (instregex "LODS(B|W)")>;
-
-// LODSD/Q.
-def : InstRW<[WriteMicrocoded], (instregex "LODS(L|Q)")>;
-
-// MOVS.
-def : InstRW<[WriteMicrocoded], (instregex "MOVS(B|L|Q|W)")>;
-
-// SCAS.
-def : InstRW<[WriteMicrocoded], (instregex "SCAS(B|W|L|Q)")>;
-
-// STOS
-def : InstRW<[WriteMicrocoded], (instregex "STOS(B|L|Q|W)")>;
-
// XADD.
def ZnXADD : SchedWriteRes<[ZnALU]>;
def : InstRW<[ZnXADD], (instregex "XADD(8|16|32|64)rr")>;
// XGETBV.
def : InstRW<[WriteMicrocoded], (instregex "XGETBV")>;
-//-- String instructions --//
-// CMPS.
-def : InstRW<[WriteMicrocoded], (instregex "CMPS(B|L|Q|W)")>;
-
-// LODSB/W.
-def : InstRW<[WriteMicrocoded], (instregex "LODS(B|W)")>;
-
-// LODSD/Q.
-def : InstRW<[WriteMicrocoded], (instregex "LODS(L|Q)")>;
-
-// MOVS.
-def : InstRW<[WriteMicrocoded], (instregex "MOVS(B|L|Q|W)")>;
-
-// SCAS.
-def : InstRW<[WriteMicrocoded], (instregex "SCAS(B|W|L|Q)")>;
-
-// STOS
-def : InstRW<[WriteMicrocoded], (instregex "STOS(B|L|Q|W)")>;
-
// XADD.
def Zn2XADD : SchedWriteRes<[Zn2ALU]>;
def : InstRW<[Zn2XADD], (instregex "XADD(8|16|32|64)rr")>;
# CHECK-NEXT: 1 8 0.50 * movddup (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 movshdup %xmm0, %xmm2
# CHECK-NEXT: 1 8 0.50 * movshdup (%rax), %xmm2
-# CHECK-NEXT: 1 100 0.25 movsldup %xmm0, %xmm2
-# CHECK-NEXT: 1 100 0.25 * movsldup (%rax), %xmm2
+# CHECK-NEXT: 1 1 0.50 movsldup %xmm0, %xmm2
+# CHECK-NEXT: 1 8 0.50 * movsldup (%rax), %xmm2
# CHECK-NEXT: 1 100 0.25 * * U mwait
# CHECK: Resources:
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: 4.50 4.50 - - - - - - 2.00 4.00 2.00 -
+# CHECK-NEXT: 5.00 5.00 - - - - - - 3.00 5.00 2.00 -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
# CHECK-NEXT: 0.50 0.50 - - - - - - 0.50 0.50 - - movddup (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - 0.50 0.50 - - movshdup %xmm0, %xmm2
# CHECK-NEXT: 0.50 0.50 - - - - - - 0.50 0.50 - - movshdup (%rax), %xmm2
-# CHECK-NEXT: - - - - - - - - - - - - movsldup %xmm0, %xmm2
-# CHECK-NEXT: - - - - - - - - - - - - movsldup (%rax), %xmm2
+# CHECK-NEXT: - - - - - - - - 0.50 0.50 - - movsldup %xmm0, %xmm2
+# CHECK-NEXT: 0.50 0.50 - - - - - - 0.50 0.50 - - movsldup (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - - - - mwait
# CHECK-NEXT: 1 8 0.50 * movddup (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 movshdup %xmm0, %xmm2
# CHECK-NEXT: 1 8 0.50 * movshdup (%rax), %xmm2
-# CHECK-NEXT: 1 100 0.25 movsldup %xmm0, %xmm2
-# CHECK-NEXT: 1 100 0.25 * movsldup (%rax), %xmm2
+# CHECK-NEXT: 1 1 0.50 movsldup %xmm0, %xmm2
+# CHECK-NEXT: 1 8 0.50 * movsldup (%rax), %xmm2
# CHECK-NEXT: 1 100 0.25 * * U mwait
# CHECK: Resources:
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
-# CHECK-NEXT: 3.00 3.00 3.00 - - - - - - 2.00 4.00 2.00 -
+# CHECK-NEXT: 3.33 3.33 3.33 - - - - - - 3.00 5.00 2.00 -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] Instructions:
# CHECK-NEXT: 0.33 0.33 0.33 - - - - - - 0.50 0.50 - - movddup (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - 0.50 0.50 - - movshdup %xmm0, %xmm2
# CHECK-NEXT: 0.33 0.33 0.33 - - - - - - 0.50 0.50 - - movshdup (%rax), %xmm2
-# CHECK-NEXT: - - - - - - - - - - - - - movsldup %xmm0, %xmm2
-# CHECK-NEXT: - - - - - - - - - - - - - movsldup (%rax), %xmm2
+# CHECK-NEXT: - - - - - - - - - 0.50 0.50 - - movsldup %xmm0, %xmm2
+# CHECK-NEXT: 0.33 0.33 0.33 - - - - - - 0.50 0.50 - - movsldup (%rax), %xmm2
# CHECK-NEXT: - - - - - - - - - - - - - mwait