Index: lib/Target/X86/X86InstrAVX512.td =================================================================== --- lib/Target/X86/X86InstrAVX512.td +++ lib/Target/X86/X86InstrAVX512.td @@ -8002,8 +8002,8 @@ let Predicates = [HasAVX512] in defm VCVTPH2PSZ : avx512_cvtph2ps, - avx512_cvtph2ps_sae, + WriteCvtPH2PSZ>, + avx512_cvtph2ps_sae, EVEX, EVEX_V512, EVEX_CD8<32, CD8VH>; let Predicates = [HasVLX] in { @@ -8056,8 +8056,8 @@ let Predicates = [HasAVX512] in { defm VCVTPS2PHZ : avx512_cvtps2ph, - avx512_cvtps2ph_sae, + WriteCvtPS2PHZ, WriteCvtPS2PHZSt>, + avx512_cvtps2ph_sae, EVEX, EVEX_V512, EVEX_CD8<32, CD8VH>; let Predicates = [HasVLX] in { defm VCVTPS2PHZ256 : avx512_cvtps2ph; +// Unsupported. +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +defm : BWWriteResPair; +} // Unsupported + // Arithmetic. defm : BWWriteResPair; // Simple integer ALU op. defm : BWWriteResPair; // Integer ALU + flags op. @@ -212,22 +254,18 @@ //defm : BWWriteResPair; // Floating point division. defm : BWWriteResPair; // Floating point division (XMM). defm : BWWriteResPair; // Floating point division (YMM). -defm : BWWriteResPair; // Floating point division (ZMM). //defm : BWWriteResPair; // Floating point division. defm : BWWriteResPair; // Floating point division (XMM). defm : BWWriteResPair; // Floating point division (YMM). -defm : BWWriteResPair; // Floating point division (ZMM). defm : X86WriteRes; // Floating point square root. defm : X86WriteRes; defm : BWWriteResPair; // Floating point square root (XMM). defm : BWWriteResPair; // Floating point square root (YMM). -defm : BWWriteResPair; // Floating point square root (ZMM). defm : X86WriteRes; // Floating point double square root. defm : X86WriteRes; defm : BWWriteResPair; // Floating point double square root (XMM). defm : BWWriteResPair; // Floating point double square root (YMM). -defm : BWWriteResPair; // Floating point double square root (ZMM). defm : BWWriteResPair; // Floating point long double square root. defm : BWWriteResPair; // Floating point reciprocal estimate. @@ -1688,4 +1726,3 @@ def: InstRW<[WriteZero], (instrs CLC)>; } // SchedModel - Index: lib/Target/X86/X86SchedHaswell.td =================================================================== --- lib/Target/X86/X86SchedHaswell.td +++ lib/Target/X86/X86SchedHaswell.td @@ -136,6 +136,48 @@ // the port to read all inputs. We don't model that. def : WriteRes; +// Unsupported. +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +defm : HWWriteResPair; +} // Unsupported + // Bit counts. defm : HWWriteResPair; defm : HWWriteResPair; @@ -203,11 +245,9 @@ defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; -defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; -defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; @@ -220,11 +260,9 @@ defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; -defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; -defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; Index: lib/Target/X86/X86SchedSandyBridge.td =================================================================== --- lib/Target/X86/X86SchedSandyBridge.td +++ lib/Target/X86/X86SchedSandyBridge.td @@ -96,6 +96,48 @@ // 2/3 cycle to recompute the address. def : WriteRes; +// Unsupported. +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +defm : SBWriteResPair; +} // Unsupported + def : WriteRes; def : WriteRes; def : WriteRes { let Latency = 5; } @@ -195,11 +237,9 @@ defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; -defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; -defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; @@ -212,11 +252,9 @@ defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; -defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; -defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; Index: lib/Target/X86/X86SchedSkylakeClient.td =================================================================== --- lib/Target/X86/X86SchedSkylakeClient.td +++ lib/Target/X86/X86SchedSkylakeClient.td @@ -104,6 +104,48 @@ // 2/3/7 cycle to recompute the address. def : WriteRes; +// Unsupported. +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +defm : SKLWriteResPair; +} // Unsupported + // Arithmetic. defm : SKLWriteResPair; // Simple integer ALU op. defm : SKLWriteResPair; // Integer ALU + flags op. @@ -208,20 +250,16 @@ defm : SKLWriteResPair; // Floating point division. //defm : SKLWriteResPair; // Floating point division (XMM). defm : SKLWriteResPair; // Floating point division (YMM). -defm : SKLWriteResPair; // Floating point division (ZMM). //defm : SKLWriteResPair; // Floating point double division. //defm : SKLWriteResPair; // Floating point double division (XMM). //defm : SKLWriteResPair; // Floating point double division (YMM). -defm : SKLWriteResPair; // Floating point double division (ZMM). defm : SKLWriteResPair; // Floating point square root. defm : SKLWriteResPair; // Floating point square root (XMM). defm : SKLWriteResPair; // Floating point square root (YMM). -defm : SKLWriteResPair; // Floating point square root (ZMM). defm : SKLWriteResPair; // Floating point double square root. defm : SKLWriteResPair; // Floating point double square root (XMM). defm : SKLWriteResPair; // Floating point double square root (YMM). -defm : SKLWriteResPair; // Floating point double square root (ZMM). defm : SKLWriteResPair; // Floating point long double square root. defm : SKLWriteResPair; // Floating point reciprocal estimate. Index: lib/Target/X86/X86SchedSkylakeServer.td =================================================================== --- lib/Target/X86/X86SchedSkylakeServer.td +++ lib/Target/X86/X86SchedSkylakeServer.td @@ -184,26 +184,32 @@ defm : SKXWriteResPair; // Floating point add/sub. defm : SKXWriteResPair; // Floating point add/sub (XMM). -defm : SKXWriteResPair; // Floating point add/sub (YMM/ZMM). +defm : SKXWriteResPair; // Floating point add/sub (YMM). +defm : SKXWriteResPair; // Floating point add/sub (ZMM). defm : SKXWriteResPair; // Floating point double add/sub. defm : SKXWriteResPair; // Floating point double add/sub (XMM). -defm : SKXWriteResPair; // Floating point double add/sub (YMM/ZMM). +defm : SKXWriteResPair; // Floating point double add/sub (YMM). +defm : SKXWriteResPair; // Floating point double add/sub (ZMM). defm : SKXWriteResPair; // Floating point compare. defm : SKXWriteResPair; // Floating point compare (XMM). -defm : SKXWriteResPair; // Floating point compare (YMM/ZMM). +defm : SKXWriteResPair; // Floating point compare (YMM). +defm : SKXWriteResPair; // Floating point compare (ZMM). defm : SKXWriteResPair; // Floating point double compare. defm : SKXWriteResPair; // Floating point double compare (XMM). -defm : SKXWriteResPair; // Floating point double compare (YMM/ZMM). +defm : SKXWriteResPair; // Floating point double compare (YMM). +defm : SKXWriteResPair; // Floating point double compare (ZMM). defm : SKXWriteResPair; // Floating point compare to flags. defm : SKXWriteResPair; // Floating point multiplication. defm : SKXWriteResPair; // Floating point multiplication (XMM). -defm : SKXWriteResPair; // Floating point multiplication (YMM/ZMM). +defm : SKXWriteResPair; // Floating point multiplication (YMM). +defm : SKXWriteResPair; // Floating point multiplication (ZMM). defm : SKXWriteResPair; // Floating point double multiplication. defm : SKXWriteResPair; // Floating point double multiplication (XMM). -defm : SKXWriteResPair; // Floating point double multiplication (YMM/ZMM). +defm : SKXWriteResPair; // Floating point double multiplication (YMM). +defm : SKXWriteResPair; // Floating point double multiplication (ZMM). defm : SKXWriteResPair; // 10-14 cycles. // Floating point division. //defm : SKXWriteResPair; // 10-14 cycles. // Floating point division (XMM). @@ -226,33 +232,45 @@ defm : SKXWriteResPair; // Floating point reciprocal estimate. defm : SKXWriteResPair; // Floating point reciprocal estimate (XMM). -defm : SKXWriteResPair; // Floating point reciprocal estimate (YMM/ZMM). +defm : SKXWriteResPair; // Floating point reciprocal estimate (YMM). +defm : SKXWriteResPair; // Floating point reciprocal estimate (ZMM). + defm : SKXWriteResPair; // Floating point reciprocal square root estimate. defm : SKXWriteResPair; // Floating point reciprocal square root estimate (XMM). -defm : SKXWriteResPair; // Floating point reciprocal square root estimate (YMM/ZMM). +defm : SKXWriteResPair; // Floating point reciprocal square root estimate (YMM). +defm : SKXWriteResPair; // Floating point reciprocal square root estimate (ZMM). + defm : SKXWriteResPair; // Fused Multiply Add. defm : SKXWriteResPair; // Fused Multiply Add (XMM). -defm : SKXWriteResPair; // Fused Multiply Add (YMM/ZMM). +defm : SKXWriteResPair; // Fused Multiply Add (YMM). +defm : SKXWriteResPair; // Fused Multiply Add (ZMM). defm : SKXWriteResPair; // Floating point double dot product. defm : SKXWriteResPair; // Floating point single dot product. defm : SKXWriteResPair; // Floating point single dot product (YMM). defm : SKXWriteResPair; // Floating point fabs/fchs. defm : SKXWriteResPair; // Floating point rounding. -defm : SKXWriteResPair; // Floating point rounding (YMM/ZMM). +defm : SKXWriteResPair; // Floating point rounding (YMM). +defm : SKXWriteResPair; // Floating point rounding (ZMM). defm : SKXWriteResPair; // Floating point and/or/xor logicals. -defm : SKXWriteResPair; // Floating point and/or/xor logicals (YMM/ZMM). +defm : SKXWriteResPair; // Floating point and/or/xor logicals (YMM). +defm : SKXWriteResPair; // Floating point and/or/xor logicals (ZMM). defm : SKXWriteResPair; // Floating point TEST instructions. -defm : SKXWriteResPair; // Floating point TEST instructions (YMM/ZMM). +defm : SKXWriteResPair; // Floating point TEST instructions (YMM). +defm : SKXWriteResPair; // Floating point TEST instructions (ZMM). defm : SKXWriteResPair; // Floating point vector shuffles. -defm : SKXWriteResPair; // Floating point vector shuffles (YMM/ZMM). +defm : SKXWriteResPair; // Floating point vector shuffles (YMM). +defm : SKXWriteResPair; // Floating point vector shuffles (ZMM). defm : SKXWriteResPair; // Floating point vector variable shuffles. defm : SKXWriteResPair; // Floating point vector variable shuffles. +defm : SKXWriteResPair; // Floating point vector variable shuffles. defm : SKXWriteResPair; // Floating point vector blends. defm : SKXWriteResPair; // Floating point vector blends. +defm : SKXWriteResPair; // Floating point vector blends. defm : SKXWriteResPair; // Fp vector variable blends. defm : SKXWriteResPair; // Fp vector variable blends. +defm : SKXWriteResPair; // Fp vector variable blends. // FMA Scheduling helper class. // class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; } @@ -280,46 +298,61 @@ defm : SKXWriteResPair; // Vector integer ALU op, no logicals. defm : SKXWriteResPair; // Vector integer ALU op, no logicals (XMM). -defm : SKXWriteResPair; // Vector integer ALU op, no logicals (YMM/ZMM). +defm : SKXWriteResPair; // Vector integer ALU op, no logicals (YMM). +defm : SKXWriteResPair; // Vector integer ALU op, no logicals (ZMM). defm : SKXWriteResPair; // Vector integer and/or/xor. defm : SKXWriteResPair; // Vector integer and/or/xor (XMM). -defm : SKXWriteResPair; // Vector integer and/or/xor (YMM/ZMM). +defm : SKXWriteResPair; // Vector integer and/or/xor (YMM). +defm : SKXWriteResPair; // Vector integer and/or/xor (ZMM). defm : SKXWriteResPair; // Vector integer TEST instructions. -defm : SKXWriteResPair; // Vector integer TEST instructions (YMM/ZMM). +defm : SKXWriteResPair; // Vector integer TEST instructions (YMM). +defm : SKXWriteResPair; // Vector integer TEST instructions (ZMM). defm : SKXWriteResPair; // Vector integer multiply. defm : SKXWriteResPair; // Vector integer multiply (XMM). -defm : SKXWriteResPair; // Vector integer multiply (YMM/ZMM). +defm : SKXWriteResPair; // Vector integer multiply (YMM). +defm : SKXWriteResPair; // Vector integer multiply (ZMM). defm : SKXWriteResPair; // Vector PMULLD. -defm : SKXWriteResPair; // Vector PMULLD (YMM/ZMM). +defm : SKXWriteResPair; // Vector PMULLD (YMM). +defm : SKXWriteResPair; // Vector PMULLD (ZMM). defm : SKXWriteResPair; // Vector shuffles. defm : SKXWriteResPair; // Vector shuffles (XMM). -defm : SKXWriteResPair; // Vector shuffles (YMM/ZMM). +defm : SKXWriteResPair; // Vector shuffles (YMM). +defm : SKXWriteResPair; // Vector shuffles (ZMM). defm : SKXWriteResPair; // Vector variable shuffles. defm : SKXWriteResPair; // Vector variable shuffles (XMM). -defm : SKXWriteResPair; // Vector variable shuffles (YMM/ZMM). +defm : SKXWriteResPair; // Vector variable shuffles (YMM). +defm : SKXWriteResPair; // Vector variable shuffles (ZMM). defm : SKXWriteResPair; // Vector blends. -defm : SKXWriteResPair; // Vector blends (YMM/ZMM). +defm : SKXWriteResPair; // Vector blends (YMM). +defm : SKXWriteResPair; // Vector blends (ZMM). defm : SKXWriteResPair; // Vector variable blends. -defm : SKXWriteResPair; // Vector variable blends (YMM/ZMM). +defm : SKXWriteResPair; // Vector variable blends (YMM). +defm : SKXWriteResPair; // Vector variable blends (ZMM). defm : SKXWriteResPair; // Vector MPSAD. defm : SKXWriteResPair; // Vector MPSAD. +defm : SKXWriteResPair; // Vector MPSAD. defm : SKXWriteResPair; // Vector PSADBW. defm : SKXWriteResPair; // Vector PSADBW. defm : SKXWriteResPair; // Vector PSADBW. +defm : SKXWriteResPair; // Vector PSADBW. defm : SKXWriteResPair; // Vector PHMINPOS. // Vector integer shifts. defm : SKXWriteResPair; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; defm : SKXWriteResPair; defm : SKXWriteResPair; // Vector integer immediate shifts (XMM). -defm : SKXWriteResPair; // Vector integer immediate shifts (YMM/ZMM). +defm : SKXWriteResPair; // Vector integer immediate shifts (YMM). +defm : SKXWriteResPair; // Vector integer immediate shifts (ZMM). defm : SKXWriteResPair; // Variable vector shifts. -defm : SKXWriteResPair; // Variable vector shifts (YMM/ZMM). +defm : SKXWriteResPair; // Variable vector shifts (YMM). +defm : SKXWriteResPair; // Variable vector shifts (ZMM). // Vector insert/extract operations. def : WriteRes { @@ -346,33 +379,43 @@ defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : SKXWriteResPair; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; +defm : X86WriteRes; // Strings instructions. Index: lib/Target/X86/X86Schedule.td =================================================================== --- lib/Target/X86/X86Schedule.td +++ lib/Target/X86/X86Schedule.td @@ -163,23 +163,29 @@ defm WriteFAdd : X86SchedWritePair; // Floating point add/sub. defm WriteFAddX : X86SchedWritePair; // Floating point add/sub (XMM). -defm WriteFAddY : X86SchedWritePair; // Floating point add/sub (YMM/ZMM). +defm WriteFAddY : X86SchedWritePair; // Floating point add/sub (YMM). +defm WriteFAddZ : X86SchedWritePair; // Floating point add/sub (ZMM). defm WriteFAdd64 : X86SchedWritePair; // Floating point double add/sub. defm WriteFAdd64X : X86SchedWritePair; // Floating point double add/sub (XMM). -defm WriteFAdd64Y : X86SchedWritePair; // Floating point double add/sub (YMM/ZMM). +defm WriteFAdd64Y : X86SchedWritePair; // Floating point double add/sub (YMM). +defm WriteFAdd64Z : X86SchedWritePair; // Floating point double add/sub (ZMM). defm WriteFCmp : X86SchedWritePair; // Floating point compare. defm WriteFCmpX : X86SchedWritePair; // Floating point compare (XMM). -defm WriteFCmpY : X86SchedWritePair; // Floating point compare (YMM/ZMM). +defm WriteFCmpY : X86SchedWritePair; // Floating point compare (YMM). +defm WriteFCmpZ : X86SchedWritePair; // Floating point compare (ZMM). defm WriteFCmp64 : X86SchedWritePair; // Floating point double compare. defm WriteFCmp64X : X86SchedWritePair; // Floating point double compare (XMM). -defm WriteFCmp64Y : X86SchedWritePair; // Floating point double compare (YMM/ZMM). +defm WriteFCmp64Y : X86SchedWritePair; // Floating point double compare (YMM). +defm WriteFCmp64Z : X86SchedWritePair; // Floating point double compare (ZMM). defm WriteFCom : X86SchedWritePair; // Floating point compare to flags. defm WriteFMul : X86SchedWritePair; // Floating point multiplication. defm WriteFMulX : X86SchedWritePair; // Floating point multiplication (XMM). -defm WriteFMulY : X86SchedWritePair; // Floating point multiplication (YMM/ZMM). +defm WriteFMulY : X86SchedWritePair; // Floating point multiplication (YMM). +defm WriteFMulZ : X86SchedWritePair; // Floating point multiplication (YMM). defm WriteFMul64 : X86SchedWritePair; // Floating point double multiplication. defm WriteFMul64X : X86SchedWritePair; // Floating point double multiplication (XMM). -defm WriteFMul64Y : X86SchedWritePair; // Floating point double multiplication (YMM/ZMM). +defm WriteFMul64Y : X86SchedWritePair; // Floating point double multiplication (YMM). +defm WriteFMul64Z : X86SchedWritePair; // Floating point double multiplication (ZMM). defm WriteFDiv : X86SchedWritePair; // Floating point division. defm WriteFDivX : X86SchedWritePair; // Floating point division (XMM). defm WriteFDivY : X86SchedWritePair; // Floating point division (YMM). @@ -199,41 +205,54 @@ defm WriteFSqrt80 : X86SchedWritePair; // Floating point long double square root. defm WriteFRcp : X86SchedWritePair; // Floating point reciprocal estimate. defm WriteFRcpX : X86SchedWritePair; // Floating point reciprocal estimate (XMM). -defm WriteFRcpY : X86SchedWritePair; // Floating point reciprocal estimate (YMM/ZMM). +defm WriteFRcpY : X86SchedWritePair; // Floating point reciprocal estimate (YMM). +defm WriteFRcpZ : X86SchedWritePair; // Floating point reciprocal estimate (ZMM). defm WriteFRsqrt : X86SchedWritePair; // Floating point reciprocal square root estimate. defm WriteFRsqrtX: X86SchedWritePair; // Floating point reciprocal square root estimate (XMM). -defm WriteFRsqrtY: X86SchedWritePair; // Floating point reciprocal square root estimate (YMM/ZMM). +defm WriteFRsqrtY: X86SchedWritePair; // Floating point reciprocal square root estimate (YMM). +defm WriteFRsqrtZ: X86SchedWritePair; // Floating point reciprocal square root estimate (ZMM). defm WriteFMA : X86SchedWritePair; // Fused Multiply Add. defm WriteFMAX : X86SchedWritePair; // Fused Multiply Add (XMM). -defm WriteFMAY : X86SchedWritePair; // Fused Multiply Add (YMM/ZMM). +defm WriteFMAY : X86SchedWritePair; // Fused Multiply Add (YMM). +defm WriteFMAZ : X86SchedWritePair; // Fused Multiply Add (ZMM). defm WriteDPPD : X86SchedWritePair; // Floating point double dot product. defm WriteDPPS : X86SchedWritePair; // Floating point single dot product. defm WriteDPPSY : X86SchedWritePair; // Floating point single dot product (YMM). +defm WriteDPPSZ : X86SchedWritePair; // Floating point single dot product (ZMM). defm WriteFSign : X86SchedWritePair; // Floating point fabs/fchs. defm WriteFRnd : X86SchedWritePair; // Floating point rounding. -defm WriteFRndY : X86SchedWritePair; // Floating point rounding (YMM/ZMM). +defm WriteFRndY : X86SchedWritePair; // Floating point rounding (YMM). +defm WriteFRndZ : X86SchedWritePair; // Floating point rounding (ZMM). defm WriteFLogic : X86SchedWritePair; // Floating point and/or/xor logicals. -defm WriteFLogicY : X86SchedWritePair; // Floating point and/or/xor logicals (YMM/ZMM). +defm WriteFLogicY : X86SchedWritePair; // Floating point and/or/xor logicals (YMM). +defm WriteFLogicZ : X86SchedWritePair; // Floating point and/or/xor logicals (ZMM). defm WriteFTest : X86SchedWritePair; // Floating point TEST instructions. -defm WriteFTestY : X86SchedWritePair; // Floating point TEST instructions (YMM/ZMM). +defm WriteFTestY : X86SchedWritePair; // Floating point TEST instructions (YMM). +defm WriteFTestZ : X86SchedWritePair; // Floating point TEST instructions (ZMM). defm WriteFShuffle : X86SchedWritePair; // Floating point vector shuffles. -defm WriteFShuffleY : X86SchedWritePair; // Floating point vector shuffles (YMM/ZMM). +defm WriteFShuffleY : X86SchedWritePair; // Floating point vector shuffles (YMM). +defm WriteFShuffleZ : X86SchedWritePair; // Floating point vector shuffles (ZMM). defm WriteFVarShuffle : X86SchedWritePair; // Floating point vector variable shuffles. -defm WriteFVarShuffleY : X86SchedWritePair; // Floating point vector variable shuffles (YMM/ZMM). +defm WriteFVarShuffleY : X86SchedWritePair; // Floating point vector variable shuffles (YMM). +defm WriteFVarShuffleZ : X86SchedWritePair; // Floating point vector variable shuffles (ZMM). defm WriteFBlend : X86SchedWritePair; // Floating point vector blends. -defm WriteFBlendY : X86SchedWritePair; // Floating point vector blends (YMM/ZMM). +defm WriteFBlendY : X86SchedWritePair; // Floating point vector blends (YMM). +defm WriteFBlendZ : X86SchedWritePair; // Floating point vector blends (ZMM). defm WriteFVarBlend : X86SchedWritePair; // Fp vector variable blends. -defm WriteFVarBlendY : X86SchedWritePair; // Fp vector variable blends (YMM/ZMM). +defm WriteFVarBlendY : X86SchedWritePair; // Fp vector variable blends (YMM). +defm WriteFVarBlendZ : X86SchedWritePair; // Fp vector variable blends (YMZMM). // FMA Scheduling helper class. class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; } // Horizontal Add/Sub (float and integer) defm WriteFHAdd : X86SchedWritePair; -defm WriteFHAddY : X86SchedWritePair; // YMM/ZMM. +defm WriteFHAddY : X86SchedWritePair; +defm WriteFHAddZ : X86SchedWritePair; defm WritePHAdd : X86SchedWritePair; -defm WritePHAddX : X86SchedWritePair; // XMM. -defm WritePHAddY : X86SchedWritePair; // YMM/ZMM. +defm WritePHAddX : X86SchedWritePair; +defm WritePHAddY : X86SchedWritePair; +defm WritePHAddZ : X86SchedWritePair; // Vector integer operations. def WriteVecLoad : SchedWrite; @@ -258,38 +277,51 @@ defm WriteVecALU : X86SchedWritePair; // Vector integer ALU op, no logicals. defm WriteVecALUX : X86SchedWritePair; // Vector integer ALU op, no logicals (XMM). -defm WriteVecALUY : X86SchedWritePair; // Vector integer ALU op, no logicals (YMM/ZMM). +defm WriteVecALUY : X86SchedWritePair; // Vector integer ALU op, no logicals (YMM). +defm WriteVecALUZ : X86SchedWritePair; // Vector integer ALU op, no logicals (ZMM). defm WriteVecLogic : X86SchedWritePair; // Vector integer and/or/xor logicals. defm WriteVecLogicX : X86SchedWritePair; // Vector integer and/or/xor logicals (XMM). -defm WriteVecLogicY : X86SchedWritePair; // Vector integer and/or/xor logicals (YMM/ZMM). +defm WriteVecLogicY : X86SchedWritePair; // Vector integer and/or/xor logicals (YMM). +defm WriteVecLogicZ : X86SchedWritePair; // Vector integer and/or/xor logicals (ZMM). defm WriteVecTest : X86SchedWritePair; // Vector integer TEST instructions. -defm WriteVecTestY : X86SchedWritePair; // Vector integer TEST instructions (YMM/ZMM). +defm WriteVecTestY : X86SchedWritePair; // Vector integer TEST instructions (YMM). +defm WriteVecTestZ : X86SchedWritePair; // Vector integer TEST instructions (ZMM). defm WriteVecShift : X86SchedWritePair; // Vector integer shifts (default). defm WriteVecShiftX : X86SchedWritePair; // Vector integer shifts (XMM). -defm WriteVecShiftY : X86SchedWritePair; // Vector integer shifts (YMM/ZMM). +defm WriteVecShiftY : X86SchedWritePair; // Vector integer shifts (YMM). +defm WriteVecShiftZ : X86SchedWritePair; // Vector integer shifts (ZMM). defm WriteVecShiftImm : X86SchedWritePair; // Vector integer immediate shifts (default). defm WriteVecShiftImmX: X86SchedWritePair; // Vector integer immediate shifts (XMM). -defm WriteVecShiftImmY: X86SchedWritePair; // Vector integer immediate shifts (YMM/ZMM). +defm WriteVecShiftImmY: X86SchedWritePair; // Vector integer immediate shifts (YMM). +defm WriteVecShiftImmZ: X86SchedWritePair; // Vector integer immediate shifts (ZMM). defm WriteVecIMul : X86SchedWritePair; // Vector integer multiply (default). defm WriteVecIMulX : X86SchedWritePair; // Vector integer multiply (XMM). -defm WriteVecIMulY : X86SchedWritePair; // Vector integer multiply (YMM/ZMM). +defm WriteVecIMulY : X86SchedWritePair; // Vector integer multiply (YMM). +defm WriteVecIMulZ : X86SchedWritePair; // Vector integer multiply (ZMM). defm WritePMULLD : X86SchedWritePair; // Vector PMULLD. -defm WritePMULLDY : X86SchedWritePair; // Vector PMULLD (YMM/ZMM). +defm WritePMULLDY : X86SchedWritePair; // Vector PMULLD (YMM). +defm WritePMULLDZ : X86SchedWritePair; // Vector PMULLD (ZMM). defm WriteShuffle : X86SchedWritePair; // Vector shuffles. defm WriteShuffleX : X86SchedWritePair; // Vector shuffles (XMM). -defm WriteShuffleY : X86SchedWritePair; // Vector shuffles (YMM/ZMM). +defm WriteShuffleY : X86SchedWritePair; // Vector shuffles (YMM). +defm WriteShuffleZ : X86SchedWritePair; // Vector shuffles (ZMM). defm WriteVarShuffle : X86SchedWritePair; // Vector variable shuffles. defm WriteVarShuffleX : X86SchedWritePair; // Vector variable shuffles (XMM). -defm WriteVarShuffleY : X86SchedWritePair; // Vector variable shuffles (YMM/ZMM). +defm WriteVarShuffleY : X86SchedWritePair; // Vector variable shuffles (YMM). +defm WriteVarShuffleZ : X86SchedWritePair; // Vector variable shuffles (ZMM). defm WriteBlend : X86SchedWritePair; // Vector blends. -defm WriteBlendY : X86SchedWritePair; // Vector blends (YMM/ZMM). +defm WriteBlendY : X86SchedWritePair; // Vector blends (YMM). +defm WriteBlendZ : X86SchedWritePair; // Vector blends (ZMM). defm WriteVarBlend : X86SchedWritePair; // Vector variable blends. -defm WriteVarBlendY : X86SchedWritePair; // Vector variable blends (YMM/ZMM). +defm WriteVarBlendY : X86SchedWritePair; // Vector variable blends (YMM). +defm WriteVarBlendZ : X86SchedWritePair; // Vector variable blends (ZMM). defm WritePSADBW : X86SchedWritePair; // Vector PSADBW. defm WritePSADBWX : X86SchedWritePair; // Vector PSADBW (XMM). -defm WritePSADBWY : X86SchedWritePair; // Vector PSADBW (YMM/ZMM). +defm WritePSADBWY : X86SchedWritePair; // Vector PSADBW (YMM). +defm WritePSADBWZ : X86SchedWritePair; // Vector PSADBW (ZMM). defm WriteMPSAD : X86SchedWritePair; // Vector MPSAD. -defm WriteMPSADY : X86SchedWritePair; // Vector MPSAD (YMM/ZMM). +defm WriteMPSADY : X86SchedWritePair; // Vector MPSAD (YMM). +defm WriteMPSADZ : X86SchedWritePair; // Vector MPSAD (ZMM). defm WritePHMINPOS : X86SchedWritePair; // Vector PHMINPOS. // Vector insert/extract operations. @@ -306,35 +338,44 @@ // Conversion between integer and float. defm WriteCvtSD2I : X86SchedWritePair; // Double -> Integer. defm WriteCvtPD2I : X86SchedWritePair; // Double -> Integer (XMM). -defm WriteCvtPD2IY : X86SchedWritePair; // Double -> Integer (YMM/ZMM). +defm WriteCvtPD2IY : X86SchedWritePair; // Double -> Integer (YMM). +defm WriteCvtPD2IZ : X86SchedWritePair; // Double -> Integer (ZMM). defm WriteCvtSS2I : X86SchedWritePair; // Float -> Integer. defm WriteCvtPS2I : X86SchedWritePair; // Float -> Integer (XMM). -defm WriteCvtPS2IY : X86SchedWritePair; // Float -> Integer (YMM/ZMM). +defm WriteCvtPS2IY : X86SchedWritePair; // Float -> Integer (YMM). +defm WriteCvtPS2IZ : X86SchedWritePair; // Float -> Integer (ZMM). defm WriteCvtI2SD : X86SchedWritePair; // Integer -> Double. defm WriteCvtI2PD : X86SchedWritePair; // Integer -> Double (XMM). -defm WriteCvtI2PDY : X86SchedWritePair; // Integer -> Double (YMM/ZMM). +defm WriteCvtI2PDY : X86SchedWritePair; // Integer -> Double (YMM). +defm WriteCvtI2PDZ : X86SchedWritePair; // Integer -> Double (ZMM). defm WriteCvtI2SS : X86SchedWritePair; // Integer -> Float. defm WriteCvtI2PS : X86SchedWritePair; // Integer -> Float (XMM). -defm WriteCvtI2PSY : X86SchedWritePair; // Integer -> Float (YMM/ZMM). +defm WriteCvtI2PSY : X86SchedWritePair; // Integer -> Float (YMM). +defm WriteCvtI2PSZ : X86SchedWritePair; // Integer -> Float (ZMM). defm WriteCvtSS2SD : X86SchedWritePair; // Float -> Double size conversion. defm WriteCvtPS2PD : X86SchedWritePair; // Float -> Double size conversion (XMM). -defm WriteCvtPS2PDY : X86SchedWritePair; // Float -> Double size conversion (YMM/ZMM). +defm WriteCvtPS2PDY : X86SchedWritePair; // Float -> Double size conversion (YMM). +defm WriteCvtPS2PDZ : X86SchedWritePair; // Float -> Double size conversion (ZMM). defm WriteCvtSD2SS : X86SchedWritePair; // Double -> Float size conversion. defm WriteCvtPD2PS : X86SchedWritePair; // Double -> Float size conversion (XMM). -defm WriteCvtPD2PSY : X86SchedWritePair; // Double -> Float size conversion (YMM/ZMM). +defm WriteCvtPD2PSY : X86SchedWritePair; // Double -> Float size conversion (YMM). +defm WriteCvtPD2PSZ : X86SchedWritePair; // Double -> Float size conversion (ZMM). defm WriteCvtPH2PS : X86SchedWritePair; // Half -> Float size conversion. -defm WriteCvtPH2PSY : X86SchedWritePair; // Half -> Float size conversion (YMM/ZMM). +defm WriteCvtPH2PSY : X86SchedWritePair; // Half -> Float size conversion (YMM). +defm WriteCvtPH2PSZ : X86SchedWritePair; // Half -> Float size conversion (ZMM). def WriteCvtPS2PH : SchedWrite; // // Float -> Half size conversion. -def WriteCvtPS2PHY : SchedWrite; // // Float -> Half size conversion (YMM/ZMM). +def WriteCvtPS2PHY : SchedWrite; // // Float -> Half size conversion (YMM). +def WriteCvtPS2PHZ : SchedWrite; // // Float -> Half size conversion (ZMM). def WriteCvtPS2PHSt : SchedWrite; // // Float -> Half + store size conversion. -def WriteCvtPS2PHYSt : SchedWrite; // // Float -> Half + store size conversion (YMM/ZMM). +def WriteCvtPS2PHYSt : SchedWrite; // // Float -> Half + store size conversion (YMM). +def WriteCvtPS2PHZSt : SchedWrite; // // Float -> Half + store size conversion (ZMM). // CRC32 instruction. defm WriteCRC32 : X86SchedWritePair; @@ -373,7 +414,8 @@ defm WriteShuffle256 : X86SchedWritePair; // 256-bit width vector shuffles. defm WriteVarShuffle256 : X86SchedWritePair; // 256-bit width vector variable shuffles. defm WriteVarVecShift : X86SchedWritePair; // Variable vector shifts. -defm WriteVarVecShiftY : X86SchedWritePair; // Variable vector shifts (YMM/ZMM). +defm WriteVarVecShiftY : X86SchedWritePair; // Variable vector shifts (YMM). +defm WriteVarVecShiftZ : X86SchedWritePair; // Variable vector shifts (ZMM). // Old microcoded instructions that nobody use. def WriteMicrocoded : SchedWrite; @@ -427,25 +469,25 @@ // Vector width wrappers. def SchedWriteFAdd - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFAdd64 - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFHAdd - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFCmp - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFCmp64 - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFMul - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFMul64 - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFMA - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteDPPD : X86SchedWriteWidths; def SchedWriteDPPS - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFDiv : X86SchedWriteWidths; def SchedWriteFDiv64 @@ -457,90 +499,90 @@ : X86SchedWriteWidths; def SchedWriteFRcp - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFRsqrt - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFRnd - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFLogic - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFTest - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFShuffle : X86SchedWriteWidths; + WriteFShuffleY, WriteFShuffleZ>; def SchedWriteFVarShuffle : X86SchedWriteWidths; + WriteFVarShuffleY, WriteFVarShuffleZ>; def SchedWriteFBlend - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteFVarBlend : X86SchedWriteWidths; + WriteFVarBlendY, WriteFVarBlendZ>; def SchedWriteCvtDQ2PD : X86SchedWriteWidths; + WriteCvtI2PDY, WriteCvtI2PDZ>; def SchedWriteCvtDQ2PS : X86SchedWriteWidths; + WriteCvtI2PSY, WriteCvtI2PSZ>; def SchedWriteCvtPD2DQ : X86SchedWriteWidths; + WriteCvtPD2IY, WriteCvtPD2IZ>; def SchedWriteCvtPS2DQ : X86SchedWriteWidths; + WriteCvtPS2IY, WriteCvtPS2IZ>; def SchedWriteCvtPS2PD : X86SchedWriteWidths; + WriteCvtPS2PDY, WriteCvtPS2PDZ>; def SchedWriteCvtPD2PS : X86SchedWriteWidths; + WriteCvtPD2PSY, WriteCvtPD2PSZ>; def SchedWriteVecALU - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWritePHAdd - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteVecLogic : X86SchedWriteWidths; + WriteVecLogicY, WriteVecLogicZ>; def SchedWriteVecTest : X86SchedWriteWidths; + WriteVecTestY, WriteVecTestZ>; def SchedWriteVecShift : X86SchedWriteWidths; + WriteVecShiftY, WriteVecShiftZ>; def SchedWriteVecShiftImm : X86SchedWriteWidths; + WriteVecShiftImmY, WriteVecShiftImmZ>; def SchedWriteVarVecShift : X86SchedWriteWidths; + WriteVarVecShiftY, WriteVarVecShiftZ>; def SchedWriteVecIMul : X86SchedWriteWidths; + WriteVecIMulY, WriteVecIMulZ>; def SchedWritePMULLD : X86SchedWriteWidths; + WritePMULLDY, WritePMULLDZ>; def SchedWriteMPSAD : X86SchedWriteWidths; + WriteMPSADY, WriteMPSADZ>; def SchedWritePSADBW : X86SchedWriteWidths; + WritePSADBWY, WritePSADBWZ>; def SchedWriteShuffle : X86SchedWriteWidths; + WriteShuffleY, WriteShuffleZ>; def SchedWriteVarShuffle : X86SchedWriteWidths; + WriteVarShuffleY, WriteVarShuffleZ>; def SchedWriteBlend - : X86SchedWriteWidths; + : X86SchedWriteWidths; def SchedWriteVarBlend : X86SchedWriteWidths; + WriteVarBlendY, WriteVarBlendZ>; // Vector size wrappers. def SchedWriteFAddSizes @@ -593,4 +635,3 @@ def GenericPostRAModel : GenericX86Model { let PostRAScheduler = 1; } - Index: lib/Target/X86/X86ScheduleAtom.td =================================================================== --- lib/Target/X86/X86ScheduleAtom.td +++ lib/Target/X86/X86ScheduleAtom.td @@ -72,6 +72,51 @@ // A folded store needs a cycle on Port0 for the store data. def : WriteRes; +//////////////////////////////////////////////////////////////////////////////// +// Unsupported. +//////////////////////////////////////////////////////////////////////////////// + +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +defm : AtomWriteResPair; +} // Unsupported + //////////////////////////////////////////////////////////////////////////////// // Arithmetic. //////////////////////////////////////////////////////////////////////////////// @@ -235,19 +280,15 @@ defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; -defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; -defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; -defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; -defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; defm : AtomWriteResPair; Index: lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- lib/Target/X86/X86ScheduleBtVer2.td +++ lib/Target/X86/X86ScheduleBtVer2.td @@ -151,6 +151,51 @@ // A folded store needs a cycle on the SAGU for the store data. def : WriteRes; +//////////////////////////////////////////////////////////////////////////////// +// Unsupported. +//////////////////////////////////////////////////////////////////////////////// + +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +defm : JWriteResIntPair; +} // Unsupported + //////////////////////////////////////////////////////////////////////////////// // Arithmetic. //////////////////////////////////////////////////////////////////////////////// @@ -329,19 +374,15 @@ defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResYMMPair; defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResYMMPair; defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResYMMPair; defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResYMMPair; defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResFpuPair; @@ -547,4 +588,3 @@ } def : InstRW<[JWriteJVZEROUPPER], (instrs VZEROUPPER)>; } // SchedModel - Index: lib/Target/X86/X86ScheduleSLM.td =================================================================== --- lib/Target/X86/X86ScheduleSLM.td +++ lib/Target/X86/X86ScheduleSLM.td @@ -75,6 +75,47 @@ } } +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +defm : SLMWriteResPair; +} // Unsupported + // A folded store needs a cycle on MEC_RSV for the store data, but it does not // need an extra port cycle to recompute the address. def : WriteRes; @@ -179,11 +220,9 @@ defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; -defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; -defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; @@ -193,11 +232,9 @@ defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; -defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; -defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; Index: lib/Target/X86/X86ScheduleZnver1.td =================================================================== --- lib/Target/X86/X86ScheduleZnver1.td +++ lib/Target/X86/X86ScheduleZnver1.td @@ -139,6 +139,47 @@ } } +let Unsupported = 1 in { +def : WriteRes; +def : WriteRes; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +defm : ZnWriteResPair; +} // Unsupported + // WriteRMW is set for instructions with Memory write // operation in codegen def : WriteRes; @@ -243,11 +284,9 @@ defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; //defm : ZnWriteResFpuPair; -defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; //defm : ZnWriteResFpuPair; -defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; // FIXME: Should folds require 1 extra uops? defm : ZnWriteResFpuPair; // FIXME: Should folds require 1 extra uops? @@ -277,11 +316,9 @@ defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; -defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; -defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; // Vector integer operations which uses FPU units