According to Agner's data, CDQE is closer to CWDE.
llvm-svn: 329354
let NumMicroOps = 1;
let ResourceCycles = [1];
}
+def: InstRW<[BWWriteResGroup6], (instrs CDQ, CQO)>;
def: InstRW<[BWWriteResGroup6], (instregex "ADC(16|32|64)ri",
"ADC(16|32|64)i",
"ADC(8|16|32|64)rr",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "CDQ",
"CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
- "CQO",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
"JMP_1",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[BWWriteResGroup9], (instrs CWDE)>;
+def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
def: InstRW<[BWWriteResGroup9], (instregex "ADD(8|16|32|64)ri",
"ADD(8|16|32|64)rr",
"ADD(8|16|32|64)i",
"AND(8|16|32|64)ri",
"AND(8|16|32|64)rr",
"AND(8|16|32|64)i",
- "CBW",
"CLC",
"CMC",
"CMP(8|16|32|64)ri",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
+def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
"BT(16|32|64)rr",
"BTC(16|32|64)ri8",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "CDQ",
- "CQO",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
"JMP_1",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[HWWriteResGroup10], (instrs CWDE)>;
+def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
def: InstRW<[HWWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
"ADD(8|16|32|64)rr",
"ADD(8|16|32|64)i",
"AND(8|16|32|64)ri",
"AND(8|16|32|64)rr",
"AND(8|16|32|64)i",
- "CBW",
"CLC",
"CMC",
"CMP(8|16|32|64)ri",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
+def: InstRW<[SBWriteResGroup4], (instrs CDQ, CQO)>;
def: InstRW<[SBWriteResGroup4], (instregex "BT(16|32|64)ri8",
"BT(16|32|64)rr",
"BTC(16|32|64)ri8",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "CDQ",
- "CQO",
"LAHF",
"SAHF",
"SAR(8|16|32|64)ri",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[SBWriteResGroup6], (instrs CWDE)>;
+def: InstRW<[SBWriteResGroup6], (instrs CBW, CWDE, CDQE)>;
def: InstRW<[SBWriteResGroup6], (instregex "ADD(8|16|32|64)ri",
"ADD(8|16|32|64)rr",
"ADD(8|16|32|64)i",
"AND(8|16|32|64)ri",
"AND(8|16|32|64)rr",
"AND(8|16|32|64)i",
- "CBW",
"CMC",
"CMP(8|16|32|64)ri",
"CMP(8|16|32|64)rr",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
+def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
"ADC(16|32|64)i",
"ADC(8|16|32|64)rr",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "CDQ",
"CLAC",
"CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
- "CQO",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
"JMP_1",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
+def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
"ADD(8|16|32|64)rr",
"ADD(8|16|32|64)i",
"AND(8|16|32|64)ri",
"AND(8|16|32|64)rr",
"AND(8|16|32|64)i",
- "CBW",
"CLC",
"CMC",
"CMP(8|16|32|64)ri",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
+def: InstRW<[SKXWriteResGroup7], (instrs CDQ, CQO)>;
def: InstRW<[SKXWriteResGroup7], (instregex "ADC(16|32|64)ri",
"ADC(16|32|64)i",
"ADC(8|16|32|64)rr",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "CDQ",
"CLAC",
"CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
- "CQO",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
"J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
"JMP_1",
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[SKXWriteResGroup10], (instrs CWDE)>;
+def: InstRW<[SKXWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
def: InstRW<[SKXWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
"ADD(8|16|32|64)rr",
"ADD(8|16|32|64)i",
"AND(8|16|32|64)ri",
"AND(8|16|32|64)rr",
"AND(8|16|32|64)i",
- "CBW",
"CLC",
"CMC",
"CMP(8|16|32|64)ri",
; GENERIC-NEXT: #APP
; GENERIC-NEXT: cbtw # sched: [1:0.33]
; GENERIC-NEXT: cltd # sched: [1:0.50]
-; GENERIC-NEXT: cltq # sched: [1:0.50]
+; GENERIC-NEXT: cltq # sched: [1:0.33]
; GENERIC-NEXT: cqto # sched: [1:0.50]
; GENERIC-NEXT: cwtd # sched: [2:1.00]
; GENERIC-NEXT: cwtl # sched: [1:0.33]
; SANDY-NEXT: #APP
; SANDY-NEXT: cbtw # sched: [1:0.33]
; SANDY-NEXT: cltd # sched: [1:0.50]
-; SANDY-NEXT: cltq # sched: [1:0.50]
+; SANDY-NEXT: cltq # sched: [1:0.33]
; SANDY-NEXT: cqto # sched: [1:0.50]
; SANDY-NEXT: cwtd # sched: [2:1.00]
; SANDY-NEXT: cwtl # sched: [1:0.33]
; HASWELL-NEXT: #APP
; HASWELL-NEXT: cbtw # sched: [1:0.25]
; HASWELL-NEXT: cltd # sched: [1:0.50]
-; HASWELL-NEXT: cltq # sched: [1:0.50]
+; HASWELL-NEXT: cltq # sched: [1:0.25]
; HASWELL-NEXT: cqto # sched: [1:0.50]
; HASWELL-NEXT: cwtd # sched: [2:0.50]
; HASWELL-NEXT: cwtl # sched: [1:0.25]
; BROADWELL-NEXT: #APP
; BROADWELL-NEXT: cbtw # sched: [1:0.25]
; BROADWELL-NEXT: cltd # sched: [1:0.50]
-; BROADWELL-NEXT: cltq # sched: [1:0.50]
+; BROADWELL-NEXT: cltq # sched: [1:0.25]
; BROADWELL-NEXT: cqto # sched: [1:0.50]
; BROADWELL-NEXT: cwtd # sched: [2:0.50]
; BROADWELL-NEXT: cwtl # sched: [1:0.25]
; SKYLAKE-NEXT: #APP
; SKYLAKE-NEXT: cbtw # sched: [1:0.25]
; SKYLAKE-NEXT: cltd # sched: [1:0.50]
-; SKYLAKE-NEXT: cltq # sched: [1:0.50]
+; SKYLAKE-NEXT: cltq # sched: [1:0.25]
; SKYLAKE-NEXT: cqto # sched: [1:0.50]
; SKYLAKE-NEXT: cwtd # sched: [2:0.50]
; SKYLAKE-NEXT: cwtl # sched: [1:0.25]
; SKX-NEXT: #APP
; SKX-NEXT: cbtw # sched: [1:0.25]
; SKX-NEXT: cltd # sched: [1:0.50]
-; SKX-NEXT: cltq # sched: [1:0.50]
+; SKX-NEXT: cltq # sched: [1:0.25]
; SKX-NEXT: cqto # sched: [1:0.50]
; SKX-NEXT: cwtd # sched: [2:0.50]
; SKX-NEXT: cwtl # sched: [1:0.25]