diff options
Diffstat (limited to 'llvm/lib')
| -rwxr-xr-x | llvm/lib/Target/X86/X86SchedBroadwell.td | 188 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedHaswell.td | 180 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedSandyBridge.td | 69 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeClient.td | 219 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86SchedSkylakeServer.td | 238 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleZnver1.td | 36 |
6 files changed, 455 insertions, 475 deletions
diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index f28fb193782..543fabf3cfa 100755 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -583,7 +583,7 @@ def BWWriteResGroup3 : SchedWriteRes<[BWPort5]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup3], (instregex "MMX_MOVQ2DQrr")>; +def: InstRW<[BWWriteResGroup3], (instrs MMX_MOVQ2DQrr)>; def BWWriteResGroup4 : SchedWriteRes<[BWPort6]> { let Latency = 1; @@ -628,19 +628,19 @@ def BWWriteResGroup9 : SchedWriteRes<[BWPort0156]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup9], (instregex "SGDT64m", - "SIDT64m", - "SMSW16m", - "STRm", - "SYSCALL")>; +def: InstRW<[BWWriteResGroup9], (instrs SGDT64m, + SIDT64m, + SMSW16m, + STRm, + SYSCALL)>; def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> { let Latency = 1; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup10], (instregex "FBSTPm", - "ST_FP(32|64|80)m")>; +def: InstRW<[BWWriteResGroup10], (instrs FBSTPm)>; +def: InstRW<[BWWriteResGroup10], (instregex "ST_FP(32|64|80)m")>; def BWWriteResGroup12 : SchedWriteRes<[BWPort01]> { let Latency = 2; @@ -687,7 +687,7 @@ def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup17], (instregex "MMX_MOVDQ2Qrr")>; +def: InstRW<[BWWriteResGroup17], (instrs MMX_MOVDQ2Qrr)>; def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> { let Latency = 2; @@ -701,11 +701,10 @@ def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup20], (instrs CWD)>; -def: InstRW<[BWWriteResGroup20], (instrs JCXZ, JECXZ, JRCXZ)>; -def: InstRW<[BWWriteResGroup20], (instregex "ADC8i8", - "ADC8ri", - "SBB8i8", +def: InstRW<[BWWriteResGroup20], (instrs CWD, + JCXZ, JECXZ, JRCXZ, + ADC8i8, SBB8i8)>; +def: InstRW<[BWWriteResGroup20], (instregex "ADC8ri", "SBB8ri", "SET(A|BE)r")>; @@ -728,19 +727,17 @@ def BWWriteResGroup25 : SchedWriteRes<[BWPort4,BWPort237,BWPort0156]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r, +def: InstRW<[BWWriteResGroup25], (instrs PUSH16r, PUSH32r, PUSH64r, PUSH64i8, STOSB, STOSL, STOSQ, STOSW)>; -def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr", - "PUSH64i8")>; +def: InstRW<[BWWriteResGroup25], (instregex "PUSH(16|32|64)rmr")>; def BWWriteResGroup27 : SchedWriteRes<[BWPort1]> { let Latency = 3; let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup27], (instregex "MMX_CVTPI2PSirr", - "PDEP(32|64)rr", - "PEXT(32|64)rr", +def: InstRW<[BWWriteResGroup27], (instrs MMX_CVTPI2PSirr)>; +def: InstRW<[BWWriteResGroup27], (instregex "P(DEP|EXT)(32|64)rr", "(V?)CVTDQ2PS(Y?)rr")>; def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> { @@ -755,17 +752,17 @@ def BWWriteResGroup28 : SchedWriteRes<[BWPort5]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup28], (instregex "VPBROADCASTBrr", - "VPBROADCASTWrr")>; +def: InstRW<[BWWriteResGroup28], (instrs VPBROADCASTBrr, + VPBROADCASTWrr)>; def BWWriteResGroup33 : SchedWriteRes<[BWPort5,BWPort0156]> { let Latency = 3; let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[BWWriteResGroup33], (instregex "MMX_PACKSSDWirr", - "MMX_PACKSSWBirr", - "MMX_PACKUSWBirr")>; +def: InstRW<[BWWriteResGroup33], (instrs MMX_PACKSSDWirr, + MMX_PACKSSWBirr, + MMX_PACKUSWBirr)>; def BWWriteResGroup34 : SchedWriteRes<[BWPort6,BWPort0156]> { let Latency = 3; @@ -823,7 +820,7 @@ def BWWriteResGroup40 : SchedWriteRes<[BWPort0,BWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup40], (instregex "VCVTPS2PDYrr")>; +def: InstRW<[BWWriteResGroup40], (instrs VCVTPS2PDYrr)>; def BWWriteResGroup41 : SchedWriteRes<[BWPort0,BWPort0156]> { let Latency = 4; @@ -837,9 +834,9 @@ def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr)>; -def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVTPI2PDirr", - "MMX_CVT(T?)PD2PIirr", +def: InstRW<[BWWriteResGroup42], (instrs IMUL64r, MUL64r, MULX64rr, + MMX_CVTPI2PDirr)>; +def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVT(T?)PD2PIirr", "MMX_CVT(T?)PS2PIirr", "(V?)CVTDQ2PDrr", "(V?)CVTPD2PSrr", @@ -898,17 +895,14 @@ def BWWriteResGroup49 : SchedWriteRes<[BWPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm16", - "MOVSX(16|32|64)rm32", - "MOVSX(16|32|64)rm8", - "MOVZX(16|32|64)rm16", - "MOVZX(16|32|64)rm8", - "VBROADCASTSSrm", - "(V?)MOVDDUPrm", - "(V?)MOVSHDUPrm", - "(V?)MOVSLDUPrm", - "VPBROADCASTDrm", - "VPBROADCASTQrm")>; +def: InstRW<[BWWriteResGroup49], (instregex "MOVSX(16|32|64)rm(8|16|32)", + "MOVZX(16|32|64)rm(8|16)")>; +def: InstRW<[BWWriteResGroup49], (instrs VBROADCASTSSrm, + VMOVDDUPrm, MOVDDUPrm, + VMOVSHDUPrm, MOVSHDUPrm, + VMOVSLDUPrm, MOVSLDUPrm, + VPBROADCASTDrm, + VPBROADCASTQrm)>; def BWWriteResGroup50 : SchedWriteRes<[BWPort1,BWPort5]> { let Latency = 5; @@ -964,43 +958,44 @@ def BWWriteResGroup58 : SchedWriteRes<[BWPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[BWWriteResGroup58], (instregex "LD_F(32|64|80)m", - "VBROADCASTF128", - "VBROADCASTI128", - "VBROADCASTSDYrm", - "VBROADCASTSSYrm", - "VMOVDDUPYrm", - "VMOVSHDUPYrm", - "VMOVSLDUPYrm", - "VPBROADCASTDYrm", - "VPBROADCASTQYrm")>; +def: InstRW<[BWWriteResGroup58], (instregex "LD_F(32|64|80)m")>; +def: InstRW<[BWWriteResGroup58], (instrs VBROADCASTF128, + VBROADCASTI128, + VBROADCASTSDYrm, + VBROADCASTSSYrm, + VMOVDDUPYrm, + VMOVSHDUPYrm, + VMOVSLDUPYrm, + VPBROADCASTDYrm, + VPBROADCASTQYrm)>; def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup59], (instregex "(V?)CVTPS2PDrm", - "(V?)CVTSS2SDrm", - "VPSLLVQrm", - "VPSRLVQrm")>; +def: InstRW<[BWWriteResGroup59], (instrs CVTPS2PDrm, VCVTPS2PDrm, + CVTSS2SDrm, VCVTSS2SDrm, + VPSLLVQrm, + VPSRLVQrm)>; def BWWriteResGroup60 : SchedWriteRes<[BWPort1,BWPort5]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup60], (instregex "VCVTDQ2PDYrr", - "VCVTPD2PSYrr", - "VCVT(T?)PD2DQYrr")>; +def: InstRW<[BWWriteResGroup60], (instrs VCVTDQ2PDYrr, + VCVTPD2PSYrr, + VCVTPD2DQYrr, + VCVTTPD2DQYrr)>; def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup62], (instregex "FARJMP64", - "JMP(16|32|64)m")>; +def: InstRW<[BWWriteResGroup62], (instrs FARJMP64)>; +def: InstRW<[BWWriteResGroup62], (instregex "JMP(16|32|64)m")>; def BWWriteResGroup63 : SchedWriteRes<[BWPort23,BWPort06]> { let Latency = 6; @@ -1025,9 +1020,9 @@ def BWWriteResGroup65 : SchedWriteRes<[BWPort23,BWPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup65], (instregex "VINSERTF128rm", - "VINSERTI128rm", - "VPBLENDDrmi")>; +def: InstRW<[BWWriteResGroup65], (instrs VINSERTF128rm, + VINSERTI128rm, + VPBLENDDrmi)>; def BWWriteResGroup66 : SchedWriteRes<[BWPort23,BWPort0156]> { let Latency = 6; @@ -1076,8 +1071,8 @@ def BWWriteResGroup73 : SchedWriteRes<[BWPort0,BWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup73], (instregex "VPSLLVQYrm", - "VPSRLVQYrm")>; +def: InstRW<[BWWriteResGroup73], (instrs VPSLLVQYrm, + VPSRLVQYrm)>; def BWWriteResGroup74 : SchedWriteRes<[BWPort1,BWPort23]> { let Latency = 7; @@ -1091,16 +1086,16 @@ def BWWriteResGroup77 : SchedWriteRes<[BWPort23,BWPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup77], (instregex "VPBLENDDYrmi")>; +def: InstRW<[BWWriteResGroup77], (instrs VPBLENDDYrmi)>; def BWWriteResGroup79 : SchedWriteRes<[BWPort5,BWPort23]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[BWWriteResGroup79], (instregex "MMX_PACKSSDWirm", - "MMX_PACKSSWBirm", - "MMX_PACKUSWBirm")>; +def: InstRW<[BWWriteResGroup79], (instrs MMX_PACKSSDWirm, + MMX_PACKSSWBirm, + MMX_PACKUSWBirm)>; def BWWriteResGroup80 : SchedWriteRes<[BWPort23,BWPort0156]> { let Latency = 7; @@ -1144,8 +1139,8 @@ def BWWriteResGroup89 : SchedWriteRes<[BWPort4,BWPort6,BWPort23,BWPort237,BWPort let NumMicroOps = 5; let ResourceCycles = [1,1,1,1,1]; } -def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m", - "FARCALL64")>; +def: InstRW<[BWWriteResGroup89], (instregex "CALL(16|32|64)m")>; +def: InstRW<[BWWriteResGroup89], (instrs FARCALL64)>; def BWWriteResGroup90 : SchedWriteRes<[BWPort6,BWPort06,BWPort15,BWPort0156]> { let Latency = 7; @@ -1159,10 +1154,10 @@ def BWWriteResGroup91 : SchedWriteRes<[BWPort1,BWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm", - "PDEP(32|64)rm", - "PEXT(32|64)rm", - "(V?)CVTDQ2PSrm")>; +def: InstRW<[BWWriteResGroup91], (instrs MMX_CVTPI2PSirm, + CVTDQ2PSrm, + VCVTDQ2PSrm)>; +def: InstRW<[BWWriteResGroup91], (instregex "P(DEP|EXT)(32|64)rm")>; def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> { let Latency = 8; @@ -1183,13 +1178,13 @@ def BWWriteResGroup92 : SchedWriteRes<[BWPort5,BWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup92], (instregex "VPMOVSXBDYrm", - "VPMOVSXBQYrm", - "VPMOVSXBWYrm", - "VPMOVSXDQYrm", - "VPMOVSXWDYrm", - "VPMOVSXWQYrm", - "VPMOVZXWDYrm")>; +def: InstRW<[BWWriteResGroup92], (instrs VPMOVSXBDYrm, + VPMOVSXBQYrm, + VPMOVSXBWYrm, + VPMOVSXDQYrm, + VPMOVSXWDYrm, + VPMOVSXWQYrm, + VPMOVZXWDYrm)>; def BWWriteResGroup97 : SchedWriteRes<[BWPort23,BWPort237,BWPort06,BWPort0156]> { let Latency = 8; @@ -1231,9 +1226,9 @@ def BWWriteResGroup101 : SchedWriteRes<[BWPort1,BWPort23]> { let ResourceCycles = [1,1]; } def: InstRW<[BWWriteResGroup101], (instregex "(ADD|SUB|SUBR)_F(32|64)m", - "ILD_F(16|32|64)m", - "VCVTPS2DQYrm", - "VCVTTPS2DQYrm")>; + "ILD_F(16|32|64)m")>; +def: InstRW<[BWWriteResGroup101], (instrs VCVTPS2DQYrm, + VCVTTPS2DQYrm)>; def BWWriteResGroup105 : SchedWriteRes<[BWPort0,BWPort1,BWPort23]> { let Latency = 9; @@ -1251,18 +1246,19 @@ def BWWriteResGroup106 : SchedWriteRes<[BWPort0,BWPort5,BWPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[BWWriteResGroup106], (instregex "VCVTPS2PDYrm")>; +def: InstRW<[BWWriteResGroup106], (instrs VCVTPS2PDYrm)>; def BWWriteResGroup107 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> { let Latency = 9; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm)>; -def: InstRW<[BWWriteResGroup107], (instregex "CVTPD2PSrm", - "CVT(T?)PD2DQrm", - "MMX_CVTPI2PDirm", - "MMX_CVT(T?)PD2PIirm", +def: InstRW<[BWWriteResGroup107], (instrs IMUL64m, MUL64m, MULX64rm, + CVTPD2PSrm, + CVTPD2DQrm, + CVTTPD2DQrm, + MMX_CVTPI2PDirm)>; +def: InstRW<[BWWriteResGroup107], (instregex "MMX_CVT(T?)PD2PIirm", "(V?)CVTDQ2PDrm", "(V?)CVTSD2SSrm")>; @@ -1329,15 +1325,15 @@ def BWWriteResGroup123 : SchedWriteRes<[BWPort0,BWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup123], (instregex "MUL_F(32|64)m", - "VPCMPGTQYrm")>; +def: InstRW<[BWWriteResGroup123], (instregex "MUL_F(32|64)m")>; +def: InstRW<[BWWriteResGroup123], (instrs VPCMPGTQYrm)>; def BWWriteResGroup128 : SchedWriteRes<[BWPort1,BWPort5,BWPort23]> { let Latency = 11; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[BWWriteResGroup128], (instregex "VCVTDQ2PDYrm")>; +def: InstRW<[BWWriteResGroup128], (instrs VCVTDQ2PDYrm)>; def BWWriteResGroup131 : SchedWriteRes<[BWPort1,BWPort06,BWPort0156]> { let Latency = 11; @@ -1352,7 +1348,7 @@ def BWWriteResGroup132 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> { let NumMicroOps = 9; let ResourceCycles = [1,4,1,3]; } -def: InstRW<[BWWriteResGroup132], (instregex "RCL8rCL")>; +def: InstRW<[BWWriteResGroup132], (instrs RCL8rCL)>; def BWWriteResGroup133 : SchedWriteRes<[BWPort06,BWPort0156]> { let Latency = 11; @@ -1395,7 +1391,7 @@ def BWWriteResGroup145 : SchedWriteRes<[BWPort1,BWPort06,BWPort15,BWPort0156]> { let NumMicroOps = 10; let ResourceCycles = [2,3,1,4]; } -def: InstRW<[BWWriteResGroup145], (instregex "RCR8rCL")>; +def: InstRW<[BWWriteResGroup145], (instrs RCR8rCL)>; def BWWriteResGroup146 : SchedWriteRes<[BWPort0,BWPort1,BWPort6,BWPort0156]> { let Latency = 14; @@ -1494,7 +1490,7 @@ def BWWriteResGroup172 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> { let NumMicroOps = 18; let ResourceCycles = [1,1,16]; } -def: InstRW<[BWWriteResGroup172], (instregex "POPF64")>; +def: InstRW<[BWWriteResGroup172], (instrs POPF64)>; def BWWriteResGroup176 : SchedWriteRes<[BWPort6,BWPort23,BWPort0156]> { let Latency = 23; diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index de7453accdc..41a26e726b5 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -621,7 +621,7 @@ def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> { let Latency = 22; let NumMicroOps = 9; } -def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>; +def : InstRW<[HWWriteDiv8], (instrs DIV8r)>; // IDIV. // r8. @@ -629,7 +629,7 @@ def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> { let Latency = 23; let NumMicroOps = 9; } -def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>; +def : InstRW<[HWWriteIDiv8], (instrs IDIV8r)>; // BT. // m,r. @@ -712,7 +712,7 @@ def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>; // FLD. // m80. -def : InstRW<[HWWriteP01], (instregex "LD_Frr")>; +def : InstRW<[HWWriteP01], (instrs LD_Frr)>; // FBLD. // m80. @@ -720,7 +720,7 @@ def HWWriteFBLD : SchedWriteRes<[]> { let Latency = 47; let NumMicroOps = 43; } -def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>; +def : InstRW<[HWWriteFBLD], (instrs FBLDm)>; // FST(P). // r. @@ -733,13 +733,13 @@ def : InstRW<[HWWriteP01], (instregex "FFREE")>; def HWWriteFNSAVE : SchedWriteRes<[]> { let NumMicroOps = 147; } -def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>; +def : InstRW<[HWWriteFNSAVE], (instrs FSAVEm)>; // FRSTOR. def HWWriteFRSTOR : SchedWriteRes<[]> { let NumMicroOps = 90; } -def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>; +def : InstRW<[HWWriteFRSTOR], (instrs FRSTORm)>; //-- Arithmetic instructions --// @@ -813,8 +813,8 @@ def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm", - "(V?)MOVSHDUPrm", +def: InstRW<[HWWriteResGroup0], (instrs VBROADCASTSSrm)>; +def: InstRW<[HWWriteResGroup0], (instregex "(V?)MOVSHDUPrm", "(V?)MOVSLDUPrm", "VPBROADCAST(D|Q)rm")>; @@ -823,14 +823,14 @@ def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } +def: InstRW<[HWWriteResGroup0_1], (instrs VBROADCASTF128, + VBROADCASTI128, + VBROADCASTSDYrm, + VBROADCASTSSYrm, + VMOVDDUPYrm, + VMOVSHDUPYrm, + VMOVSLDUPYrm)>; def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F(32|64|80)m", - "VBROADCASTF128", - "VBROADCASTI128", - "VBROADCASTSDYrm", - "VBROADCASTSSYrm", - "VMOVDDUPYrm", - "VMOVSHDUPYrm", - "VMOVSLDUPYrm", "VPBROADCAST(D|Q)Yrm")>; def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> { @@ -838,11 +838,8 @@ def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16", - "MOVSX(16|32|64)rm32", - "MOVSX(16|32|64)rm8", - "MOVZX(16|32|64)rm16", - "MOVZX(16|32|64)rm8", +def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm(8|16|32)", + "MOVZX(16|32|64)rm(8|16)", "(V?)MOVDDUPrm")>; def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> { @@ -850,9 +847,8 @@ def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm", - "ST_FP(32|64|80)m", - "VMPTRSTm")>; +def: InstRW<[HWWriteResGroup1], (instrs FBSTPm, VMPTRSTm)>; +def: InstRW<[HWWriteResGroup1], (instregex "ST_FP(32|64|80)m")>; def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> { let Latency = 1; @@ -875,7 +871,7 @@ def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVQ2DQrr")>; +def: InstRW<[HWWriteResGroup4], (instrs MMX_MOVQ2DQrr)>; def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> { let Latency = 1; @@ -921,12 +917,12 @@ def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> { let ResourceCycles = [1]; } def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE, - CMC, STC)>; -def: InstRW<[HWWriteResGroup10], (instregex "SGDT64m", - "SIDT64m", - "SMSW16m", - "STRm", - "SYSCALL")>; + CMC, STC, + SGDT64m, + SIDT64m, + SMSW16m, + STRm, + SYSCALL)>; def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> { let Latency = 6; @@ -940,26 +936,23 @@ def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup11_1], (instregex "(V?)CVTSS2SDrm", - "VPSLLVQrm", - "VPSRLVQrm")>; +def: InstRW<[HWWriteResGroup11_1], (instrs VPSLLVQrm, VPSRLVQrm)>; +def: InstRW<[HWWriteResGroup11_1], (instregex "(V?)CVTSS2SDrm")>; def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> { let Latency = 8; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLVQYrm", - "VPSRLVQYrm")>; +def: InstRW<[HWWriteResGroup11_2], (instrs VPSLLVQYrm, VPSRLVQYrm)>; def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> { let Latency = 8; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTPI2PSirm", - "PDEP(32|64)rm", - "PEXT(32|64)rm")>; +def: InstRW<[HWWriteResGroup12], (instrs MMX_CVTPI2PSirm)>; +def: InstRW<[HWWriteResGroup12], (instregex "P(DEP|EXT)(32|64)rm")>; def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> { let Latency = 8; @@ -992,17 +985,17 @@ def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup13_1], (instregex "VPMOVSXBDYrm", - "VPMOVSXBQYrm", - "VPMOVSXWQYrm")>; +def: InstRW<[HWWriteResGroup13_1], (instrs VPMOVSXBDYrm, + VPMOVSXBQYrm, + VPMOVSXWQYrm)>; def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64", - "JMP(16|32|64)m")>; +def: InstRW<[HWWriteResGroup14], (instrs FARJMP64)>; +def: InstRW<[HWWriteResGroup14], (instregex "JMP(16|32|64)m")>; def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> { let Latency = 6; @@ -1027,16 +1020,16 @@ def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm", - "VINSERTI128rm", - "VPBLENDDrmi")>; +def: InstRW<[HWWriteResGroup17], (instrs VINSERTF128rm, + VINSERTI128rm, + VPBLENDDrmi)>; def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> { let Latency = 8; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup17_2], (instregex "VPBLENDDYrmi")>; +def: InstRW<[HWWriteResGroup17_2], (instrs VPBLENDDYrmi)>; def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> { let Latency = 6; @@ -1079,10 +1072,9 @@ def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r, +def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r, PUSH64i8, STOSB, STOSL, STOSQ, STOSW)>; -def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr", - "PUSH64i8")>; +def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr")>; def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> { let Latency = 7; @@ -1149,7 +1141,7 @@ def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>; +def: InstRW<[HWWriteResGroup33], (instrs MMX_MOVDQ2Qrr)>; def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> { let Latency = 2; @@ -1164,9 +1156,9 @@ def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> { let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm", - "MMX_PACKSSWBirm", - "MMX_PACKUSWBirm")>; +def: InstRW<[HWWriteResGroup36_2], (instrs MMX_PACKSSDWirm, + MMX_PACKSSWBirm, + MMX_PACKUSWBirm)>; def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> { let Latency = 7; @@ -1225,17 +1217,16 @@ def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort let NumMicroOps = 5; let ResourceCycles = [1,1,1,1,1]; } -def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m", - "FARCALL64")>; +def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m")>; +def: InstRW<[HWWriteResGroup48], (instrs FARCALL64)>; def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> { let Latency = 3; let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr", - "PDEP(32|64)rr", - "PEXT(32|64)rr", +def: InstRW<[HWWriteResGroup50], (instrs MMX_CVTPI2PSirr)>; +def: InstRW<[HWWriteResGroup50], (instregex "P(DEP|EXT)(32|64)rr", "(V?)CVTDQ2PS(Y?)rr")>; def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> { @@ -1266,29 +1257,29 @@ def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> { let ResourceCycles = [1,1]; } def: InstRW<[HWWriteResGroup52_1], (instregex "(ADD|SUB|SUBR)_F(32|64)m", - "ILD_F(16|32|64)m", - "VCVTDQ2PSYrm", - "VCVTPS2DQYrm", - "VCVTTPS2DQYrm")>; + "ILD_F(16|32|64)m")>; +def: InstRW<[HWWriteResGroup52_1], (instrs VCVTDQ2PSYrm, + VCVTPS2DQYrm, + VCVTTPS2DQYrm)>; def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> { let Latency = 9; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm", - "VPMOVSXDQYrm", - "VPMOVSXWDYrm", - "VPMOVZXWDYrm")>; +def: InstRW<[HWWriteResGroup53_1], (instrs VPMOVSXBWYrm, + VPMOVSXDQYrm, + VPMOVSXWDYrm, + VPMOVZXWDYrm)>; def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> { let Latency = 3; let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr", - "MMX_PACKSSWBirr", - "MMX_PACKUSWBirr")>; +def: InstRW<[HWWriteResGroup57], (instrs MMX_PACKSSDWirr, + MMX_PACKSSWBirr, + MMX_PACKUSWBirr)>; def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> { let Latency = 3; @@ -1378,7 +1369,7 @@ def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr")>; +def: InstRW<[HWWriteResGroup71], (instrs VCVTPS2PDYrr)>; def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> { let Latency = 4; @@ -1392,10 +1383,12 @@ def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPI2PDirr", - "MMX_CVT(T?)PD2PIirr", - "MMX_CVT(T?)PS2PIirr", - "(V?)CVTDQ2PDrr", +def: InstRW<[HWWriteResGroup73], (instrs MMX_CVTPI2PDirr, + MMX_CVTPD2PIirr, + MMX_CVTPS2PIirr, + MMX_CVTTPD2PIirr, + MMX_CVTTPS2PIirr)>; +def: InstRW<[HWWriteResGroup73], (instregex "(V?)CVTDQ2PDrr", "(V?)CVTPD2PSrr", "(V?)CVTSD2SSrr", "(V?)CVTSI(64)?2SDrr", @@ -1439,25 +1432,29 @@ def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>; +def: InstRW<[HWWriteResGroup77], (instrs VCVTPS2PDYrm)>; def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> { let Latency = 10; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2PSrm", - "CVT(T?)PD2DQrm", - "MMX_CVT(T?)PD2PIirm", - "(V?)CVTDQ2PDrm")>; +def: InstRW<[HWWriteResGroup78], (instrs CVTPD2PSrm, + CVTPD2DQrm, + CVTTPD2DQrm, + MMX_CVTPD2PIirm, + MMX_CVTTPD2PIirm, + CVTDQ2PDrm, + VCVTDQ2PDrm)>; def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> { let Latency = 9; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm", - "(V?)CVTSD2SSrm")>; +def: InstRW<[HWWriteResGroup78_1], (instrs MMX_CVTPI2PDirm, + CVTSD2SSrm, + VCVTSD2SSrm)>; def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> { let Latency = 9; @@ -1529,8 +1526,8 @@ def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F(32|64)m", - "VPCMPGTQYrm")>; +def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F(32|64)m")>; +def: InstRW<[HWWriteResGroup91_3], (instrs VPCMPGTQYrm)>; def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> { let Latency = 5; @@ -1593,9 +1590,10 @@ def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr", - "VCVTPD2PSYrr", - "VCVT(T?)PD2DQYrr")>; +def: InstRW<[HWWriteResGroup102], (instrs VCVTDQ2PDYrr, + VCVTPD2PSYrr, + VCVTPD2DQYrr, + VCVTTPD2DQYrr)>; def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> { let Latency = 13; @@ -1609,7 +1607,7 @@ def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>; +def: InstRW<[HWWriteResGroup104], (instrs VCVTDQ2PDYrm)>; def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> { let Latency = 6; @@ -1659,7 +1657,7 @@ def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> { let NumMicroOps = 9; let ResourceCycles = [1,4,1,3]; } -def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>; +def: InstRW<[HWWriteResGroup130], (instrs RCL8rCL)>; def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> { let Latency = 11; @@ -1687,14 +1685,14 @@ def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> { let NumMicroOps = 10; let ResourceCycles = [2,3,1,4]; } -def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>; +def: InstRW<[HWWriteResGroup142], (instrs RCR8rCL)>; def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> { let Latency = 19; let NumMicroOps = 15; let ResourceCycles = [1,14]; } -def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>; +def: InstRW<[HWWriteResGroup143], (instrs POPF16)>; def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> { let Latency = 21; diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index 043bffec9fa..0030812e61e 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -578,10 +578,14 @@ def SBWriteResGroup5 : SchedWriteRes<[SBPort15]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SBWriteResGroup5], (instregex "MMX_PABS(B|D|W)rr", - "MMX_PADDQirr", - "MMX_PALIGNRrri", - "MMX_PSIGN(B|D|W)rr")>; +def: InstRW<[SBWriteResGroup5], (instrs MMX_PABSBrr, + MMX_PABSDrr, + MMX_PABSWrr, + MMX_PADDQirr, + MMX_PALIGNRrri, + MMX_PSIGNBrr, + MMX_PSIGNDrr, + MMX_PSIGNWrr)>; def SBWriteResGroup9 : SchedWriteRes<[SBPort05]> { let Latency = 2; @@ -607,10 +611,7 @@ def SBWriteResGroup12 : SchedWriteRes<[SBPort0,SBPort1]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup12], (instregex "(V?)COMISDrr", - "(V?)COMISSrr", - "(V?)UCOMISDrr", - "(V?)UCOMISSrr")>; +def: InstRW<[SBWriteResGroup12], (instregex "(V?)(U?)COMI(SD|SS)rr")>; def SBWriteResGroup15 : SchedWriteRes<[SBPort0,SBPort015]> { let Latency = 2; @@ -625,15 +626,15 @@ def SBWriteResGroup18 : SchedWriteRes<[SBPort5,SBPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup18], (instrs JCXZ, JECXZ, JRCXZ)>; -def: InstRW<[SBWriteResGroup18], (instregex "MMX_MOVDQ2Qrr")>; +def: InstRW<[SBWriteResGroup18], (instrs JCXZ, JECXZ, JRCXZ, + MMX_MOVDQ2Qrr)>; def SBWriteResGroup21 : SchedWriteRes<[SBPort1]> { let Latency = 3; let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SBWriteResGroup21], (instregex "PUSHFS64")>; +def: InstRW<[SBWriteResGroup21], (instrs PUSHFS64)>; def SBWriteResGroup21_16i : SchedWriteRes<[SBPort1, SBPort015]> { let Latency = 4; @@ -700,7 +701,7 @@ def SBWriteResGroup29 : SchedWriteRes<[SBPort1,SBPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup29], (instregex "MOV64sr")>; +def: InstRW<[SBWriteResGroup29], (instrs MOV64sr)>; def SBWriteResGroup29_2 : SchedWriteRes<[SBPort5,SBPort015]> { let Latency = 4; @@ -743,8 +744,8 @@ def SBWriteResGroup35_2 : SchedWriteRes<[SBPort1,SBPort4,SBPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SBWriteResGroup35_2], (instregex "ISTT_FP(16|32|64)m", - "PUSHGS64")>; +def: InstRW<[SBWriteResGroup35_2], (instrs PUSHGS64)>; +def: InstRW<[SBWriteResGroup35_2], (instregex "ISTT_FP(16|32|64)m")>; def SBWriteResGroup36 : SchedWriteRes<[SBPort4,SBPort5,SBPort23]> { let Latency = 5; @@ -810,9 +811,9 @@ def SBWriteResGroup48 : SchedWriteRes<[SBPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SBWriteResGroup48], (instregex "MMX_MOVD64from64rm", - "POP(16|32|64)r", - "VBROADCASTSSrm", +def: InstRW<[SBWriteResGroup48], (instrs MMX_MOVD64from64rm, + VBROADCASTSSrm)>; +def: InstRW<[SBWriteResGroup48], (instregex "POP(16|32|64)r", "(V?)MOV64toPQIrm", "(V?)MOVDDUPrm", "(V?)MOVDI2PDIrm", @@ -827,7 +828,7 @@ def SBWriteResGroup49 : SchedWriteRes<[SBPort5,SBPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup49], (instregex "MOV16sm")>; +def: InstRW<[SBWriteResGroup49], (instrs MOV16sm)>; def SBWriteResGroup50 : SchedWriteRes<[SBPort23,SBPort05]> { let Latency = 6; @@ -841,9 +842,13 @@ def SBWriteResGroup51 : SchedWriteRes<[SBPort23,SBPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup51], (instregex "MMX_PABS(B|D|W)rm", - "MMX_PALIGNRrmi", - "MMX_PSIGN(B|D|W)rm")>; +def: InstRW<[SBWriteResGroup51], (instrs MMX_PABSBrm, + MMX_PABSDrm, + MMX_PABSWrm, + MMX_PALIGNRrmi, + MMX_PSIGNBrm, + MMX_PSIGNDrm, + MMX_PSIGNWrm)>; def SBWriteResGroup52 : SchedWriteRes<[SBPort23,SBPort015]> { let Latency = 6; @@ -865,11 +870,11 @@ def SBWriteResGroup54 : SchedWriteRes<[SBPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SBWriteResGroup54], (instregex "VBROADCASTSDYrm", - "VBROADCASTSSYrm", - "VMOVDDUPYrm", - "VMOVSHDUPYrm", - "VMOVSLDUPYrm")>; +def: InstRW<[SBWriteResGroup54], (instrs VBROADCASTSDYrm, + VBROADCASTSSYrm, + VMOVDDUPYrm, + VMOVSHDUPYrm, + VMOVSLDUPYrm)>; def SBWriteResGroup58 : SchedWriteRes<[SBPort23,SBPort05]> { let Latency = 7; @@ -883,14 +888,14 @@ def SBWriteResGroup59 : SchedWriteRes<[SBPort23,SBPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup59], (instregex "MMX_PADDQirm")>; +def: InstRW<[SBWriteResGroup59], (instrs MMX_PADDQirm)>; def SBWriteResGroup62 : SchedWriteRes<[SBPort5,SBPort23]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[SBWriteResGroup62], (instregex "VER(R|W)m")>; +def: InstRW<[SBWriteResGroup62], (instrs VERRm, VERWm)>; def SBWriteResGroup63 : SchedWriteRes<[SBPort23,SBPort015]> { let Latency = 7; @@ -1000,8 +1005,7 @@ def SBWriteResGroup93 : SchedWriteRes<[SBPort0,SBPort1,SBPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SBWriteResGroup93], (instregex "CVT(T?)SD2SI(64)?rm", - "CVT(T?)SS2SI(64)?rm")>; +def: InstRW<[SBWriteResGroup93], (instregex "CVT(T?)(SD|SS)2SI(64)?rm")>; def SBWriteResGroup93_1 : SchedWriteRes<[SBPort0,SBPort1,SBPort23]> { let Latency = 9; @@ -1077,10 +1081,7 @@ def SBWriteResGroup100 : SchedWriteRes<[SBPort4,SBPort5,SBPort23,SBPort05,SBPort let NumMicroOps = 6; let ResourceCycles = [1,1,2,1,1]; } -def: InstRW<[SBWriteResGroup100], (instregex "BT(16|32|64)mr", - "BTC(16|32|64)mr", - "BTR(16|32|64)mr", - "BTS(16|32|64)mr")>; +def: InstRW<[SBWriteResGroup100], (instregex "BT(C|R|S)?(16|32|64)mr")>; def SBWriteResGroup101 : SchedWriteRes<[SBPort1,SBPort23]> { let Latency = 10; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index 4e15a0c4043..378934b82b8 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -633,36 +633,35 @@ def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> { let ResourceCycles = [1]; } def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE, - CMC, STC)>; -def: InstRW<[SKLWriteResGroup10], (instregex "SGDT64m", - "SIDT64m", - "SMSW16m", - "STRm", - "SYSCALL")>; + CMC, STC, + SGDT64m, + SIDT64m, + SMSW16m, + STRm, + SYSCALL)>; def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> { let Latency = 1; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm", - "ST_FP(32|64|80)m", - "VMPTRSTm")>; +def: InstRW<[SKLWriteResGroup11], (instrs FBSTPm, VMPTRSTm)>; +def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP(32|64|80)m")>; def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> { let Latency = 2; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>; +def: InstRW<[SKLWriteResGroup13], (instrs MMX_MOVQ2DQrr)>; def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> { let Latency = 2; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>; -def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>; +def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP, + MMX_MOVDQ2Qrr)>; def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> { let Latency = 2; @@ -701,11 +700,10 @@ def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup23], (instrs CWD)>; -def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>; -def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8", - "ADC8ri", - "SBB8i8", +def: InstRW<[SKLWriteResGroup23], (instrs CWD, + JCXZ, JECXZ, JRCXZ, + ADC8i8, SBB8i8)>; +def: InstRW<[SKLWriteResGroup23], (instregex "ADC8ri", "SBB8ri")>; def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> { @@ -727,10 +725,9 @@ def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r, +def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r, PUSH64i8, STOSB, STOSL, STOSQ, STOSW)>; -def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr", - "PUSH64i8")>; +def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr")>; def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> { let Latency = 3; @@ -753,8 +750,7 @@ def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> { let ResourceCycles = [1]; } def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_(FPrST0|FST0r|FrST0)", - "VPBROADCASTBrr", - "VPBROADCASTWrr", + "VPBROADCAST(B|W)rr", "(V?)PCMPGTQ(Y?)rr")>; def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> { @@ -795,9 +791,9 @@ def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> { let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr", - "MMX_PACKSSWBirr", - "MMX_PACKUSWBirr")>; +def: InstRW<[SKLWriteResGroup39], (instrs MMX_PACKSSDWirr, + MMX_PACKSSWBirr, + MMX_PACKUSWBirr)>; def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> { let Latency = 3; @@ -919,11 +915,8 @@ def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16", - "MOVSX(16|32|64)rm32", - "MOVSX(16|32|64)rm8", - "MOVZX(16|32|64)rm16", - "MOVZX(16|32|64)rm8", +def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm(8|16|32)", + "MOVZX(16|32|64)rm(8|16)", "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67? def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> { @@ -931,8 +924,9 @@ def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr", - "(V?)CVTDQ2PDrr")>; +def: InstRW<[SKLWriteResGroup59], (instrs MMX_CVTPI2PDirr, + CVTDQ2PDrr, + VCVTDQ2PDrr)>; def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> { let Latency = 5; @@ -990,44 +984,44 @@ def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm", - "(V?)MOVSHDUPrm", - "(V?)MOVSLDUPrm", - "VPBROADCASTDrm", - "VPBROADCASTQrm")>; +def: InstRW<[SKLWriteResGroup67], (instrs VBROADCASTSSrm, + VPBROADCASTDrm, + VPBROADCASTQrm)>; +def: InstRW<[SKLWriteResGroup67], (instregex "(V?)MOVSHDUPrm", + "(V?)MOVSLDUPrm")>; def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>; +def: InstRW<[SKLWriteResGroup68], (instrs MMX_CVTPI2PSirr)>; def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm", - "MMX_PADDSWirm", - "MMX_PADDUSBirm", - "MMX_PADDUSWirm", - "MMX_PAVGBirm", - "MMX_PAVGWirm", - "MMX_PCMPEQBirm", - "MMX_PCMPEQDirm", - "MMX_PCMPEQWirm", - "MMX_PCMPGTBirm", - "MMX_PCMPGTDirm", - "MMX_PCMPGTWirm", - "MMX_PMAXSWirm", - "MMX_PMAXUBirm", - "MMX_PMINSWirm", - "MMX_PMINUBirm", - "MMX_PSUBSBirm", - "MMX_PSUBSWirm", - "MMX_PSUBUSBirm", - "MMX_PSUBUSWirm")>; +def: InstRW<[SKLWriteResGroup69], (instrs MMX_PADDSBirm, + MMX_PADDSWirm, + MMX_PADDUSBirm, + MMX_PADDUSWirm, + MMX_PAVGBirm, + MMX_PAVGWirm, + MMX_PCMPEQBirm, + MMX_PCMPEQDirm, + MMX_PCMPEQWirm, + MMX_PCMPGTBirm, + MMX_PCMPGTDirm, + MMX_PCMPGTWirm, + MMX_PMAXSWirm, + MMX_PMAXUBirm, + MMX_PMINSWirm, + MMX_PMINUBirm, + MMX_PSUBSBirm, + MMX_PSUBSWirm, + MMX_PSUBUSBirm, + MMX_PSUBUSWirm)>; def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> { let Latency = 6; @@ -1042,8 +1036,8 @@ def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64", - "JMP(16|32|64)m")>; +def: InstRW<[SKLWriteResGroup72], (instrs FARJMP64)>; +def: InstRW<[SKLWriteResGroup72], (instregex "JMP(16|32|64)m")>; def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> { let Latency = 6; @@ -1117,23 +1111,23 @@ def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m", - "VBROADCASTF128", - "VBROADCASTI128", - "VBROADCASTSDYrm", - "VBROADCASTSSYrm", - "VMOVDDUPYrm", - "VMOVSHDUPYrm", - "VMOVSLDUPYrm", - "VPBROADCASTDYrm", - "VPBROADCASTQYrm")>; +def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m")>; +def: InstRW<[SKLWriteResGroup85], (instrs VBROADCASTF128, + VBROADCASTI128, + VBROADCASTSDYrm, + VBROADCASTSSYrm, + VMOVDDUPYrm, + VMOVSHDUPYrm, + VMOVSLDUPYrm, + VPBROADCASTDYrm, + VPBROADCASTQYrm)>; def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> { let Latency = 7; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>; +def: InstRW<[SKLWriteResGroup86], (instrs VCVTDQ2PDYrr)>; def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> { let Latency = 6; @@ -1152,19 +1146,20 @@ def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2PSYrr", - "VCVTPS2PDYrr", - "VCVT(T?)PD2DQYrr")>; +def: InstRW<[SKLWriteResGroup89], (instrs VCVTPD2PSYrr, + VCVTPS2PDYrr, + VCVTPD2DQYrr, + VCVTTPD2DQYrr)>; def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> { let Latency = 7; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm", - "(V?)INSERTI128rm", - "(V?)PADD(B|D|Q|W)rm", - "(V?)PBLENDDrmi", +def: InstRW<[SKLWriteResGroup91], (instrs VINSERTF128rm, + VINSERTI128rm, + VPBLENDDrmi)>; +def: InstRW<[SKLWriteResGroup91], (instregex "(V?)PADD(B|D|Q|W)rm", "(V?)PSUB(B|D|Q|W)rm")>; def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> { @@ -1172,9 +1167,9 @@ def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> { let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm", - "MMX_PACKSSWBirm", - "MMX_PACKUSWBirm")>; +def: InstRW<[SKLWriteResGroup92], (instrs MMX_PACKSSDWirm, + MMX_PACKSSWBirm, + MMX_PACKUSWBirm)>; def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> { let Latency = 7; @@ -1225,8 +1220,8 @@ def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237, let NumMicroOps = 5; let ResourceCycles = [1,1,1,1,1]; } -def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m", - "FARCALL64")>; +def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m")>; +def: InstRW<[SKLWriteResGroup102], (instrs FARCALL64)>; def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> { let Latency = 7; @@ -1262,20 +1257,20 @@ def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup108], (instregex "FCOM(P?)(32|64)m", - "VPBROADCASTBYrm", - "VPBROADCASTWYrm", - "VPMOVSXBDYrm", - "VPMOVSXBQYrm", - "VPMOVSXWQYrm")>; +def: InstRW<[SKLWriteResGroup108], (instregex "FCOM(P?)(32|64)m")>; +def: InstRW<[SKLWriteResGroup108], (instrs VPBROADCASTBYrm, + VPBROADCASTWYrm, + VPMOVSXBDYrm, + VPMOVSXBQYrm, + VPMOVSXWQYrm)>; def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> { let Latency = 8; let NumMicroOps = 2; let ResourceCycles = [1,1]; } +def: InstRW<[SKLWriteResGroup110], (instrs VPBLENDDYrmi)>; def: InstRW<[SKLWriteResGroup110], (instregex "VPADD(B|D|Q|W)Yrm", - "VPBLENDDYrmi", "VPSUB(B|D|Q|W)Yrm")>; def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> { @@ -1323,18 +1318,19 @@ def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm")>; +def: InstRW<[SKLWriteResGroup120], (instrs MMX_CVTPI2PSirm)>; def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> { let Latency = 9; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm", - "VPMOVSXBWYrm", - "VPMOVSXDQYrm", - "VPMOVSXWDYrm", - "VPMOVZXWDYrm")>; +def: InstRW<[SKLWriteResGroup121], (instrs PCMPGTQrm, + VPCMPGTQrm, + VPMOVSXBWYrm, + VPMOVSXDQYrm, + VPMOVSXWDYrm, + VPMOVZXWDYrm)>; def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> { let Latency = 9; @@ -1373,8 +1369,8 @@ def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> { let ResourceCycles = [1,1]; } def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m", - "ILD_F(16|32|64)m", - "VPCMPGTQYrm")>; + "ILD_F(16|32|64)m")>; +def: InstRW<[SKLWriteResGroup133], (instrs VPCMPGTQYrm)>; def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> { let Latency = 10; @@ -1391,7 +1387,7 @@ def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm")>; +def: InstRW<[SKLWriteResGroup138], (instrs MMX_CVTPI2PDirm)>; def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> { let Latency = 10; @@ -1405,8 +1401,8 @@ def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> { let NumMicroOps = 4; let ResourceCycles = [2,1,1]; } -def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm", - "VPHSUBSWYrm")>; +def: InstRW<[SKLWriteResGroup140], (instrs VPHADDSWYrm, + VPHSUBSWYrm)>; def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> { let Latency = 9; @@ -1441,9 +1437,10 @@ def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm", - "VCVTPS2PDYrm", - "VCVT(T?)PS2DQYrm")>; +def: InstRW<[SKLWriteResGroup147], (instrs VCVTDQ2PSYrm, + VCVTPS2PDYrm, + VCVTPS2DQYrm, + VCVTTPS2DQYrm)>; def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> { let Latency = 11; @@ -1474,9 +1471,11 @@ def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2PSrm", - "CVT(T?)PD2DQrm", - "MMX_CVT(T?)PD2PIirm")>; +def: InstRW<[SKLWriteResGroup152], (instrs CVTPD2PSrm, + CVTPD2DQrm, + CVTTPD2DQrm, + MMX_CVTPD2PIirm, + MMX_CVTTPD2PIirm)>; def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> { let Latency = 11; @@ -1491,7 +1490,7 @@ def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort015 let NumMicroOps = 9; let ResourceCycles = [1,5,1,2]; } -def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>; +def: InstRW<[SKLWriteResGroup155], (instrs RCL8rCL)>; def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> { let Latency = 11; @@ -1519,7 +1518,7 @@ def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>; +def: InstRW<[SKLWriteResGroup163], (instrs VCVTDQ2PDYrm)>; def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> { let Latency = 14; @@ -1548,7 +1547,7 @@ def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort015 let NumMicroOps = 10; let ResourceCycles = [2,4,1,3]; } -def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>; +def: InstRW<[SKLWriteResGroup170], (instrs RCR8rCL)>; def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> { let Latency = 15; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index cd6c708926f..d803b5d4349 100755 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -656,37 +656,36 @@ def SKXWriteResGroup10 : SchedWriteRes<[SKXPort0156]> { let ResourceCycles = [1]; } def: InstRW<[SKXWriteResGroup10], (instrs CBW, CWDE, CDQE, - CMC, STC)>; -def: InstRW<[SKXWriteResGroup10], (instregex "SGDT64m", - "SIDT64m", - "SMSW16m", - "STRm", - "SYSCALL")>; + CMC, STC, + SGDT64m, + SIDT64m, + SMSW16m, + STRm, + SYSCALL)>; def SKXWriteResGroup11 : SchedWriteRes<[SKXPort4,SKXPort237]> { let Latency = 1; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup11], (instregex "FBSTPm", - "KMOV(B|D|Q|W)mk", - "ST_FP(32|64|80)m", - "VMPTRSTm")>; +def: InstRW<[SKXWriteResGroup11], (instrs FBSTPm, VMPTRSTm)>; +def: InstRW<[SKXWriteResGroup11], (instregex "KMOV(B|D|Q|W)mk", + "ST_FP(32|64|80)m")>; def SKXWriteResGroup13 : SchedWriteRes<[SKXPort5]> { let Latency = 2; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKXWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>; +def: InstRW<[SKXWriteResGroup13], (instrs MMX_MOVQ2DQrr)>; def SKXWriteResGroup14 : SchedWriteRes<[SKXPort05]> { let Latency = 2; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKXWriteResGroup14], (instrs FDECSTP)>; -def: InstRW<[SKXWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>; +def: InstRW<[SKXWriteResGroup14], (instrs FDECSTP, + MMX_MOVDQ2Qrr)>; def SKXWriteResGroup15 : SchedWriteRes<[SKXPort06]> { let Latency = 2; @@ -725,11 +724,10 @@ def SKXWriteResGroup23 : SchedWriteRes<[SKXPort06,SKXPort0156]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup23], (instrs CWD)>; -def: InstRW<[SKXWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>; -def: InstRW<[SKXWriteResGroup23], (instregex "ADC8i8", - "ADC8ri", - "SBB8i8", +def: InstRW<[SKXWriteResGroup23], (instrs CWD, + JCXZ, JECXZ, JRCXZ, + ADC8i8, SBB8i8)>; +def: InstRW<[SKXWriteResGroup23], (instregex "ADC8ri", "SBB8ri")>; def SKXWriteResGroup25 : SchedWriteRes<[SKXPort4,SKXPort6,SKXPort237]> { @@ -751,10 +749,9 @@ def SKXWriteResGroup28 : SchedWriteRes<[SKXPort4,SKXPort237,SKXPort0156]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKXWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r, +def: InstRW<[SKXWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r, PUSH64i8, STOSB, STOSL, STOSQ, STOSW)>; -def: InstRW<[SKXWriteResGroup28], (instregex "PUSH(16|32|64)rmr", - "PUSH64i8")>; +def: InstRW<[SKXWriteResGroup28], (instregex "PUSH(16|32|64)rmr")>; def SKXWriteResGroup29 : SchedWriteRes<[SKXPort4,SKXPort237,SKXPort15]> { let Latency = 2; @@ -793,26 +790,21 @@ def SKXWriteResGroup32 : SchedWriteRes<[SKXPort5]> { let NumMicroOps = 1; let ResourceCycles = [1]; } +def: InstRW<[SKXWriteResGroup32], (instrs VPSADBWZrr)>; // TODO: 512-bit ops require ports 0/1 to be joined. def: InstRW<[SKXWriteResGroup32], (instregex "(ADD|SUB|SUBR)_(FPrST0|FST0r|FrST0)", "KADD(B|D|Q|W)rr", "KSHIFTL(B|D|Q|W)ri", "KSHIFTR(B|D|Q|W)ri", - "KUNPCKBWrr", - "KUNPCKDQrr", - "KUNPCKWDrr", + "KUNPCK(BW|DQ|WD)rr", "VALIGND(Z|Z128|Z256)rri", "VALIGNQ(Z|Z128|Z256)rri", "VCMPPD(Z|Z128|Z256)rri", "VCMPPS(Z|Z128|Z256)rri", - "VCMPSDZrr", - "VCMPSSZrr", + "VCMP(SD|SS)Zrr", "VDBPSADBWZrri", // TODO: 512-bit ops require ports 0/1 to be joined. - "VFPCLASSPD(Z|Z128|Z256)rr", - "VFPCLASSPS(Z|Z128|Z256)rr", - "VFPCLASSSDZrr", - "VFPCLASSSSZrr", - "VPBROADCASTBrr", - "VPBROADCASTWrr", + "VFPCLASS(PD|PS)(Z|Z128|Z256)rr", + "VFPCLASS(SD|SS)Zrr", + "VPBROADCAST(B|W)rr", "VPCMPB(Z|Z128|Z256)rri", "VPCMPD(Z|Z128|Z256)rri", "VPCMPEQ(B|D|Q|W)(Z|Z128|Z256)rr", @@ -822,7 +814,6 @@ def: InstRW<[SKXWriteResGroup32], (instregex "(ADD|SUB|SUBR)_(FPrST0|FST0r|FrST0 "VPCMPU(B|D|Q|W)(Z|Z128|Z256)rri", "VPCMPW(Z|Z128|Z256)rri", "VP(MAX|MIN)(S|U)Q(Z|Z128|Z256)rr", - "VPSADBWZrr", // TODO: 512-bit ops require ports 0/1 to be joined. "VPTEST(N?)M(B|D|Q|W)(Z|Z128|Z256)rr")>; def SKXWriteResGroup34 : SchedWriteRes<[SKXPort0,SKXPort0156]> { @@ -862,9 +853,9 @@ def SKXWriteResGroup41 : SchedWriteRes<[SKXPort5,SKXPort0156]> { let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[SKXWriteResGroup41], (instregex "MMX_PACKSSDWirr", - "MMX_PACKSSWBirr", - "MMX_PACKUSWBirr")>; +def: InstRW<[SKXWriteResGroup41], (instrs MMX_PACKSSDWirr, + MMX_PACKSSWBirr, + MMX_PACKUSWBirr)>; def SKXWriteResGroup42 : SchedWriteRes<[SKXPort6,SKXPort0156]> { let Latency = 3; @@ -1037,11 +1028,8 @@ def SKXWriteResGroup58 : SchedWriteRes<[SKXPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKXWriteResGroup58], (instregex "MOVSX(16|32|64)rm16", - "MOVSX(16|32|64)rm32", - "MOVSX(16|32|64)rm8", - "MOVZX(16|32|64)rm16", - "MOVZX(16|32|64)rm8", +def: InstRW<[SKXWriteResGroup58], (instregex "MOVSX(16|32|64)rm(8|16|32)", + "MOVZX(16|32|64)rm(8|16)", "(V?)MOVDDUPrm")>; // TODO: Should this be SKXWriteResGroup71? def SKXWriteResGroup61 : SchedWriteRes<[SKXPort5,SKXPort015]> { @@ -1157,19 +1145,21 @@ def SKXWriteResGroup71 : SchedWriteRes<[SKXPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKXWriteResGroup71], (instregex "VBROADCASTSSrm", - "(V?)MOVSHDUPrm", - "(V?)MOVSLDUPrm", - "VPBROADCASTDrm", - "VPBROADCASTQrm")>; +def: InstRW<[SKXWriteResGroup71], (instrs VBROADCASTSSrm, + VPBROADCASTDrm, + VPBROADCASTQrm, + VMOVSHDUPrm, + VMOVSLDUPrm, + MOVSHDUPrm, + MOVSLDUPrm)>; def SKXWriteResGroup72 : SchedWriteRes<[SKXPort5]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [2]; } -def: InstRW<[SKXWriteResGroup72], (instregex "MMX_CVTPI2PSirr", - "VCOMPRESSPD(Z|Z128|Z256)rr", +def: InstRW<[SKXWriteResGroup72], (instrs MMX_CVTPI2PSirr)>; +def: InstRW<[SKXWriteResGroup72], (instregex "VCOMPRESSPD(Z|Z128|Z256)rr", "VCOMPRESSPS(Z|Z128|Z256)rr", "VPCOMPRESSD(Z|Z128|Z256)rr", "VPCOMPRESSQ(Z|Z128|Z256)rr", @@ -1180,34 +1170,34 @@ def SKXWriteResGroup73 : SchedWriteRes<[SKXPort0,SKXPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup73], (instregex "MMX_PADDSBirm", - "MMX_PADDSWirm", - "MMX_PADDUSBirm", - "MMX_PADDUSWirm", - "MMX_PAVGBirm", - "MMX_PAVGWirm", - "MMX_PCMPEQBirm", - "MMX_PCMPEQDirm", - "MMX_PCMPEQWirm", - "MMX_PCMPGTBirm", - "MMX_PCMPGTDirm", - "MMX_PCMPGTWirm", - "MMX_PMAXSWirm", - "MMX_PMAXUBirm", - "MMX_PMINSWirm", - "MMX_PMINUBirm", - "MMX_PSUBSBirm", - "MMX_PSUBSWirm", - "MMX_PSUBUSBirm", - "MMX_PSUBUSWirm")>; +def: InstRW<[SKXWriteResGroup73], (instrs MMX_PADDSBirm, + MMX_PADDSWirm, + MMX_PADDUSBirm, + MMX_PADDUSWirm, + MMX_PAVGBirm, + MMX_PAVGWirm, + MMX_PCMPEQBirm, + MMX_PCMPEQDirm, + MMX_PCMPEQWirm, + MMX_PCMPGTBirm, + MMX_PCMPGTDirm, + MMX_PCMPGTWirm, + MMX_PMAXSWirm, + MMX_PMAXUBirm, + MMX_PMINSWirm, + MMX_PMINUBirm, + MMX_PSUBSBirm, + MMX_PSUBSWirm, + MMX_PSUBUSBirm, + MMX_PSUBUSWirm)>; def SKXWriteResGroup76 : SchedWriteRes<[SKXPort6,SKXPort23]> { let Latency = 6; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup76], (instregex "FARJMP64", - "JMP(16|32|64)m")>; +def: InstRW<[SKXWriteResGroup76], (instrs FARJMP64)>; +def: InstRW<[SKXWriteResGroup76], (instregex "JMP(16|32|64)m")>; def SKXWriteResGroup78 : SchedWriteRes<[SKXPort23,SKXPort06]> { let Latency = 6; @@ -1232,8 +1222,8 @@ def SKXWriteResGroup80 : SchedWriteRes<[SKXPort23,SKXPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup80], (instregex "VMOV(64to|QI2)PQIZrm(b?)", - "VMOVDI2PDIZrm(b?)")>; +def: InstRW<[SKXWriteResGroup80], (instregex "VMOV(64to|QI2)PQIZrm(b?)")>; +def: InstRW<[SKXWriteResGroup80], (instrs VMOVDI2PDIZrm)>; def SKXWriteResGroup81 : SchedWriteRes<[SKXPort23,SKXPort0156]> { let Latency = 6; @@ -1291,23 +1281,23 @@ def SKXWriteResGroup89 : SchedWriteRes<[SKXPort23]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKXWriteResGroup89], (instregex "LD_F(32|64|80)m", - "VBROADCASTF128", - "VBROADCASTI128", - "VBROADCASTSDYrm", - "VBROADCASTSSYrm", - "VMOVDDUPYrm", - "VMOVSHDUPYrm", - "VMOVSLDUPYrm", - "VPBROADCASTDYrm", - "VPBROADCASTQYrm")>; +def: InstRW<[SKXWriteResGroup89], (instregex "LD_F(32|64|80)m")>; +def: InstRW<[SKXWriteResGroup89], (instrs VBROADCASTF128, + VBROADCASTI128, + VBROADCASTSDYrm, + VBROADCASTSSYrm, + VMOVDDUPYrm, + VMOVSHDUPYrm, + VMOVSLDUPYrm, + VPBROADCASTDYrm, + VPBROADCASTQYrm)>; def SKXWriteResGroup90 : SchedWriteRes<[SKXPort01,SKXPort5]> { let Latency = 7; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup90], (instregex "VCVTDQ2PDYrr")>; +def: InstRW<[SKXWriteResGroup90], (instrs VCVTDQ2PDYrr)>; def SKXWriteResGroup92 : SchedWriteRes<[SKXPort5,SKXPort23]> { let Latency = 7; @@ -1374,12 +1364,13 @@ def SKXWriteResGroup95 : SchedWriteRes<[SKXPort23,SKXPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } +def: InstRW<[SKXWriteResGroup95], (instrs VMOVNTDQAZ128rm, + VPBLENDDrmi)>; def: InstRW<[SKXWriteResGroup95], (instregex "VBLENDMPDZ128rm(b?)", "VBLENDMPSZ128rm(b?)", "VBROADCASTI32X2Z128m(b?)", "VBROADCASTSSZ128m(b?)", - "VINSERTF128rm", - "VINSERTI128rm", + "VINSERT(F|I)128rm", "VMOVAPDZ128rm(b?)", "VMOVAPSZ128rm(b?)", "VMOVDDUPZ128rm(b?)", @@ -1389,14 +1380,12 @@ def: InstRW<[SKXWriteResGroup95], (instregex "VBLENDMPDZ128rm(b?)", "VMOVDQU32Z128rm(b?)", "VMOVDQU64Z128rm(b?)", "VMOVDQU8Z128rm(b?)", - "VMOVNTDQAZ128rm(b?)", "VMOVSHDUPZ128rm(b?)", "VMOVSLDUPZ128rm(b?)", "VMOVUPDZ128rm(b?)", "VMOVUPSZ128rm(b?)", "VPADD(B|D|Q|W)Z128rm(b?)", "(V?)PADD(B|D|Q|W)rm", - "VPBLENDDrmi", "VPBLENDM(B|D|Q|W)Z128rm(b?)", "VPBROADCASTDZ128m(b?)", "VPBROADCASTQZ128m(b?)", @@ -1410,9 +1399,9 @@ def SKXWriteResGroup96 : SchedWriteRes<[SKXPort5,SKXPort23]> { let NumMicroOps = 3; let ResourceCycles = [2,1]; } -def: InstRW<[SKXWriteResGroup96], (instregex "MMX_PACKSSDWirm", - "MMX_PACKSSWBirm", - "MMX_PACKUSWBirm")>; +def: InstRW<[SKXWriteResGroup96], (instrs MMX_PACKSSDWirm, + MMX_PACKSSWBirm, + MMX_PACKUSWBirm)>; def SKXWriteResGroup97 : SchedWriteRes<[SKXPort5,SKXPort015]> { let Latency = 7; @@ -1495,8 +1484,8 @@ def SKXWriteResGroup109 : SchedWriteRes<[SKXPort4,SKXPort6,SKXPort23,SKXPort237, let NumMicroOps = 5; let ResourceCycles = [1,1,1,1,1]; } -def: InstRW<[SKXWriteResGroup109], (instregex "CALL(16|32|64)m", - "FARCALL64")>; +def: InstRW<[SKXWriteResGroup109], (instregex "CALL(16|32|64)m")>; +def: InstRW<[SKXWriteResGroup109], (instrs FARCALL64)>; def SKXWriteResGroup110 : SchedWriteRes<[SKXPort0,SKXPort4,SKXPort237,SKXPort0156]> { let Latency = 7; @@ -1571,19 +1560,21 @@ def SKXWriteResGroup119 : SchedWriteRes<[SKXPort5,SKXPort23]> { } def: InstRW<[SKXWriteResGroup119], (instregex "FCOM(P?)(32|64)m", "VFPCLASSSDZrm(b?)", - "VPBROADCASTBYrm", "VPBROADCASTB(Z|Z256)m(b?)", - "VPBROADCASTWYrm", - "VPBROADCASTW(Z|Z256)m(b?)", - "VPMOVSXBDYrm", - "VPMOVSXBQYrm", - "VPMOVSXWQYrm")>; + "VPBROADCASTW(Z|Z256)m(b?)")>; +def: InstRW<[SKXWriteResGroup119], (instrs VPBROADCASTBYrm, + VPBROADCASTWYrm, + VPMOVSXBDYrm, + VPMOVSXBQYrm, + VPMOVSXWQYrm)>; def SKXWriteResGroup121 : SchedWriteRes<[SKXPort23,SKXPort015]> { let Latency = 8; let NumMicroOps = 2; let ResourceCycles = [1,1]; } +def: InstRW<[SKXWriteResGroup121], (instrs VMOVNTDQAZ256rm, + VPBLENDDYrmi)>; def: InstRW<[SKXWriteResGroup121], (instregex "VBLENDMPD(Z|Z256)rm(b?)", "VBLENDMPS(Z|Z256)rm(b?)", "VBROADCASTF32X2Z256m(b?)", @@ -1621,14 +1612,12 @@ def: InstRW<[SKXWriteResGroup121], (instregex "VBLENDMPD(Z|Z256)rm(b?)", "VMOVDQU32(Z|Z256)rm(b?)", "VMOVDQU64(Z|Z256)rm(b?)", "VMOVDQU8(Z|Z256)rm(b?)", - "VMOVNTDQAZ256rm(b?)", "VMOVSHDUP(Z|Z256)rm(b?)", "VMOVSLDUP(Z|Z256)rm(b?)", "VMOVUPD(Z|Z256)rm(b?)", "VMOVUPS(Z|Z256)rm(b?)", "VPADD(B|D|Q|W)Yrm", "VPADD(B|D|Q|W)(Z|Z256)rm(b?)", - "VPBLENDDYrmi", "VPBLENDM(B|D|Q|W)(Z|Z256)rm(b?)", "VPBROADCASTD(Z|Z256)m(b?)", "VPBROADCASTQ(Z|Z256)m(b?)", @@ -1715,19 +1704,20 @@ def SKXWriteResGroup135 : SchedWriteRes<[SKXPort0,SKXPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup135], (instregex "MMX_CVTPI2PSirm")>; +def: InstRW<[SKXWriteResGroup135], (instrs MMX_CVTPI2PSirm)>; def SKXWriteResGroup136 : SchedWriteRes<[SKXPort5,SKXPort23]> { let Latency = 9; let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup136], (instregex "VALIGNDZ128rm(b?)i", - "VALIGNQZ128rm(b?)i", - "VCMPPDZ128rm(b?)i", - "VCMPPSZ128rm(b?)i", - "VCMPSDZrm", - "VCMPSSZrm", +def: InstRW<[SKXWriteResGroup136], (instrs VPMOVSXBWYrm, + VPMOVSXDQYrm, + VPMOVSXWDYrm, + VPMOVZXWDYrm)>; +def: InstRW<[SKXWriteResGroup136], (instregex "VALIGN(D|Q)Z128rm(b?)i", + "VCMP(PD|PS)Z128rm(b?)i", + "VCMP(SD|SS)Zrm", "VFPCLASSSSZrm(b?)", "VPCMPBZ128rmi(b?)", "VPCMPDZ128rmi(b?)", @@ -1751,18 +1741,14 @@ def: InstRW<[SKXWriteResGroup136], (instregex "VALIGNDZ128rm(b?)i", "VPMINUQZ128rm(b?)", "VPMOVSXBDZ128rm(b?)", "VPMOVSXBQZ128rm(b?)", - "VPMOVSXBWYrm", "VPMOVSXBWZ128rm(b?)", - "VPMOVSXDQYrm", "VPMOVSXDQZ128rm(b?)", - "VPMOVSXWDYrm", "VPMOVSXWDZ128rm(b?)", "VPMOVSXWQZ128rm(b?)", "VPMOVZXBDZ128rm(b?)", "VPMOVZXBQZ128rm(b?)", "VPMOVZXBWZ128rm(b?)", "VPMOVZXDQZ128rm(b?)", - "VPMOVZXWDYrm", "VPMOVZXWDZ128rm(b?)", "VPMOVZXWQZ128rm(b?)", "VPTESTMBZ128rm(b?)", @@ -1810,6 +1796,7 @@ def SKXWriteResGroup148 : SchedWriteRes<[SKXPort5,SKXPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } +def: InstRW<[SKXWriteResGroup148], (instrs VPCMPGTQYrm)>; def: InstRW<[SKXWriteResGroup148], (instregex "(ADD|SUB|SUBR)_F(32|64)m", "ILD_F(16|32|64)m", "VALIGND(Z|Z256)rm(b?)i", @@ -1824,7 +1811,6 @@ def: InstRW<[SKXWriteResGroup148], (instregex "(ADD|SUB|SUBR)_F(32|64)m", "VPCMPEQW(Z|Z256)rm(b?)", "VPCMPGTB(Z|Z256)rm(b?)", "VPCMPGTD(Z|Z256)rm(b?)", - "VPCMPGTQYrm", "VPCMPGTQ(Z|Z256)rm(b?)", "VPCMPGTW(Z|Z256)rm(b?)", "VPCMPQ(Z|Z256)rmi(b?)", @@ -1895,8 +1881,8 @@ def SKXWriteResGroup154 : SchedWriteRes<[SKXPort5,SKXPort01,SKXPort23]> { let NumMicroOps = 4; let ResourceCycles = [2,1,1]; } -def: InstRW<[SKXWriteResGroup154], (instregex "VPHADDSWYrm", - "VPHSUBSWYrm")>; +def: InstRW<[SKXWriteResGroup154], (instrs VPHADDSWYrm, + VPHSUBSWYrm)>; def SKXWriteResGroup156 : SchedWriteRes<[SKXPort1,SKXPort23,SKXPort06,SKXPort0156]> { let Latency = 9; @@ -1931,11 +1917,10 @@ def SKXWriteResGroup161 : SchedWriteRes<[SKXPort23,SKXPort015]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup161], (instregex "VCVTDQ2PD(Z|Z256)rm(b?)", - "VCVTDQ2PSYrm", - "VCVTDQ2PS(Z|Z256)rm(b?)", +def: InstRW<[SKXWriteResGroup161], (instrs VCVTDQ2PSYrm, + VCVTPS2PDYrm)>; +def: InstRW<[SKXWriteResGroup161], (instregex "VCVTDQ2(PD|PS)(Z|Z256)rm(b?)", "VCVTPH2PS(Z|Z256)rm(b?)", - "VCVTPS2PDYrm", "VCVTPS2PD(Z|Z256)rm(b?)", "VCVTQQ2PD(Z|Z256)rm(b?)", "VCVTQQ2PSZ256rm(b?)", @@ -1946,8 +1931,7 @@ def: InstRW<[SKXWriteResGroup161], (instregex "VCVTDQ2PD(Z|Z256)rm(b?)", "VCVT(T?)PS2QQZ256rm(b?)", "VCVT(T?)PS2UDQ(Z|Z256)rm(b?)", "VCVT(T?)PS2UQQZ256rm(b?)", - "VCVTUDQ2PD(Z|Z256)rm(b?)", - "VCVTUDQ2PS(Z|Z256)rm(b?)", + "VCVTUDQ2(PD|PS)(Z|Z256)rm(b?)", "VCVTUQQ2PD(Z|Z256)rm(b?)", "VCVTUQQ2PSZ256rm(b?)")>; @@ -1981,9 +1965,11 @@ def SKXWriteResGroup166 : SchedWriteRes<[SKXPort5,SKXPort23,SKXPort015]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKXWriteResGroup166], (instregex "CVTPD2PSrm", - "CVT(T?)PD2DQrm", - "MMX_CVT(T?)PD2PIirm")>; +def: InstRW<[SKXWriteResGroup166], (instrs CVTPD2PSrm, + CVTPD2DQrm, + CVTTPD2DQrm, + MMX_CVTPD2PIirm, + MMX_CVTTPD2PIirm)>; def SKXWriteResGroup167 : SchedWriteRes<[SKXPort5,SKXPort23,SKXPort015]> { let Latency = 11; @@ -2005,7 +1991,7 @@ def SKXWriteResGroup170 : SchedWriteRes<[SKXPort1,SKXPort06,SKXPort15,SKXPort015 let NumMicroOps = 9; let ResourceCycles = [1,5,1,2]; } -def: InstRW<[SKXWriteResGroup170], (instregex "RCL8rCL")>; +def: InstRW<[SKXWriteResGroup170], (instrs RCL8rCL)>; def SKXWriteResGroup171 : SchedWriteRes<[SKXPort06,SKXPort0156]> { let Latency = 11; @@ -2072,7 +2058,7 @@ def SKXWriteResGroup181 : SchedWriteRes<[SKXPort0,SKXPort5,SKXPort23]> { let NumMicroOps = 3; let ResourceCycles = [1,1,1]; } -def: InstRW<[SKXWriteResGroup181], (instregex "VCVTDQ2PDYrm")>; +def: InstRW<[SKXWriteResGroup181], (instrs VCVTDQ2PDYrm)>; def SKXWriteResGroup183 : SchedWriteRes<[SKXPort5,SKXPort23,SKXPort015]> { let Latency = 13; @@ -2132,7 +2118,7 @@ def SKXWriteResGroup190 : SchedWriteRes<[SKXPort1,SKXPort06,SKXPort15,SKXPort015 let NumMicroOps = 10; let ResourceCycles = [2,4,1,3]; } -def: InstRW<[SKXWriteResGroup190], (instregex "RCR8rCL")>; +def: InstRW<[SKXWriteResGroup190], (instrs RCR8rCL)>; def SKXWriteResGroup191 : SchedWriteRes<[SKXPort0]> { let Latency = 15; diff --git a/llvm/lib/Target/X86/X86ScheduleZnver1.td b/llvm/lib/Target/X86/X86ScheduleZnver1.td index 24009e4a6c3..dc3fa688825 100644 --- a/llvm/lib/Target/X86/X86ScheduleZnver1.td +++ b/llvm/lib/Target/X86/X86ScheduleZnver1.td @@ -493,7 +493,7 @@ def : SchedAlias<WriteSTMXCSR, ZnWriteMicrocoded>; //-- Move instructions --// // MOV. // r16,m. -def : InstRW<[WriteALULd, ReadAfterLd], (instregex "MOV16rm")>; +def : InstRW<[WriteALULd, ReadAfterLd], (instrs MOV16rm)>; // MOVSX, MOVZX. // r,m. @@ -515,7 +515,7 @@ def ZnWritePop16r : SchedWriteRes<[ZnAGU]>{ let Latency = 5; let NumMicroOps = 2; } -def : InstRW<[ZnWritePop16r], (instregex "POP16rmm")>; +def : InstRW<[ZnWritePop16r], (instrs POP16rmm)>; def : InstRW<[WriteMicrocoded], (instregex "POPF(16|32)")>; def : InstRW<[WriteMicrocoded], (instregex "POPA(16|32)")>; @@ -778,7 +778,7 @@ def : InstRW<[WriteMicrocoded], (instrs RDPMC)>; def : InstRW<[WriteMicrocoded], (instregex "RDRAND(16|32|64)r")>; // XGETBV. -def : InstRW<[WriteMicrocoded], (instregex "XGETBV")>; +def : InstRW<[WriteMicrocoded], (instrs XGETBV)>; //-- String instructions --// // CMPS. @@ -816,16 +816,16 @@ def ZnWriteSTr: SchedWriteRes<[ZnFPU23]> { // LD_F. // r. -def : InstRW<[ZnWriteFLDr], (instregex "LD_Frr")>; +def : InstRW<[ZnWriteFLDr], (instrs LD_Frr)>; // m. def ZnWriteLD_F80m : SchedWriteRes<[ZnAGU, ZnFPU13]> { let NumMicroOps = 2; } -def : InstRW<[ZnWriteLD_F80m], (instregex "LD_F80m")>; +def : InstRW<[ZnWriteLD_F80m], (instrs LD_F80m)>; // FBLD. -def : InstRW<[WriteMicrocoded], (instregex "FBLDm")>; +def : InstRW<[WriteMicrocoded], (instrs FBLDm)>; // FST(P). // r. @@ -835,11 +835,11 @@ def : InstRW<[ZnWriteSTr], (instregex "ST_(F|FP)rr")>; def ZnWriteST_FP80m : SchedWriteRes<[ZnAGU, ZnFPU23]> { let Latency = 5; } -def : InstRW<[ZnWriteST_FP80m], (instregex "ST_FP80m")>; +def : InstRW<[ZnWriteST_FP80m], (instrs ST_FP80m)>; // FBSTP. // m80. -def : InstRW<[WriteMicrocoded], (instregex "FBSTPm")>; +def : InstRW<[WriteMicrocoded], (instrs FBSTPm)>; def ZnWriteFXCH : SchedWriteRes<[ZnFPU]>; @@ -896,10 +896,10 @@ def : InstRW<[ZnWriteFPU3], (instrs FINCSTP, FDECSTP)>; def : InstRW<[ZnWriteFPU3], (instregex "FFREE")>; // FNSAVE. -def : InstRW<[WriteMicrocoded], (instregex "FSAVEm")>; +def : InstRW<[WriteMicrocoded], (instrs FSAVEm)>; // FRSTOR. -def : InstRW<[WriteMicrocoded], (instregex "FRSTORm")>; +def : InstRW<[WriteMicrocoded], (instrs FRSTORm)>; //-- Arithmetic instructions --// @@ -1396,46 +1396,46 @@ def : InstRW<[ZnWriteSHA1MSG1Ld], (instregex "SHA(1|256)MSG1rm")>; // SHA1MSG2 // x,x. def ZnWriteSHA1MSG2r : SchedWriteRes<[ZnFPU12]> ; -def : InstRW<[ZnWriteSHA1MSG2r], (instregex "SHA1MSG2rr")>; +def : InstRW<[ZnWriteSHA1MSG2r], (instrs SHA1MSG2rr)>; // x,m. def ZnWriteSHA1MSG2Ld : SchedWriteRes<[ZnAGU, ZnFPU12]> { let Latency = 8; } -def : InstRW<[ZnWriteSHA1MSG2Ld], (instregex "SHA1MSG2rm")>; +def : InstRW<[ZnWriteSHA1MSG2Ld], (instrs SHA1MSG2rm)>; // SHA1NEXTE // x,x. def ZnWriteSHA1NEXTEr : SchedWriteRes<[ZnFPU1]> ; -def : InstRW<[ZnWriteSHA1NEXTEr], (instregex "SHA1NEXTErr")>; +def : InstRW<[ZnWriteSHA1NEXTEr], (instrs SHA1NEXTErr)>; // x,m. def ZnWriteSHA1NEXTELd : SchedWriteRes<[ZnAGU, ZnFPU1]> { let Latency = 8; } -def : InstRW<[ZnWriteSHA1NEXTELd], (instregex "SHA1NEXTErm")>; +def : InstRW<[ZnWriteSHA1NEXTELd], (instrs SHA1NEXTErm)>; // SHA1RNDS4 // x,x. def ZnWriteSHA1RNDS4r : SchedWriteRes<[ZnFPU1]> { let Latency = 6; } -def : InstRW<[ZnWriteSHA1RNDS4r], (instregex "SHA1RNDS4rr")>; +def : InstRW<[ZnWriteSHA1RNDS4r], (instrs SHA1RNDS4rri)>; // x,m. def ZnWriteSHA1RNDS4Ld : SchedWriteRes<[ZnAGU, ZnFPU1]> { let Latency = 13; } -def : InstRW<[ZnWriteSHA1RNDS4Ld], (instregex "SHA1RNDS4rm")>; +def : InstRW<[ZnWriteSHA1RNDS4Ld], (instrs SHA1RNDS4rmi)>; // SHA256RNDS2 // x,x. def ZnWriteSHA256RNDS2r : SchedWriteRes<[ZnFPU1]> { let Latency = 4; } -def : InstRW<[ZnWriteSHA256RNDS2r], (instregex "SHA256RNDS2rr")>; +def : InstRW<[ZnWriteSHA256RNDS2r], (instrs SHA256RNDS2rr)>; // x,m. def ZnWriteSHA256RNDS2Ld : SchedWriteRes<[ZnAGU, ZnFPU1]> { let Latency = 11; } -def : InstRW<[ZnWriteSHA256RNDS2Ld], (instregex "SHA256RNDS2rm")>; +def : InstRW<[ZnWriteSHA256RNDS2Ld], (instrs SHA256RNDS2rm)>; //-- Arithmetic instructions --// |

