Index: lib/Target/X86/X86InstrInfo.td =================================================================== --- lib/Target/X86/X86InstrInfo.td +++ lib/Target/X86/X86InstrInfo.td @@ -1133,7 +1133,7 @@ // // Nop -let hasSideEffects = 0, SchedRW = [WriteZero] in { +let hasSideEffects = 0, SchedRW = [WriteNop] in { def NOOP : I<0x90, RawFrm, (outs), (ins), "nop", [], IIC_NOP>; def NOOPW : I<0x1f, MRMXm, (outs), (ins i16mem:$zero), "nop{w}\t$zero", [], IIC_NOP>, TB, OpSize16; Index: lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- lib/Target/X86/X86ScheduleBtVer2.td +++ lib/Target/X86/X86ScheduleBtVer2.td @@ -271,7 +271,7 @@ def : WriteRes { let Latency = 100; } def : WriteRes { let Latency = 100; } def : WriteRes; -def : WriteRes; +def : WriteRes { let Latency = 0; } //////////////////////////////////////////////////////////////////////////////// // Floating point. This covers both scalar and vector operations. Index: test/CodeGen/X86/schedule-x86_64.ll =================================================================== --- test/CodeGen/X86/schedule-x86_64.ll +++ test/CodeGen/X86/schedule-x86_64.ll @@ -8389,13 +8389,13 @@ ; BTVER2-LABEL: test_nop: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: nop # sched: [1:?] -; BTVER2-NEXT: nopw %di # sched: [1:?] -; BTVER2-NEXT: nopw (%rcx) # sched: [1:?] -; BTVER2-NEXT: nopl %esi # sched: [1:?] -; BTVER2-NEXT: nopl (%r8) # sched: [1:?] -; BTVER2-NEXT: nopq %rdx # sched: [1:?] -; BTVER2-NEXT: nopq (%r9) # sched: [1:?] +; BTVER2-NEXT: nop # sched: [0:?] +; BTVER2-NEXT: nopw %di # sched: [0:?] +; BTVER2-NEXT: nopw (%rcx) # sched: [0:?] +; BTVER2-NEXT: nopl %esi # sched: [0:?] +; BTVER2-NEXT: nopl (%r8) # sched: [0:?] +; BTVER2-NEXT: nopq %rdx # sched: [0:?] +; BTVER2-NEXT: nopq (%r9) # sched: [0:?] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; @@ -9500,7 +9500,7 @@ ; BTVER2-LABEL: test_pause: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: pause # sched: [1:?] +; BTVER2-NEXT: pause # sched: [0:?] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ; Index: test/CodeGen/X86/sse-schedule.ll =================================================================== --- test/CodeGen/X86/sse-schedule.ll +++ test/CodeGen/X86/sse-schedule.ll @@ -3763,7 +3763,7 @@ ret <4 x float> %7 } -; 'WriteZero' class instructions. +; 'WriteZero' and 'WriteNop' class instructions. define <4 x float> @test_fnop() nounwind { ; GENERIC-LABEL: test_fnop: @@ -3840,7 +3840,7 @@ ; BTVER2: # %bb.0: ; BTVER2-NEXT: vxorps %xmm0, %xmm0, %xmm0 # sched: [1:0.50] ; BTVER2-NEXT: #APP -; BTVER2-NEXT: nop # sched: [1:?] +; BTVER2-NEXT: nop # sched: [0:?] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retq # sched: [4:1.00] ;