The WriteCvtSD2SS/WriteCvtPD2PS* classes were mostly unused as the models were needlessly overriding all instructions - in some cases the folded pattern overrides were entirely missing (but I've confirmed they just have an additional Port23 use)
There were a couple of typos (confirmed with Agner/uops.info) - Skylake/Icelake uses Port5+Port01 for XMM/YMM, Skylake uses Port5+Port05 for ZMM but Icelake uses Port5+Port0
defm : BWWriteResPair<WriteCvtPS2PD, [BWPort1], 3>;
defm : BWWriteResPair<WriteCvtPS2PDY, [BWPort1], 3>;
defm : X86WriteResPairUnsupported<WriteCvtPS2PDZ>;
-defm : BWWriteResPair<WriteCvtSD2SS, [BWPort1], 3>;
-defm : BWWriteResPair<WriteCvtPD2PS, [BWPort1], 3>;
-defm : BWWriteResPair<WriteCvtPD2PSY, [BWPort1], 3>;
+defm : BWWriteResPair<WriteCvtSD2SS, [BWPort1,BWPort5], 4, [1,1], 2, 5>;
+defm : BWWriteResPair<WriteCvtPD2PS, [BWPort1,BWPort5], 4, [1,1], 2, 5>;
+defm : BWWriteResPair<WriteCvtPD2PSY, [BWPort1,BWPort5], 6, [1,1], 2, 6>;
defm : X86WriteResPairUnsupported<WriteCvtPD2PSZ>;
defm : X86WriteRes<WriteCvtPH2PS, [BWPort0,BWPort5], 2, [1,1], 2>;
}
def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVT(T?)PD2PIrr",
"MMX_CVT(T?)PS2PIrr",
- "(V?)CVTPD2PSrr",
- "(V?)CVTSD2SSrr",
"(V?)CVTSI642SDrr",
"(V?)CVTSI2SDrr",
"(V?)CVTSI2SSrr",
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
-def: InstRW<[BWWriteResGroup60], (instrs VCVTPD2PSYrr,
- VCVTPD2DQYrr,
+def: InstRW<[BWWriteResGroup60], (instrs VCVTPD2DQYrr,
VCVTTPD2DQYrr)>;
def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> {
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[BWWriteResGroup107], (instrs CVTPD2PSrm, VCVTPD2PSrm,
- CVTPD2DQrm, VCVTPD2DQrm,
+def: InstRW<[BWWriteResGroup107], (instrs CVTPD2DQrm, VCVTPD2DQrm,
CVTTPD2DQrm, VCVTTPD2DQrm)>;
-def: InstRW<[BWWriteResGroup107], (instregex "MMX_CVT(T?)PD2PIrm",
- "(V?)CVTSD2SSrm")>;
+def: InstRW<[BWWriteResGroup107], (instregex "MMX_CVT(T?)PD2PIrm")>;
def BWWriteResGroup108 : SchedWriteRes<[BWPort5,BWPort23,BWPort015]> {
let Latency = 9;
defm : HWWriteResPair<WriteCvtPS2PD, [HWPort1], 3>;
defm : HWWriteResPair<WriteCvtPS2PDY, [HWPort1], 3>;
defm : HWWriteResPair<WriteCvtPS2PDZ, [HWPort1], 3>; // Unsupported = 1
-defm : HWWriteResPair<WriteCvtSD2SS, [HWPort1], 3>;
-defm : HWWriteResPair<WriteCvtPD2PS, [HWPort1], 3>;
-defm : HWWriteResPair<WriteCvtPD2PSY, [HWPort1], 3>;
-defm : HWWriteResPair<WriteCvtPD2PSZ, [HWPort1], 3>; // Unsupported = 1
+defm : HWWriteResPair<WriteCvtSD2SS, [HWPort1,HWPort5], 4, [1,1], 2, 5>;
+defm : HWWriteResPair<WriteCvtPD2PS, [HWPort1,HWPort5], 4, [1,1], 2, 6>;
+defm : HWWriteResPair<WriteCvtPD2PSY, [HWPort1,HWPort5], 6, [1,1], 2, 6>;
+defm : HWWriteResPair<WriteCvtPD2PSZ, [HWPort1,HWPort5], 4, [1,1], 2, 6>; // Unsupported = 1
defm : X86WriteRes<WriteCvtPH2PS, [HWPort0,HWPort5], 2, [1,1], 2>;
defm : X86WriteRes<WriteCvtPH2PSY, [HWPort0,HWPort5], 2, [1,1], 2>;
MMX_CVTPS2PIrr,
MMX_CVTTPD2PIrr,
MMX_CVTTPS2PIrr)>;
-def: InstRW<[HWWriteResGroup73], (instregex "(V?)CVTPD2PSrr",
- "(V?)CVTSD2SSrr",
- "(V?)CVTSI(64)?2SDrr",
+def: InstRW<[HWWriteResGroup73], (instregex "(V?)CVTSI(64)?2SDrr",
"(V?)CVTSI2SSrr",
"(V?)CVT(T?)PD2DQrr")>;
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[HWWriteResGroup78], (instrs CVTPD2PSrm, VCVTPD2PSrm,
- CVTPD2DQrm, VCVTPD2DQrm,
+def: InstRW<[HWWriteResGroup78], (instrs CVTPD2DQrm, VCVTPD2DQrm,
CVTTPD2DQrm, VCVTTPD2DQrm,
MMX_CVTPD2PIrm,
MMX_CVTTPD2PIrm)>;
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[HWWriteResGroup78_1], (instrs MMX_CVTPI2PDrm,
- CVTSD2SSrm, CVTSD2SSrm_Int,
- VCVTSD2SSrm, VCVTSD2SSrm_Int)>;
+def: InstRW<[HWWriteResGroup78_1], (instrs MMX_CVTPI2PDrm)>;
def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
let Latency = 9;
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
-def: InstRW<[HWWriteResGroup102], (instrs VCVTPD2PSYrr,
- VCVTPD2DQYrr,
+def: InstRW<[HWWriteResGroup102], (instrs VCVTPD2DQYrr,
VCVTTPD2DQYrr)>;
def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
defm : ICXWriteResPair<WriteCvtPS2PD, [ICXPort1], 3>;
defm : ICXWriteResPair<WriteCvtPS2PDY, [ICXPort5,ICXPort01], 3, [1,1], 2>;
defm : ICXWriteResPair<WriteCvtPS2PDZ, [ICXPort05], 3, [2], 2>;
-defm : ICXWriteResPair<WriteCvtSD2SS, [ICXPort1], 3>;
-defm : ICXWriteResPair<WriteCvtPD2PS, [ICXPort1], 3>;
-defm : ICXWriteResPair<WriteCvtPD2PSY, [ICXPort5,ICXPort01], 3, [1,1], 2>;
-defm : ICXWriteResPair<WriteCvtPD2PSZ, [ICXPort05], 3, [2], 2>;
+defm : ICXWriteResPair<WriteCvtSD2SS, [ICXPort5,ICXPort01], 5, [1,1], 2, 5>;
+defm : ICXWriteResPair<WriteCvtPD2PS, [ICXPort5,ICXPort01], 5, [1,1], 2, 6>;
+defm : ICXWriteResPair<WriteCvtPD2PSY, [ICXPort5,ICXPort01], 7, [1,1], 2, 7>;
+defm : ICXWriteResPair<WriteCvtPD2PSZ, [ICXPort5,ICXPort0], 7, [1,1], 2, 7>;
defm : X86WriteRes<WriteCvtPH2PS, [ICXPort5,ICXPort01], 5, [1,1], 2>;
defm : X86WriteRes<WriteCvtPH2PSY, [ICXPort5,ICXPort01], 7, [1,1], 2>;
"VCVTDQ2PDZ128rr",
"VCVTPD2DQZ128rr",
"(V?)CVT(T?)PD2DQrr",
- "VCVTPD2PSZ128rr",
- "(V?)CVTPD2PSrr",
"VCVTPD2UDQZ128rr",
"VCVTPS2PDZ128rr",
"(V?)CVTPS2PDrr",
"VCVTPS2QQZ128rr",
"VCVTPS2UQQZ128rr",
"VCVTQQ2PSZ128rr",
- "(V?)CVTSD2SS(Z?)rr",
"(V?)CVTSI(64)?2SDrr",
"VCVTSI2SSZrr",
"(V?)CVTSI2SSrr",
}
def: InstRW<[ICXWriteResGroup93], (instregex "VCVTDQ2PDZ256rr",
"VCVTPD2DQ(Y|Z256)rr",
- "VCVTPD2PS(Y|Z256)rr",
"VCVTPD2UDQZ256rr",
"VCVTPS2PD(Y|Z256)rr",
"VCVTPS2QQZ256rr",
}
def: InstRW<[ICXWriteResGroup93z], (instrs VCVTDQ2PDZrr,
VCVTPD2DQZrr,
- VCVTPD2PSZrr,
VCVTPD2UDQZrr,
VCVTPS2PDZrr,
VCVTPS2QQZrr,
"VPEXPANDDZ128rm(b?)",
"VPEXPANDQZ128rm(b?)")>;
-def ICXWriteResGroup153 : SchedWriteRes<[ICXPort5,ICXPort23,ICXPort015]> {
- let Latency = 10;
- let NumMicroOps = 3;
- let ResourceCycles = [1,1,1];
-}
-def: InstRW<[ICXWriteResGroup153], (instregex "(V?)CVTSD2SSrm")>;
-
def ICXWriteResGroup154 : SchedWriteRes<[ICXPort5,ICXPort01,ICXPort23]> {
let Latency = 10;
let NumMicroOps = 4;
"VPEXPANDD(Z|Z256)rm(b?)",
"VPEXPANDQ(Z|Z256)rm(b?)")>;
-def ICXWriteResGroup163 : SchedWriteRes<[ICXPort23,ICXPort015]> {
- let Latency = 11;
- let NumMicroOps = 3;
- let ResourceCycles = [1,2];
-}
-def: InstRW<[ICXWriteResGroup163], (instregex "VCVTSD2SSZrm")>;
-
def ICXWriteResGroup164 : SchedWriteRes<[ICXPort0,ICXPort5,ICXPort23]> {
let Latency = 11;
let NumMicroOps = 3;
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[ICXWriteResGroup166], (instrs CVTPD2PSrm,
- CVTPD2DQrm,
+def: InstRW<[ICXWriteResGroup166], (instrs CVTPD2DQrm,
CVTTPD2DQrm,
MMX_CVTPD2PIrm,
MMX_CVTTPD2PIrm)>;
let ResourceCycles = [1,1,1];
}
def: InstRW<[ICXWriteResGroup188], (instregex "VCVTPD2DQZrm(b?)",
- "VCVTPD2PSZrm(b?)",
"VCVTPD2UDQZrm(b?)",
"VCVTQQ2PSZrm(b?)",
"VCVTTPD2DQZrm(b?)",
defm : SKLWriteResPair<WriteCvtPS2PD, [SKLPort1], 3>;
defm : SKLWriteResPair<WriteCvtPS2PDY, [SKLPort1], 3>;
defm : X86WriteResPairUnsupported<WriteCvtPS2PDZ>;
-defm : SKLWriteResPair<WriteCvtSD2SS, [SKLPort1], 3>;
-defm : SKLWriteResPair<WriteCvtPD2PS, [SKLPort1], 3>;
-defm : SKLWriteResPair<WriteCvtPD2PSY, [SKLPort1], 3>;
+defm : SKLWriteResPair<WriteCvtSD2SS, [SKLPort5,SKLPort01], 5, [1,1], 2, 5>;
+defm : SKLWriteResPair<WriteCvtPD2PS, [SKLPort5,SKLPort01], 5, [1,1], 2, 6>;
+defm : SKLWriteResPair<WriteCvtPD2PSY, [SKLPort5,SKLPort01], 7, [1,1], 2, 6>;
defm : X86WriteResPairUnsupported<WriteCvtPD2PSZ>;
defm : X86WriteRes<WriteCvtPH2PS, [SKLPort5,SKLPort015], 5, [1,1], 2>;
def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVT(T?)PD2PIrr",
"MMX_CVT(T?)PS2PIrr",
"(V?)CVT(T?)PD2DQrr",
- "(V?)CVTPD2PSrr",
"(V?)CVTPS2PDrr",
- "(V?)CVTSD2SSrr",
"(V?)CVTSI642SDrr",
"(V?)CVTSI2SDrr",
"(V?)CVTSI2SSrr",
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
-def: InstRW<[SKLWriteResGroup89], (instrs VCVTPD2PSYrr,
- VCVTPS2PDYrr,
+def: InstRW<[SKLWriteResGroup89], (instrs VCVTPS2PDYrr,
VCVTPD2DQYrr,
VCVTTPD2DQYrr)>;
}
def: InstRW<[SKLWriteResGroup138], (instrs MMX_CVTPI2PDrm)>;
-def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
- let Latency = 10;
- let NumMicroOps = 3;
- let ResourceCycles = [1,1,1];
-}
-def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
-
def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
let Latency = 10;
let NumMicroOps = 4;
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[SKLWriteResGroup152], (instrs CVTPD2PSrm,
- CVTPD2DQrm,
+def: InstRW<[SKLWriteResGroup152], (instrs CVTPD2DQrm,
CVTTPD2DQrm,
MMX_CVTPD2PIrm,
MMX_CVTTPD2PIrm)>;
defm : SKXWriteResPair<WriteCvtPS2PD, [SKXPort1], 3>;
defm : SKXWriteResPair<WriteCvtPS2PDY, [SKXPort5,SKXPort01], 3, [1,1], 2>;
defm : SKXWriteResPair<WriteCvtPS2PDZ, [SKXPort05], 3, [2], 2>;
-defm : SKXWriteResPair<WriteCvtSD2SS, [SKXPort1], 3>;
-defm : SKXWriteResPair<WriteCvtPD2PS, [SKXPort1], 3>;
-defm : SKXWriteResPair<WriteCvtPD2PSY, [SKXPort5,SKXPort01], 3, [1,1], 2>;
-defm : SKXWriteResPair<WriteCvtPD2PSZ, [SKXPort05], 3, [2], 2>;
+defm : SKXWriteResPair<WriteCvtSD2SS, [SKXPort5,SKXPort01], 5, [1,1], 2, 5>;
+defm : SKXWriteResPair<WriteCvtPD2PS, [SKXPort5,SKXPort01], 5, [1,1], 2, 4>;
+defm : SKXWriteResPair<WriteCvtPD2PSY, [SKXPort5,SKXPort01], 7, [1,1], 2, 7>;
+defm : SKXWriteResPair<WriteCvtPD2PSZ, [SKXPort5,SKXPort05], 7, [1,1], 2, 7>;
defm : X86WriteRes<WriteCvtPH2PS, [SKXPort5,SKXPort01], 5, [1,1], 2>;
defm : X86WriteRes<WriteCvtPH2PSY, [SKXPort5,SKXPort01], 7, [1,1], 2>;
"VCVTDQ2PDZ128rr",
"VCVTPD2DQZ128rr",
"(V?)CVT(T?)PD2DQrr",
- "VCVTPD2PSZ128rr",
- "(V?)CVTPD2PSrr",
"VCVTPD2UDQZ128rr",
"VCVTPS2PDZ128rr",
"(V?)CVTPS2PDrr",
"VCVTPS2QQZ128rr",
"VCVTPS2UQQZ128rr",
"VCVTQQ2PSZ128rr",
- "(V?)CVTSD2SS(Z?)rr",
"(V?)CVTSI(64)?2SDrr",
"VCVTSI2SSZrr",
"(V?)CVTSI2SSrr",
}
def: InstRW<[SKXWriteResGroup93], (instregex "VCVTDQ2PDZ256rr",
"VCVTPD2DQ(Y|Z256)rr",
- "VCVTPD2PS(Y|Z256)rr",
"VCVTPD2UDQZ256rr",
"VCVTPS2PD(Y|Z256)rr",
"VCVTPS2QQZ256rr",
}
def: InstRW<[SKXWriteResGroup93z], (instrs VCVTDQ2PDZrr,
VCVTPD2DQZrr,
- VCVTPD2PSZrr,
VCVTPD2UDQZrr,
VCVTPS2PDZrr,
VCVTPS2QQZrr,
"VPEXPANDDZ128rm(b?)",
"VPEXPANDQZ128rm(b?)")>;
-def SKXWriteResGroup153 : SchedWriteRes<[SKXPort5,SKXPort23,SKXPort015]> {
- let Latency = 10;
- let NumMicroOps = 3;
- let ResourceCycles = [1,1,1];
-}
-def: InstRW<[SKXWriteResGroup153], (instregex "(V?)CVTSD2SSrm")>;
-
def SKXWriteResGroup154 : SchedWriteRes<[SKXPort5,SKXPort01,SKXPort23]> {
let Latency = 10;
let NumMicroOps = 4;
"VPEXPANDD(Z|Z256)rm(b?)",
"VPEXPANDQ(Z|Z256)rm(b?)")>;
-def SKXWriteResGroup163 : SchedWriteRes<[SKXPort23,SKXPort015]> {
- let Latency = 11;
- let NumMicroOps = 3;
- let ResourceCycles = [1,2];
-}
-def: InstRW<[SKXWriteResGroup163], (instregex "VCVTSD2SSZrm")>;
-
def SKXWriteResGroup164 : SchedWriteRes<[SKXPort0,SKXPort5,SKXPort23]> {
let Latency = 11;
let NumMicroOps = 3;
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[SKXWriteResGroup166], (instrs CVTPD2PSrm,
- CVTPD2DQrm,
+def: InstRW<[SKXWriteResGroup166], (instrs CVTPD2DQrm,
CVTTPD2DQrm,
MMX_CVTPD2PIrm,
MMX_CVTTPD2PIrm)>;
let ResourceCycles = [1,1,1];
}
def: InstRW<[SKXWriteResGroup188], (instregex "VCVTPD2DQZrm(b?)",
- "VCVTPD2PSZrm(b?)",
"VCVTPD2UDQZrm(b?)",
"VCVTQQ2PSZrm(b?)",
"VCVTTPD2DQZrm(b?)",
# CHECK-NEXT: 2 4 1.00 vcvtpd2ps %xmm0, %xmm2
# CHECK-NEXT: 3 9 1.00 * vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: 2 6 1.00 vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: 3 12 1.00 * vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: 1 3 1.00 vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: 2 8 1.00 * vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: 1 3 1.00 vcvtps2dq %ymm0, %ymm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 257.00 215.25 235.25 176.17 176.17 38.00 429.25 2.25 12.67
+# CHECK-NEXT: - 257.00 215.25 235.25 176.17 176.17 38.00 430.25 2.25 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - - 1.00 - - - 1.00 - - vcvtpd2ps %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - 1.00 - - vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - 1.00 - - vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: - - - 1.00 0.50 0.50 - 1.00 - - vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - - - - vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - - - - vcvtps2dq %ymm0, %ymm2
# CHECK-NEXT: 2 4 1.00 vcvtpd2ps %xmm0, %xmm2
# CHECK-NEXT: 3 10 1.00 * vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: 2 6 1.00 vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: 3 12 1.00 * vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: 1 3 1.00 vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: 2 9 1.00 * vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: 1 3 1.00 vcvtps2dq %ymm0, %ymm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 336.00 214.58 236.58 176.17 176.17 38.00 432.58 2.25 12.67
+# CHECK-NEXT: - 336.00 214.58 236.58 176.17 176.17 38.00 433.58 2.25 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - - 1.00 - - - 1.00 - - vcvtpd2ps %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - 1.00 - - vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - 1.00 - - vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: - - - 1.00 0.50 0.50 - 1.00 - - vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - - - - vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: - - - 1.00 - - - - - - vcvtps2dq %ymm0, %ymm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: 2 8 0.50 * vcvtpd2dqy (%rax), %xmm2
# CHECK-NEXT: 2 5 1.00 vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: 3 11 1.00 * vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: 3 8 1.00 * vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: 3 14 1.00 * vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: 2 10 0.50 * vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %ymm0, %ymm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: - 126.00 318.08 228.08 173.17 173.17 34.00 305.58 6.25 12.67 - -
+# CHECK-NEXT: - 126.00 319.25 228.25 173.17 173.17 34.00 305.25 6.25 12.67 - -
# 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 - - - - - - vcvtpd2dqx (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vcvtpd2dqy (%rax), %xmm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - - - vcvtpd2psx (%rax), %xmm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtpd2ps %ymm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - vcvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - - - vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - vcvtpd2ps %ymm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - - - vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - - - vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: - - 1.00 1.00 - - - - - - - - vcvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - - - vcvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - - - vcvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtsd2ss %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - - - vcvtsd2ss (%rax), %xmm1, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - vcvtsd2ss %xmm0, %xmm1, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - - - vcvtsd2ss (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtsi2sd %ecx, %xmm0, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - vcvtsi2sd %rcx, %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - - - vcvtsi2sdl (%rax), %xmm0, %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: - 40.00 103.92 95.92 63.50 63.50 14.00 83.92 2.25 5.00 - -
+# CHECK-NEXT: - 40.00 104.58 96.58 63.50 63.50 14.00 82.58 2.25 5.00 - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - - - cvtpd2dq (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - cvtpd2pi %xmm0, %mm2
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - - - cvtpd2pi (%rax), %mm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - cvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - - - cvtpd2ps (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - cvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - - - cvtpd2ps (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - cvtpi2pd %mm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - cvtpi2pd (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - cvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - - - - - - - - cvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - - - cvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - - - cvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - cvtsd2ss %xmm0, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - - - cvtsd2ss (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - cvtsd2ss %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - - - cvtsd2ss (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - cvtsi2sd %ecx, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - - - cvtsi2sd %rcx, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - - - cvtsi2sdl (%rax), %xmm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: 2 8 1.00 * vcvtpd2dqy (%rax), %xmm2
# CHECK-NEXT: 2 5 1.00 vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: 3 11 1.00 * vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: 3 13 1.00 * vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: 2 10 0.50 * vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %ymm0, %ymm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 126.00 332.08 203.08 173.17 173.17 34.00 323.58 5.25 12.67
+# CHECK-NEXT: - 126.00 333.42 202.42 173.17 173.17 34.00 324.92 5.25 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2dqx (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2dqy (%rax), %xmm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - vcvtps2dq %ymm0, %ymm2
# CHECK-NEXT: - - 1.50 0.50 - - - - - - vcvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - vcvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - vcvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsd2ss %xmm0, %xmm1, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtsd2ss %xmm0, %xmm1, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtsd2ss (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsi2sd %ecx, %xmm0, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsi2sd %rcx, %xmm0, %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 40.00 110.92 78.92 63.50 63.50 14.00 96.92 2.25 5.00
+# CHECK-NEXT: - 40.00 111.25 79.25 63.50 63.50 14.00 96.25 2.25 5.00
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtpd2dq (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtpd2pi %xmm0, %mm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtpd2pi (%rax), %mm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - cvtpd2ps %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtpd2ps (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - cvtpi2pd %mm0, %xmm2
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - cvtpi2pd (%rax), %xmm2
# CHECK-NEXT: - - 1.50 0.50 - - - - - - cvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - cvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - cvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsd2ss %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - cvtsd2ss %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtsd2ss (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsi2sd %ecx, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsi2sd %rcx, %xmm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: 2 8 0.50 * vcvtpd2dqy (%rax), %xmm2
# CHECK-NEXT: 2 5 1.00 vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: 2 8 1.00 * vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: 3 9 1.00 * vcvtpd2psx (%rax), %xmm2
# CHECK-NEXT: 2 7 1.00 vcvtpd2ps %ymm0, %xmm2
-# CHECK-NEXT: 3 8 1.00 * vcvtpd2psy (%rax), %xmm2
+# CHECK-NEXT: 3 14 1.00 * vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: 2 10 0.50 * vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 vcvtps2dq %ymm0, %ymm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 126.00 317.42 196.42 173.17 173.17 34.00 337.92 6.25 12.67
+# CHECK-NEXT: - 126.00 318.58 196.58 173.17 173.17 34.00 337.58 6.25 12.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - vcvtpd2dqx (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtpd2dq %ymm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - vcvtpd2dqy (%rax), %xmm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtpd2psx (%rax), %xmm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtpd2ps %ymm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtpd2psx (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtpd2ps %ymm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtpd2psy (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - vcvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - vcvtps2dq (%rax), %xmm2
# CHECK-NEXT: - - 1.00 1.00 - - - - - - vcvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - vcvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - vcvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsd2ss %xmm0, %xmm1, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - vcvtsd2ss (%rax), %xmm1, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - vcvtsd2ss %xmm0, %xmm1, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - vcvtsd2ss (%rax), %xmm1, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsi2sd %ecx, %xmm0, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - vcvtsi2sd %rcx, %xmm0, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - vcvtsi2sdl (%rax), %xmm0, %xmm2
# CHECK-NEXT: 2 5 1.00 cvtpd2pi %xmm0, %mm2
# CHECK-NEXT: 3 11 1.00 * cvtpd2pi (%rax), %mm2
# CHECK-NEXT: 2 5 1.00 cvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: 3 11 1.00 * cvtpd2ps (%rax), %xmm2
+# CHECK-NEXT: 3 9 1.00 * cvtpd2ps (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 cvtpi2pd %mm0, %xmm2
# CHECK-NEXT: 2 9 0.50 * cvtpi2pd (%rax), %xmm2
# CHECK-NEXT: 1 4 0.50 cvtps2dq %xmm0, %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - 40.00 103.58 82.58 63.50 63.50 14.00 97.58 2.25 5.00
+# CHECK-NEXT: - 40.00 104.25 83.25 63.50 63.50 14.00 96.25 2.25 5.00
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - cvtpd2dq (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtpd2pi %xmm0, %mm2
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - cvtpd2pi (%rax), %mm2
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtpd2ps %xmm0, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - cvtpd2ps (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - cvtpd2ps %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtpd2ps (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - cvtpi2pd %mm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - cvtpi2pd (%rax), %xmm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - cvtps2dq %xmm0, %xmm2
# CHECK-NEXT: - - 1.00 1.00 - - - - - - cvtsd2si %xmm0, %rcx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - cvtsd2si (%rax), %ecx
# CHECK-NEXT: - - 1.00 1.00 0.50 0.50 - - - - cvtsd2si (%rax), %rcx
-# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsd2ss %xmm0, %xmm2
-# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 1.33 - - cvtsd2ss (%rax), %xmm2
+# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - cvtsd2ss %xmm0, %xmm2
+# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 1.00 - - cvtsd2ss (%rax), %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsi2sd %ecx, %xmm2
# CHECK-NEXT: - - 0.33 0.33 - - - 1.33 - - cvtsi2sd %rcx, %xmm2
# CHECK-NEXT: - - - 1.00 0.50 0.50 - - - - cvtsi2sdl (%rax), %xmm2