Index: llvm/trunk/lib/Target/X86/X86InstrShiftRotate.td =================================================================== --- llvm/trunk/lib/Target/X86/X86InstrShiftRotate.td +++ llvm/trunk/lib/Target/X86/X86InstrShiftRotate.td @@ -650,7 +650,7 @@ // Double shift instructions (generalizations of rotate) //===----------------------------------------------------------------------===// -let Constraints = "$src1 = $dst", SchedRW = [WriteShift] in { +let Constraints = "$src1 = $dst", SchedRW = [WriteShiftDouble] in { let Uses = [CL] in { def SHLD16rrCL : I<0xA5, MRMDestReg, (outs GR16:$dst), @@ -731,7 +731,7 @@ } } // Constraints = "$src = $dst", SchedRW -let SchedRW = [WriteShiftLd, WriteRMW] in { +let SchedRW = [WriteShiftDoubleLd, WriteRMW] in { let Uses = [CL] in { def SHLD16mrCL : I<0xA5, MRMDestMem, (outs), (ins i16mem:$dst, GR16:$src2), "shld{w}\t{%cl, $src2, $dst|$dst, $src2, cl}", Index: llvm/trunk/lib/Target/X86/X86SchedBroadwell.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedBroadwell.td +++ llvm/trunk/lib/Target/X86/X86SchedBroadwell.td @@ -146,6 +146,9 @@ // Integer shifts and rotates. defm : BWWriteResPair; +// Double shift instructions. +defm : BWWriteResPair; + // BMI1 BEXTR, BMI2 BZHI defm : BWWriteResPair; defm : BWWriteResPair; Index: llvm/trunk/lib/Target/X86/X86SchedHaswell.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedHaswell.td +++ llvm/trunk/lib/Target/X86/X86SchedHaswell.td @@ -124,6 +124,7 @@ defm : HWWriteResPair; def : WriteRes { let Latency = 3; } defm : HWWriteResPair; +defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; Index: llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td +++ llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td @@ -123,6 +123,7 @@ def : WriteRes { let Latency = 3; } defm : SBWriteResPair; +defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; Index: llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td +++ llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td @@ -144,6 +144,9 @@ // Integer shifts and rotates. defm : SKLWriteResPair; +// Double shift instructions. +defm : SKLWriteResPair; + // BMI1 BEXTR, BMI2 BZHI defm : SKLWriteResPair; defm : SKLWriteResPair; Index: llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td +++ llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td @@ -137,6 +137,9 @@ // Integer shifts and rotates. defm : SKXWriteResPair; +// Double shift instructions. +defm : SKXWriteResPair; + // Bit counts. defm : SKXWriteResPair; defm : SKXWriteResPair; Index: llvm/trunk/lib/Target/X86/X86Schedule.td =================================================================== --- llvm/trunk/lib/Target/X86/X86Schedule.td +++ llvm/trunk/lib/Target/X86/X86Schedule.td @@ -142,6 +142,8 @@ // Integer shifts and rotates. defm WriteShift : X86SchedWritePair; +// Double shift instructions. +defm WriteShiftDouble : X86SchedWritePair; // BMI1 BEXTR, BMI2 BZHI defm WriteBEXTR : X86SchedWritePair; Index: llvm/trunk/lib/Target/X86/X86ScheduleAtom.td =================================================================== --- llvm/trunk/lib/Target/X86/X86ScheduleAtom.td +++ llvm/trunk/lib/Target/X86/X86ScheduleAtom.td @@ -148,6 +148,12 @@ defm : AtomWriteResPair; //////////////////////////////////////////////////////////////////////////////// +// Double shift instructions. +//////////////////////////////////////////////////////////////////////////////// + +defm : AtomWriteResPair; + +//////////////////////////////////////////////////////////////////////////////// // Loads, stores, and moves, not folded with other operations. //////////////////////////////////////////////////////////////////////////////// Index: llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td +++ llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td @@ -200,6 +200,8 @@ defm : JWriteResIntPair; +defm : JWriteResIntPair; + def JWriteSHLDrri : SchedWriteRes<[JALU01]> { let Latency = 3; let ResourceCycles = [6]; Index: llvm/trunk/lib/Target/X86/X86ScheduleSLM.td =================================================================== --- llvm/trunk/lib/Target/X86/X86ScheduleSLM.td +++ llvm/trunk/lib/Target/X86/X86ScheduleSLM.td @@ -98,6 +98,7 @@ defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; +defm : SLMWriteResPair; defm : SLMWriteResPair; defm : SLMWriteResPair; Index: llvm/trunk/lib/Target/X86/X86ScheduleZnver1.td =================================================================== --- llvm/trunk/lib/Target/X86/X86ScheduleZnver1.td +++ llvm/trunk/lib/Target/X86/X86ScheduleZnver1.td @@ -180,6 +180,7 @@ defm : ZnWriteResPair; defm : ZnWriteResPair; defm : ZnWriteResPair; +defm : ZnWriteResPair; defm : ZnWriteResPair; defm : ZnWriteResFpuPair;