OpSize32, Requires<[Not64BitMode]>, NotMemoryFoldable;
} // isCodeGenOnly = 1, ForceDisassemble = 1
} // mayLoad, SchedRW
-let mayStore = 1, mayLoad = 1, SchedRW = [WriteRMW] in {
+let mayStore = 1, mayLoad = 1, SchedRW = [WriteCopy] in {
def POP16rmm: I<0x8F, MRM0m, (outs), (ins i16mem:$dst), "pop{w}\t$dst", []>,
OpSize16;
def POP32rmm: I<0x8F, MRM0m, (outs), (ins i32mem:$dst), "pop{l}\t$dst", []>,
OpSize32, Requires<[Not64BitMode]>;
-} // mayStore, mayLoad, WriteRMW
+} // mayStore, mayLoad, SchedRW
let mayStore = 1, SchedRW = [WriteStore] in {
def PUSH16r : I<0x50, AddRegFrm, (outs), (ins GR16:$reg), "push{w}\t$reg",[]>,
Requires<[Not64BitMode]>;
} // mayStore, SchedRW
-let mayLoad = 1, mayStore = 1, SchedRW = [WriteRMW] in {
+let mayLoad = 1, mayStore = 1, SchedRW = [WriteCopy] in {
def PUSH16rmm: I<0xFF, MRM6m, (outs), (ins i16mem:$src), "push{w}\t$src", []>,
OpSize16;
def PUSH32rmm: I<0xFF, MRM6m, (outs), (ins i32mem:$src), "push{l}\t$src", []>,
OpSize32, Requires<[In64BitMode]>, NotMemoryFoldable;
} // isCodeGenOnly = 1, ForceDisassemble = 1
} // mayLoad, SchedRW
-let mayLoad = 1, mayStore = 1, SchedRW = [WriteRMW] in
+let mayLoad = 1, mayStore = 1, SchedRW = [WriteCopy] in
def POP64rmm: I<0x8F, MRM0m, (outs), (ins i64mem:$dst), "pop{q}\t$dst", []>,
OpSize32, Requires<[In64BitMode]>;
let mayStore = 1, SchedRW = [WriteStore] in {
OpSize32, Requires<[In64BitMode]>, NotMemoryFoldable;
} // isCodeGenOnly = 1, ForceDisassemble = 1
} // mayStore, SchedRW
-let mayLoad = 1, mayStore = 1, SchedRW = [WriteRMW] in {
+let mayLoad = 1, mayStore = 1, SchedRW = [WriteCopy] in {
def PUSH64rmm: I<0xFF, MRM6m, (outs), (ins i64mem:$src), "push{q}\t$src", []>,
OpSize32, Requires<[In64BitMode]>;
} // mayLoad, mayStore, SchedRW
def WriteStore : SchedWrite;
def WriteStoreNT : SchedWrite;
def WriteMove : SchedWrite;
+def WriteCopy : WriteSequence<[WriteLoad, WriteStore]>; // mem->mem copy
// Arithmetic.
defm WriteALU : X86SchedWritePair; // Simple integer ALU op.
; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
; SLM-NEXT: #APP
; SLM-NEXT: popw %ax # sched: [3:1.00]
-; SLM-NEXT: popw (%ecx) # sched: [1:1.00]
+; SLM-NEXT: popw (%ecx) # sched: [4:2.00]
; SLM-NEXT: pushw %ax # sched: [1:1.00]
-; SLM-NEXT: pushw (%ecx) # sched: [1:1.00]
+; SLM-NEXT: pushw (%ecx) # sched: [4:2.00]
; SLM-NEXT: pushw $4095 # imm = 0xFFF
; SLM-NEXT: # sched: [1:1.00]
; SLM-NEXT: pushw $7 # sched: [1:1.00]
; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
; BTVER2-NEXT: #APP
; BTVER2-NEXT: popw %ax # sched: [5:1.00]
-; BTVER2-NEXT: popw (%ecx) # sched: [1:1.00]
+; BTVER2-NEXT: popw (%ecx) # sched: [6:1.00]
; BTVER2-NEXT: pushw %ax # sched: [1:1.00]
-; BTVER2-NEXT: pushw (%ecx) # sched: [1:1.00]
+; BTVER2-NEXT: pushw (%ecx) # sched: [6:1.00]
; BTVER2-NEXT: pushw $4095 # imm = 0xFFF
; BTVER2-NEXT: # sched: [1:1.00]
; BTVER2-NEXT: pushw $7 # sched: [1:1.00]
; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
; SLM-NEXT: #APP
; SLM-NEXT: popl %eax # sched: [3:1.00]
-; SLM-NEXT: popl (%ecx) # sched: [1:1.00]
+; SLM-NEXT: popl (%ecx) # sched: [4:2.00]
; SLM-NEXT: pushl %eax # sched: [1:1.00]
-; SLM-NEXT: pushl (%ecx) # sched: [1:1.00]
+; SLM-NEXT: pushl (%ecx) # sched: [4:2.00]
; SLM-NEXT: pushl $4095 # imm = 0xFFF
; SLM-NEXT: # sched: [1:1.00]
; SLM-NEXT: pushl $7 # sched: [1:1.00]
; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
; BTVER2-NEXT: #APP
; BTVER2-NEXT: popl %eax # sched: [5:1.00]
-; BTVER2-NEXT: popl (%ecx) # sched: [1:1.00]
+; BTVER2-NEXT: popl (%ecx) # sched: [6:1.00]
; BTVER2-NEXT: pushl %eax # sched: [1:1.00]
-; BTVER2-NEXT: pushl (%ecx) # sched: [1:1.00]
+; BTVER2-NEXT: pushl (%ecx) # sched: [6:1.00]
; BTVER2-NEXT: pushl $4095 # imm = 0xFFF
; BTVER2-NEXT: # sched: [1:1.00]
; BTVER2-NEXT: pushl $7 # sched: [1:1.00]
; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
; ZNVER1-NEXT: #APP
; ZNVER1-NEXT: popl %eax # sched: [8:0.50]
-; ZNVER1-NEXT: popl (%ecx) # sched: [1:0.50]
+; ZNVER1-NEXT: popl (%ecx) # sched: [9:1.00]
; ZNVER1-NEXT: pushl %eax # sched: [1:0.50]
; ZNVER1-NEXT: pushl (%ecx) # sched: [4:0.50]
; ZNVER1-NEXT: pushl $4095 # imm = 0xFFF
; SLM: # %bb.0:
; SLM-NEXT: #APP
; SLM-NEXT: popw %ax # sched: [3:1.00]
-; SLM-NEXT: popw (%rsi) # sched: [1:1.00]
+; SLM-NEXT: popw (%rsi) # sched: [4:2.00]
; SLM-NEXT: pushw %di # sched: [1:1.00]
-; SLM-NEXT: pushw (%rsi) # sched: [1:1.00]
+; SLM-NEXT: pushw (%rsi) # sched: [4:2.00]
; SLM-NEXT: pushw $4095 # imm = 0xFFF
; SLM-NEXT: # sched: [1:1.00]
; SLM-NEXT: pushw $7 # sched: [1:1.00]
; BTVER2: # %bb.0:
; BTVER2-NEXT: #APP
; BTVER2-NEXT: popw %ax # sched: [5:1.00]
-; BTVER2-NEXT: popw (%rsi) # sched: [1:1.00]
+; BTVER2-NEXT: popw (%rsi) # sched: [6:1.00]
; BTVER2-NEXT: pushw %di # sched: [1:1.00]
-; BTVER2-NEXT: pushw (%rsi) # sched: [1:1.00]
+; BTVER2-NEXT: pushw (%rsi) # sched: [6:1.00]
; BTVER2-NEXT: pushw $4095 # imm = 0xFFF
; BTVER2-NEXT: # sched: [1:1.00]
; BTVER2-NEXT: pushw $7 # sched: [1:1.00]
; SLM: # %bb.0:
; SLM-NEXT: #APP
; SLM-NEXT: popq %rax # sched: [3:1.00]
-; SLM-NEXT: popq (%rsi) # sched: [1:1.00]
+; SLM-NEXT: popq (%rsi) # sched: [4:2.00]
; SLM-NEXT: pushq %rdi # sched: [1:1.00]
-; SLM-NEXT: pushq (%rsi) # sched: [1:1.00]
+; SLM-NEXT: pushq (%rsi) # sched: [4:2.00]
; SLM-NEXT: pushq $4095 # imm = 0xFFF
; SLM-NEXT: # sched: [1:1.00]
; SLM-NEXT: pushq $7 # sched: [1:1.00]
; BTVER2: # %bb.0:
; BTVER2-NEXT: #APP
; BTVER2-NEXT: popq %rax # sched: [5:1.00]
-; BTVER2-NEXT: popq (%rsi) # sched: [1:1.00]
+; BTVER2-NEXT: popq (%rsi) # sched: [6:1.00]
; BTVER2-NEXT: pushq %rdi # sched: [1:1.00]
-; BTVER2-NEXT: pushq (%rsi) # sched: [1:1.00]
+; BTVER2-NEXT: pushq (%rsi) # sched: [6:1.00]
; BTVER2-NEXT: pushq $4095 # imm = 0xFFF
; BTVER2-NEXT: # sched: [1:1.00]
; BTVER2-NEXT: pushq $7 # sched: [1:1.00]
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: #APP
; ZNVER1-NEXT: popq %rax # sched: [8:0.50]
-; ZNVER1-NEXT: popq (%rsi) # sched: [1:0.50]
+; ZNVER1-NEXT: popq (%rsi) # sched: [9:1.00]
; ZNVER1-NEXT: pushq %rdi # sched: [1:0.50]
-; ZNVER1-NEXT: pushq (%rsi) # sched: [1:0.50]
+; ZNVER1-NEXT: pushq (%rsi) # sched: [9:1.00]
; ZNVER1-NEXT: pushq $4095 # imm = 0xFFF
; ZNVER1-NEXT: # sched: [1:0.50]
; ZNVER1-NEXT: pushq $7 # sched: [1:0.50]