[llvm] r320333 - [X86] Add DIV/MUL/NEG/NOP/NOT/PAUSE schedule tests

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 10 13:56:25 PST 2017


Author: rksimon
Date: Sun Dec 10 13:56:24 2017
New Revision: 320333

URL: http://llvm.org/viewvc/llvm-project?rev=320333&view=rev
Log:
[X86] Add DIV/MUL/NEG/NOP/NOT/PAUSE schedule tests

Modified:
    llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll

Modified: llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll?rev=320333&r1=320332&r2=320333&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll (original)
+++ llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll Sun Dec 10 13:56:24 2017
@@ -2147,7 +2147,169 @@ define void @test_dec64(i64 %a0, i64* %a
   ret void
 }
 
-; TODO - test_div
+define void @test_div(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
+; GENERIC-LABEL: test_div:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    divb %dil # sched: [25:10.00]
+; GENERIC-NEXT:    divb (%r8) # sched: [29:10.00]
+; GENERIC-NEXT:    divw %si # sched: [25:10.00]
+; GENERIC-NEXT:    divw (%r9) # sched: [29:10.00]
+; GENERIC-NEXT:    divl %edx # sched: [25:10.00]
+; GENERIC-NEXT:    divl (%rax) # sched: [29:10.00]
+; GENERIC-NEXT:    divq %rcx # sched: [25:10.00]
+; GENERIC-NEXT:    divq (%r10) # sched: [29:10.00]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_div:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    divb %dil # sched: [50:25.00]
+; ATOM-NEXT:    divb (%r8) # sched: [68:34.00]
+; ATOM-NEXT:    divw %si # sched: [50:25.00]
+; ATOM-NEXT:    divw (%r9) # sched: [50:25.00]
+; ATOM-NEXT:    divl %edx # sched: [50:25.00]
+; ATOM-NEXT:    divl (%rax) # sched: [50:25.00]
+; ATOM-NEXT:    divq %rcx # sched: [130:65.00]
+; ATOM-NEXT:    divq (%r10) # sched: [130:65.00]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_div:
+; SLM:       # %bb.0:
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
+; SLM-NEXT:    #APP
+; SLM-NEXT:    divb %dil # sched: [25:25.00]
+; SLM-NEXT:    divb (%r8) # sched: [29:25.00]
+; SLM-NEXT:    divw %si # sched: [25:25.00]
+; SLM-NEXT:    divw (%r9) # sched: [29:25.00]
+; SLM-NEXT:    divl %edx # sched: [25:25.00]
+; SLM-NEXT:    divl (%rax) # sched: [29:25.00]
+; SLM-NEXT:    divq %rcx # sched: [25:25.00]
+; SLM-NEXT:    divq (%r10) # sched: [29:25.00]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_div:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    divb %dil # sched: [25:10.00]
+; SANDY-NEXT:    divb (%r8) # sched: [29:10.00]
+; SANDY-NEXT:    divw %si # sched: [25:10.00]
+; SANDY-NEXT:    divw (%r9) # sched: [29:10.00]
+; SANDY-NEXT:    divl %edx # sched: [25:10.00]
+; SANDY-NEXT:    divl (%rax) # sched: [29:10.00]
+; SANDY-NEXT:    divq %rcx # sched: [25:10.00]
+; SANDY-NEXT:    divq (%r10) # sched: [29:10.00]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_div:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    divb %dil # sched: [22:1.00]
+; HASWELL-NEXT:    divb (%r8) # sched: [29:10.00]
+; HASWELL-NEXT:    divw %si # sched: [98:8.00]
+; HASWELL-NEXT:    divw (%r9) # sched: [29:10.00]
+; HASWELL-NEXT:    divl %edx # sched: [98:8.00]
+; HASWELL-NEXT:    divl (%rax) # sched: [29:10.00]
+; HASWELL-NEXT:    divq %rcx # sched: [98:8.00]
+; HASWELL-NEXT:    divq (%r10) # sched: [29:10.00]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_div:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    divb %dil # sched: [25:10.00]
+; BROADWELL-NEXT:    divb (%r8) # sched: [34:2.00]
+; BROADWELL-NEXT:    divw %si # sched: [80:8.00]
+; BROADWELL-NEXT:    divw (%r9) # sched: [34:2.00]
+; BROADWELL-NEXT:    divl %edx # sched: [80:8.00]
+; BROADWELL-NEXT:    divl (%rax) # sched: [34:2.00]
+; BROADWELL-NEXT:    divq %rcx # sched: [80:8.00]
+; BROADWELL-NEXT:    divq (%r10) # sched: [34:2.00]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_div:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    divb %dil # sched: [25:10.00]
+; SKYLAKE-NEXT:    divb (%r8) # sched: [29:10.00]
+; SKYLAKE-NEXT:    divw %si # sched: [76:8.00]
+; SKYLAKE-NEXT:    divw (%r9) # sched: [29:10.00]
+; SKYLAKE-NEXT:    divl %edx # sched: [76:8.00]
+; SKYLAKE-NEXT:    divl (%rax) # sched: [29:10.00]
+; SKYLAKE-NEXT:    divq %rcx # sched: [76:8.00]
+; SKYLAKE-NEXT:    divq (%r10) # sched: [29:10.00]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_div:
+; SKX:       # %bb.0:
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKX-NEXT:    #APP
+; SKX-NEXT:    divb %dil # sched: [25:10.00]
+; SKX-NEXT:    divb (%r8) # sched: [29:10.00]
+; SKX-NEXT:    divw %si # sched: [76:8.00]
+; SKX-NEXT:    divw (%r9) # sched: [29:10.00]
+; SKX-NEXT:    divl %edx # sched: [76:8.00]
+; SKX-NEXT:    divl (%rax) # sched: [29:10.00]
+; SKX-NEXT:    divq %rcx # sched: [76:8.00]
+; SKX-NEXT:    divq (%r10) # sched: [29:10.00]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; BTVER2-LABEL: test_div:
+; BTVER2:       # %bb.0:
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
+; BTVER2-NEXT:    #APP
+; BTVER2-NEXT:    divb %dil # sched: [25:25.00]
+; BTVER2-NEXT:    divb (%r8) # sched: [41:25.00]
+; BTVER2-NEXT:    divw %si # sched: [25:25.00]
+; BTVER2-NEXT:    divw (%r9) # sched: [41:25.00]
+; BTVER2-NEXT:    divl %edx # sched: [25:25.00]
+; BTVER2-NEXT:    divl (%rax) # sched: [41:25.00]
+; BTVER2-NEXT:    divq %rcx # sched: [25:25.00]
+; BTVER2-NEXT:    divq (%r10) # sched: [41:25.00]
+; BTVER2-NEXT:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_div:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    divb %dil # sched: [15:1.00]
+; ZNVER1-NEXT:    divb (%r8) # sched: [45:41.00]
+; ZNVER1-NEXT:    divw %si # sched: [17:1.00]
+; ZNVER1-NEXT:    divw (%r9) # sched: [45:41.00]
+; ZNVER1-NEXT:    divl %edx # sched: [25:1.00]
+; ZNVER1-NEXT:    divl (%rax) # sched: [45:41.00]
+; ZNVER1-NEXT:    divq %rcx # sched: [41:1.00]
+; ZNVER1-NEXT:    divq (%r10) # sched: [45:41.00]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  tail call void asm "divb $0 \0A\09 divb $4 \0A\09 divw $1 \0A\09 divw $5 \0A\09 divl $2 \0A\09 divl $6 \0A\09 divq $3 \0A\09 divq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
+  ret void
+}
 
 ; TODO - test_enter
 
@@ -2894,10 +3056,632 @@ define void @test_movs() optsize {
 ; TODO - test_movsxd
 ; TODO - test_movzx
 
-; TODO - test_mul
-; TODO - test_neg
-; TODO - test_nop
-; TODO - test_not
+define void @test_mul(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
+; GENERIC-LABEL: test_mul:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    mulb %dil # sched: [3:1.00]
+; GENERIC-NEXT:    mulb (%r8) # sched: [8:1.00]
+; GENERIC-NEXT:    mulw %si # sched: [4:1.00]
+; GENERIC-NEXT:    mulw (%r9) # sched: [9:1.00]
+; GENERIC-NEXT:    mull %edx # sched: [4:1.00]
+; GENERIC-NEXT:    mull (%rax) # sched: [9:1.00]
+; GENERIC-NEXT:    mulq %rcx # sched: [4:1.00]
+; GENERIC-NEXT:    mulq (%r10) # sched: [9:1.00]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_mul:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    mulb %dil # sched: [7:3.50]
+; ATOM-NEXT:    mulb (%r8) # sched: [7:3.50]
+; ATOM-NEXT:    mulw %si # sched: [7:3.50]
+; ATOM-NEXT:    mulw (%r9) # sched: [8:4.00]
+; ATOM-NEXT:    mull %edx # sched: [6:3.00]
+; ATOM-NEXT:    mull (%rax) # sched: [7:3.50]
+; ATOM-NEXT:    mulq %rcx # sched: [12:6.00]
+; ATOM-NEXT:    mulq (%r10) # sched: [12:6.00]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_mul:
+; SLM:       # %bb.0:
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
+; SLM-NEXT:    #APP
+; SLM-NEXT:    mulb %dil # sched: [3:1.00]
+; SLM-NEXT:    mulb (%r8) # sched: [6:1.00]
+; SLM-NEXT:    mulw %si # sched: [3:1.00]
+; SLM-NEXT:    mulw (%r9) # sched: [6:1.00]
+; SLM-NEXT:    mull %edx # sched: [3:1.00]
+; SLM-NEXT:    mull (%rax) # sched: [6:1.00]
+; SLM-NEXT:    mulq %rcx # sched: [3:1.00]
+; SLM-NEXT:    mulq (%r10) # sched: [6:1.00]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_mul:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    mulb %dil # sched: [3:1.00]
+; SANDY-NEXT:    mulb (%r8) # sched: [8:1.00]
+; SANDY-NEXT:    mulw %si # sched: [4:1.00]
+; SANDY-NEXT:    mulw (%r9) # sched: [9:1.00]
+; SANDY-NEXT:    mull %edx # sched: [4:1.00]
+; SANDY-NEXT:    mull (%rax) # sched: [9:1.00]
+; SANDY-NEXT:    mulq %rcx # sched: [4:1.00]
+; SANDY-NEXT:    mulq (%r10) # sched: [9:1.00]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_mul:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    mulb %dil # sched: [3:1.00]
+; HASWELL-NEXT:    mulb (%r8) # sched: [8:1.00]
+; HASWELL-NEXT:    mulw %si # sched: [4:1.00]
+; HASWELL-NEXT:    mulw (%r9) # sched: [8:1.00]
+; HASWELL-NEXT:    mull %edx # sched: [4:1.00]
+; HASWELL-NEXT:    mull (%rax) # sched: [8:1.00]
+; HASWELL-NEXT:    mulq %rcx # sched: [4:1.00]
+; HASWELL-NEXT:    mulq (%r10) # sched: [8:1.00]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_mul:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    mulb %dil # sched: [3:1.00]
+; BROADWELL-NEXT:    mulb (%r8) # sched: [8:1.00]
+; BROADWELL-NEXT:    mulw %si # sched: [4:1.00]
+; BROADWELL-NEXT:    mulw (%r9) # sched: [8:1.00]
+; BROADWELL-NEXT:    mull %edx # sched: [4:1.00]
+; BROADWELL-NEXT:    mull (%rax) # sched: [8:1.00]
+; BROADWELL-NEXT:    mulq %rcx # sched: [4:1.00]
+; BROADWELL-NEXT:    mulq (%r10) # sched: [8:1.00]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_mul:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    mulb %dil # sched: [3:1.00]
+; SKYLAKE-NEXT:    mulb (%r8) # sched: [8:1.00]
+; SKYLAKE-NEXT:    mulw %si # sched: [4:1.00]
+; SKYLAKE-NEXT:    mulw (%r9) # sched: [8:1.00]
+; SKYLAKE-NEXT:    mull %edx # sched: [5:1.00]
+; SKYLAKE-NEXT:    mull (%rax) # sched: [8:1.00]
+; SKYLAKE-NEXT:    mulq %rcx # sched: [4:1.00]
+; SKYLAKE-NEXT:    mulq (%r10) # sched: [8:1.00]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_mul:
+; SKX:       # %bb.0:
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKX-NEXT:    #APP
+; SKX-NEXT:    mulb %dil # sched: [3:1.00]
+; SKX-NEXT:    mulb (%r8) # sched: [8:1.00]
+; SKX-NEXT:    mulw %si # sched: [4:1.00]
+; SKX-NEXT:    mulw (%r9) # sched: [8:1.00]
+; SKX-NEXT:    mull %edx # sched: [4:1.00]
+; SKX-NEXT:    mull (%rax) # sched: [8:1.00]
+; SKX-NEXT:    mulq %rcx # sched: [4:1.00]
+; SKX-NEXT:    mulq (%r10) # sched: [8:1.00]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; BTVER2-LABEL: test_mul:
+; BTVER2:       # %bb.0:
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
+; BTVER2-NEXT:    #APP
+; BTVER2-NEXT:    mulb %dil # sched: [3:1.00]
+; BTVER2-NEXT:    mulb (%r8) # sched: [6:1.00]
+; BTVER2-NEXT:    mulw %si # sched: [3:1.00]
+; BTVER2-NEXT:    mulw (%r9) # sched: [6:1.00]
+; BTVER2-NEXT:    mull %edx # sched: [3:1.00]
+; BTVER2-NEXT:    mull (%rax) # sched: [6:1.00]
+; BTVER2-NEXT:    mulq %rcx # sched: [3:1.00]
+; BTVER2-NEXT:    mulq (%r10) # sched: [6:1.00]
+; BTVER2-NEXT:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_mul:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    mulb %dil # sched: [4:1.00]
+; ZNVER1-NEXT:    mulb (%r8) # sched: [8:1.00]
+; ZNVER1-NEXT:    mulw %si # sched: [3:1.00]
+; ZNVER1-NEXT:    mulw (%r9) # sched: [8:1.00]
+; ZNVER1-NEXT:    mull %edx # sched: [3:1.00]
+; ZNVER1-NEXT:    mull (%rax) # sched: [8:1.00]
+; ZNVER1-NEXT:    mulq %rcx # sched: [4:1.00]
+; ZNVER1-NEXT:    mulq (%r10) # sched: [9:1.00]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  tail call void asm "mulb $0 \0A\09 mulb $4 \0A\09 mulw $1 \0A\09 mulw $5 \0A\09 mull $2 \0A\09 mull $6 \0A\09 mulq $3 \0A\09 mulq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
+  ret void
+}
+
+define void @test_neg(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
+; GENERIC-LABEL: test_neg:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    negb %dil # sched: [1:0.33]
+; GENERIC-NEXT:    negb (%r8) # sched: [7:1.00]
+; GENERIC-NEXT:    negw %si # sched: [1:0.33]
+; GENERIC-NEXT:    negw (%r9) # sched: [7:1.00]
+; GENERIC-NEXT:    negl %edx # sched: [1:0.33]
+; GENERIC-NEXT:    negl (%rax) # sched: [7:1.00]
+; GENERIC-NEXT:    negq %rcx # sched: [1:0.33]
+; GENERIC-NEXT:    negq (%r10) # sched: [7:1.00]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_neg:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    negb %dil # sched: [1:0.50]
+; ATOM-NEXT:    negb (%r8) # sched: [1:1.00]
+; ATOM-NEXT:    negw %si # sched: [1:0.50]
+; ATOM-NEXT:    negw (%r9) # sched: [1:1.00]
+; ATOM-NEXT:    negl %edx # sched: [1:0.50]
+; ATOM-NEXT:    negl (%rax) # sched: [1:1.00]
+; ATOM-NEXT:    negq %rcx # sched: [1:0.50]
+; ATOM-NEXT:    negq (%r10) # sched: [1:1.00]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_neg:
+; SLM:       # %bb.0:
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
+; SLM-NEXT:    #APP
+; SLM-NEXT:    negb %dil # sched: [1:0.50]
+; SLM-NEXT:    negb (%r8) # sched: [4:2.00]
+; SLM-NEXT:    negw %si # sched: [1:0.50]
+; SLM-NEXT:    negw (%r9) # sched: [4:2.00]
+; SLM-NEXT:    negl %edx # sched: [1:0.50]
+; SLM-NEXT:    negl (%rax) # sched: [4:2.00]
+; SLM-NEXT:    negq %rcx # sched: [1:0.50]
+; SLM-NEXT:    negq (%r10) # sched: [4:2.00]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_neg:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    negb %dil # sched: [1:0.33]
+; SANDY-NEXT:    negb (%r8) # sched: [7:1.00]
+; SANDY-NEXT:    negw %si # sched: [1:0.33]
+; SANDY-NEXT:    negw (%r9) # sched: [7:1.00]
+; SANDY-NEXT:    negl %edx # sched: [1:0.33]
+; SANDY-NEXT:    negl (%rax) # sched: [7:1.00]
+; SANDY-NEXT:    negq %rcx # sched: [1:0.33]
+; SANDY-NEXT:    negq (%r10) # sched: [7:1.00]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_neg:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    negb %dil # sched: [1:0.25]
+; HASWELL-NEXT:    negb (%r8) # sched: [7:1.00]
+; HASWELL-NEXT:    negw %si # sched: [1:0.25]
+; HASWELL-NEXT:    negw (%r9) # sched: [7:1.00]
+; HASWELL-NEXT:    negl %edx # sched: [1:0.25]
+; HASWELL-NEXT:    negl (%rax) # sched: [7:1.00]
+; HASWELL-NEXT:    negq %rcx # sched: [1:0.25]
+; HASWELL-NEXT:    negq (%r10) # sched: [7:1.00]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_neg:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    negb %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    negb (%r8) # sched: [6:1.00]
+; BROADWELL-NEXT:    negw %si # sched: [1:0.25]
+; BROADWELL-NEXT:    negw (%r9) # sched: [6:1.00]
+; BROADWELL-NEXT:    negl %edx # sched: [1:0.25]
+; BROADWELL-NEXT:    negl (%rax) # sched: [6:1.00]
+; BROADWELL-NEXT:    negq %rcx # sched: [1:0.25]
+; BROADWELL-NEXT:    negq (%r10) # sched: [6:1.00]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_neg:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    negb %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    negb (%r8) # sched: [6:1.00]
+; SKYLAKE-NEXT:    negw %si # sched: [1:0.25]
+; SKYLAKE-NEXT:    negw (%r9) # sched: [6:1.00]
+; SKYLAKE-NEXT:    negl %edx # sched: [1:0.25]
+; SKYLAKE-NEXT:    negl (%rax) # sched: [6:1.00]
+; SKYLAKE-NEXT:    negq %rcx # sched: [1:0.25]
+; SKYLAKE-NEXT:    negq (%r10) # sched: [6:1.00]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_neg:
+; SKX:       # %bb.0:
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKX-NEXT:    #APP
+; SKX-NEXT:    negb %dil # sched: [1:0.25]
+; SKX-NEXT:    negb (%r8) # sched: [6:1.00]
+; SKX-NEXT:    negw %si # sched: [1:0.25]
+; SKX-NEXT:    negw (%r9) # sched: [6:1.00]
+; SKX-NEXT:    negl %edx # sched: [1:0.25]
+; SKX-NEXT:    negl (%rax) # sched: [6:1.00]
+; SKX-NEXT:    negq %rcx # sched: [1:0.25]
+; SKX-NEXT:    negq (%r10) # sched: [6:1.00]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; BTVER2-LABEL: test_neg:
+; BTVER2:       # %bb.0:
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
+; BTVER2-NEXT:    #APP
+; BTVER2-NEXT:    negb %dil # sched: [1:0.50]
+; BTVER2-NEXT:    negb (%r8) # sched: [4:1.00]
+; BTVER2-NEXT:    negw %si # sched: [1:0.50]
+; BTVER2-NEXT:    negw (%r9) # sched: [4:1.00]
+; BTVER2-NEXT:    negl %edx # sched: [1:0.50]
+; BTVER2-NEXT:    negl (%rax) # sched: [4:1.00]
+; BTVER2-NEXT:    negq %rcx # sched: [1:0.50]
+; BTVER2-NEXT:    negq (%r10) # sched: [4:1.00]
+; BTVER2-NEXT:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_neg:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    negb %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    negb (%r8) # sched: [5:0.50]
+; ZNVER1-NEXT:    negw %si # sched: [1:0.25]
+; ZNVER1-NEXT:    negw (%r9) # sched: [5:0.50]
+; ZNVER1-NEXT:    negl %edx # sched: [1:0.25]
+; ZNVER1-NEXT:    negl (%rax) # sched: [5:0.50]
+; ZNVER1-NEXT:    negq %rcx # sched: [1:0.25]
+; ZNVER1-NEXT:    negq (%r10) # sched: [5:0.50]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  tail call void asm "negb $0 \0A\09 negb $4 \0A\09 negw $1 \0A\09 negw $5 \0A\09 negl $2 \0A\09 negl $6 \0A\09 negq $3 \0A\09 negq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
+  ret void
+}
+
+define void @test_nop(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) optsize {
+; GENERIC-LABEL: test_nop:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    nop # sched: [1:?]
+; GENERIC-NEXT:    nopw %di # sched: [1:?]
+; GENERIC-NEXT:    nopw (%rcx) # sched: [1:?]
+; GENERIC-NEXT:    nopl %esi # sched: [1:?]
+; GENERIC-NEXT:    nopl (%r8) # sched: [1:?]
+; GENERIC-NEXT:    nopq %rdx # sched: [1:?]
+; GENERIC-NEXT:    nopq (%r9) # sched: [1:?]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_nop:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    nop # sched: [1:0.50]
+; ATOM-NEXT:    nopw %di # sched: [1:0.50]
+; ATOM-NEXT:    nopw (%rcx) # sched: [1:0.50]
+; ATOM-NEXT:    nopl %esi # sched: [1:0.50]
+; ATOM-NEXT:    nopl (%r8) # sched: [1:0.50]
+; ATOM-NEXT:    nopq %rdx # sched: [1:0.50]
+; ATOM-NEXT:    nopq (%r9) # sched: [1:0.50]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_nop:
+; SLM:       # %bb.0:
+; SLM-NEXT:    #APP
+; SLM-NEXT:    nop # sched: [1:?]
+; SLM-NEXT:    nopw %di # sched: [1:?]
+; SLM-NEXT:    nopw (%rcx) # sched: [1:?]
+; SLM-NEXT:    nopl %esi # sched: [1:?]
+; SLM-NEXT:    nopl (%r8) # sched: [1:?]
+; SLM-NEXT:    nopq %rdx # sched: [1:?]
+; SLM-NEXT:    nopq (%r9) # sched: [1:?]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_nop:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    nop # sched: [1:?]
+; SANDY-NEXT:    nopw %di # sched: [1:?]
+; SANDY-NEXT:    nopw (%rcx) # sched: [1:?]
+; SANDY-NEXT:    nopl %esi # sched: [1:?]
+; SANDY-NEXT:    nopl (%r8) # sched: [1:?]
+; SANDY-NEXT:    nopq %rdx # sched: [1:?]
+; SANDY-NEXT:    nopq (%r9) # sched: [1:?]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_nop:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    nop # sched: [1:0.25]
+; HASWELL-NEXT:    nopw %di # sched: [1:0.25]
+; HASWELL-NEXT:    nopw (%rcx) # sched: [1:0.25]
+; HASWELL-NEXT:    nopl %esi # sched: [1:0.25]
+; HASWELL-NEXT:    nopl (%r8) # sched: [1:0.25]
+; HASWELL-NEXT:    nopq %rdx # sched: [1:0.25]
+; HASWELL-NEXT:    nopq (%r9) # sched: [1:0.25]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_nop:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    nop # sched: [1:0.25]
+; BROADWELL-NEXT:    nopw %di # sched: [1:0.25]
+; BROADWELL-NEXT:    nopw (%rcx) # sched: [1:0.25]
+; BROADWELL-NEXT:    nopl %esi # sched: [1:0.25]
+; BROADWELL-NEXT:    nopl (%r8) # sched: [1:0.25]
+; BROADWELL-NEXT:    nopq %rdx # sched: [1:0.25]
+; BROADWELL-NEXT:    nopq (%r9) # sched: [1:0.25]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_nop:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    nop # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopw %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopw (%rcx) # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopl %esi # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopl (%r8) # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopq %rdx # sched: [1:0.25]
+; SKYLAKE-NEXT:    nopq (%r9) # sched: [1:0.25]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_nop:
+; SKX:       # %bb.0:
+; SKX-NEXT:    #APP
+; SKX-NEXT:    nop # sched: [1:0.25]
+; SKX-NEXT:    nopw %di # sched: [1:0.25]
+; SKX-NEXT:    nopw (%rcx) # sched: [1:0.25]
+; SKX-NEXT:    nopl %esi # sched: [1:0.25]
+; SKX-NEXT:    nopl (%r8) # sched: [1:0.25]
+; SKX-NEXT:    nopq %rdx # sched: [1:0.25]
+; SKX-NEXT:    nopq (%r9) # sched: [1:0.25]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; 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:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_nop:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    nop # sched: [1:?]
+; ZNVER1-NEXT:    nopw %di # sched: [1:?]
+; ZNVER1-NEXT:    nopw (%rcx) # sched: [1:?]
+; ZNVER1-NEXT:    nopl %esi # sched: [1:?]
+; ZNVER1-NEXT:    nopl (%r8) # sched: [1:?]
+; ZNVER1-NEXT:    nopq %rdx # sched: [1:?]
+; ZNVER1-NEXT:    nopq (%r9) # sched: [1:?]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  tail call void asm "nop \0A\09 nopw $0 \0A\09 nopw $3 \0A\09 nopl $1 \0A\09 nopl $4 \0A\09 nopq $2 \0A\09 nopq $5", "r,r,r,*m,*m,*m"(i16 %a0, i32 %a1, i64 %a2, i16 *%p0, i32 *%p1, i64 *%p2) nounwind
+  ret void
+}
+
+define void @test_not(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) optsize {
+; GENERIC-LABEL: test_not:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; GENERIC-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    notb %dil # sched: [1:0.33]
+; GENERIC-NEXT:    notb (%r8) # sched: [7:1.00]
+; GENERIC-NEXT:    notw %si # sched: [1:0.33]
+; GENERIC-NEXT:    notw (%r9) # sched: [7:1.00]
+; GENERIC-NEXT:    notl %edx # sched: [1:0.33]
+; GENERIC-NEXT:    notl (%rax) # sched: [7:1.00]
+; GENERIC-NEXT:    notq %rcx # sched: [1:0.33]
+; GENERIC-NEXT:    notq (%r10) # sched: [7:1.00]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_not:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [1:1.00]
+; ATOM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [1:1.00]
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    notb %dil # sched: [1:0.50]
+; ATOM-NEXT:    notb (%r8) # sched: [1:1.00]
+; ATOM-NEXT:    notw %si # sched: [1:0.50]
+; ATOM-NEXT:    notw (%r9) # sched: [1:1.00]
+; ATOM-NEXT:    notl %edx # sched: [1:0.50]
+; ATOM-NEXT:    notl (%rax) # sched: [1:1.00]
+; ATOM-NEXT:    notq %rcx # sched: [1:0.50]
+; ATOM-NEXT:    notq (%r10) # sched: [1:1.00]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_not:
+; SLM:       # %bb.0:
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [3:1.00]
+; SLM-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [3:1.00]
+; SLM-NEXT:    #APP
+; SLM-NEXT:    notb %dil # sched: [1:0.50]
+; SLM-NEXT:    notb (%r8) # sched: [4:2.00]
+; SLM-NEXT:    notw %si # sched: [1:0.50]
+; SLM-NEXT:    notw (%r9) # sched: [4:2.00]
+; SLM-NEXT:    notl %edx # sched: [1:0.50]
+; SLM-NEXT:    notl (%rax) # sched: [4:2.00]
+; SLM-NEXT:    notq %rcx # sched: [1:0.50]
+; SLM-NEXT:    notq (%r10) # sched: [4:2.00]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_not:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SANDY-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    notb %dil # sched: [1:0.33]
+; SANDY-NEXT:    notb (%r8) # sched: [7:1.00]
+; SANDY-NEXT:    notw %si # sched: [1:0.33]
+; SANDY-NEXT:    notw (%r9) # sched: [7:1.00]
+; SANDY-NEXT:    notl %edx # sched: [1:0.33]
+; SANDY-NEXT:    notl (%rax) # sched: [7:1.00]
+; SANDY-NEXT:    notq %rcx # sched: [1:0.33]
+; SANDY-NEXT:    notq (%r10) # sched: [7:1.00]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_not:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; HASWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    notb %dil # sched: [1:0.25]
+; HASWELL-NEXT:    notb (%r8) # sched: [7:1.00]
+; HASWELL-NEXT:    notw %si # sched: [1:0.25]
+; HASWELL-NEXT:    notw (%r9) # sched: [7:1.00]
+; HASWELL-NEXT:    notl %edx # sched: [1:0.25]
+; HASWELL-NEXT:    notl (%rax) # sched: [7:1.00]
+; HASWELL-NEXT:    notq %rcx # sched: [1:0.25]
+; HASWELL-NEXT:    notq (%r10) # sched: [7:1.00]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_not:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; BROADWELL-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    notb %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    notb (%r8) # sched: [6:1.00]
+; BROADWELL-NEXT:    notw %si # sched: [1:0.25]
+; BROADWELL-NEXT:    notw (%r9) # sched: [6:1.00]
+; BROADWELL-NEXT:    notl %edx # sched: [1:0.25]
+; BROADWELL-NEXT:    notl (%rax) # sched: [6:1.00]
+; BROADWELL-NEXT:    notq %rcx # sched: [1:0.25]
+; BROADWELL-NEXT:    notq (%r10) # sched: [6:1.00]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_not:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKYLAKE-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    notb %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    notb (%r8) # sched: [6:1.00]
+; SKYLAKE-NEXT:    notw %si # sched: [1:0.25]
+; SKYLAKE-NEXT:    notw (%r9) # sched: [6:1.00]
+; SKYLAKE-NEXT:    notl %edx # sched: [1:0.25]
+; SKYLAKE-NEXT:    notl (%rax) # sched: [6:1.00]
+; SKYLAKE-NEXT:    notq %rcx # sched: [1:0.25]
+; SKYLAKE-NEXT:    notq (%r10) # sched: [6:1.00]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_not:
+; SKX:       # %bb.0:
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:0.50]
+; SKX-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:0.50]
+; SKX-NEXT:    #APP
+; SKX-NEXT:    notb %dil # sched: [1:0.25]
+; SKX-NEXT:    notb (%r8) # sched: [6:1.00]
+; SKX-NEXT:    notw %si # sched: [1:0.25]
+; SKX-NEXT:    notw (%r9) # sched: [6:1.00]
+; SKX-NEXT:    notl %edx # sched: [1:0.25]
+; SKX-NEXT:    notl (%rax) # sched: [6:1.00]
+; SKX-NEXT:    notq %rcx # sched: [1:0.25]
+; SKX-NEXT:    notq (%r10) # sched: [6:1.00]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; BTVER2-LABEL: test_not:
+; BTVER2:       # %bb.0:
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [5:1.00]
+; BTVER2-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [5:1.00]
+; BTVER2-NEXT:    #APP
+; BTVER2-NEXT:    notb %dil # sched: [1:0.50]
+; BTVER2-NEXT:    notb (%r8) # sched: [4:1.00]
+; BTVER2-NEXT:    notw %si # sched: [1:0.50]
+; BTVER2-NEXT:    notw (%r9) # sched: [4:1.00]
+; BTVER2-NEXT:    notl %edx # sched: [1:0.50]
+; BTVER2-NEXT:    notl (%rax) # sched: [4:1.00]
+; BTVER2-NEXT:    notq %rcx # sched: [1:0.50]
+; BTVER2-NEXT:    notq (%r10) # sched: [4:1.00]
+; BTVER2-NEXT:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_not:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %r10 # sched: [8:0.50]
+; ZNVER1-NEXT:    movq {{[0-9]+}}(%rsp), %rax # sched: [8:0.50]
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    notb %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    notb (%r8) # sched: [5:0.50]
+; ZNVER1-NEXT:    notw %si # sched: [1:0.25]
+; ZNVER1-NEXT:    notw (%r9) # sched: [5:0.50]
+; ZNVER1-NEXT:    notl %edx # sched: [1:0.25]
+; ZNVER1-NEXT:    notl (%rax) # sched: [5:0.50]
+; ZNVER1-NEXT:    notq %rcx # sched: [1:0.25]
+; ZNVER1-NEXT:    notq (%r10) # sched: [5:0.50]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  tail call void asm "notb $0 \0A\09 notb $4 \0A\09 notw $1 \0A\09 notw $5 \0A\09 notl $2 \0A\09 notl $6 \0A\09 notq $3 \0A\09 notq $7", "r,r,r,r,*m,*m,*m,*m"(i8 %a0, i16 %a1, i32 %a2, i64 %a3, i8 *%p0, i16 *%p1, i32 *%p2, i64 *%p3) nounwind
+  ret void
+}
+
 ; TODO - test_or
 
 ; TODO - test_out
@@ -2996,7 +3780,79 @@ define void @test_outs() optsize {
   ret void
 }
 
-; TODO - test_pause
+define void @test_pause() optsize {
+; GENERIC-LABEL: test_pause:
+; GENERIC:       # %bb.0:
+; GENERIC-NEXT:    #APP
+; GENERIC-NEXT:    pause # sched: [4:1.33]
+; GENERIC-NEXT:    #NO_APP
+; GENERIC-NEXT:    retq # sched: [1:1.00]
+;
+; ATOM-LABEL: test_pause:
+; ATOM:       # %bb.0:
+; ATOM-NEXT:    #APP
+; ATOM-NEXT:    pause # sched: [17:8.50]
+; ATOM-NEXT:    #NO_APP
+; ATOM-NEXT:    retq # sched: [79:39.50]
+;
+; SLM-LABEL: test_pause:
+; SLM:       # %bb.0:
+; SLM-NEXT:    #APP
+; SLM-NEXT:    pause # sched: [1:?]
+; SLM-NEXT:    #NO_APP
+; SLM-NEXT:    retq # sched: [4:1.00]
+;
+; SANDY-LABEL: test_pause:
+; SANDY:       # %bb.0:
+; SANDY-NEXT:    #APP
+; SANDY-NEXT:    pause # sched: [4:1.33]
+; SANDY-NEXT:    #NO_APP
+; SANDY-NEXT:    retq # sched: [1:1.00]
+;
+; HASWELL-LABEL: test_pause:
+; HASWELL:       # %bb.0:
+; HASWELL-NEXT:    #APP
+; HASWELL-NEXT:    pause # sched: [5:1.25]
+; HASWELL-NEXT:    #NO_APP
+; HASWELL-NEXT:    retq # sched: [7:1.00]
+;
+; BROADWELL-LABEL: test_pause:
+; BROADWELL:       # %bb.0:
+; BROADWELL-NEXT:    #APP
+; BROADWELL-NEXT:    pause # sched: [5:1.25]
+; BROADWELL-NEXT:    #NO_APP
+; BROADWELL-NEXT:    retq # sched: [7:1.00]
+;
+; SKYLAKE-LABEL: test_pause:
+; SKYLAKE:       # %bb.0:
+; SKYLAKE-NEXT:    #APP
+; SKYLAKE-NEXT:    pause # sched: [4:1.00]
+; SKYLAKE-NEXT:    #NO_APP
+; SKYLAKE-NEXT:    retq # sched: [7:1.00]
+;
+; SKX-LABEL: test_pause:
+; SKX:       # %bb.0:
+; SKX-NEXT:    #APP
+; SKX-NEXT:    pause # sched: [140:1.00]
+; SKX-NEXT:    #NO_APP
+; SKX-NEXT:    retq # sched: [7:1.00]
+;
+; BTVER2-LABEL: test_pause:
+; BTVER2:       # %bb.0:
+; BTVER2-NEXT:    #APP
+; BTVER2-NEXT:    pause # sched: [1:?]
+; BTVER2-NEXT:    #NO_APP
+; BTVER2-NEXT:    retq # sched: [4:1.00]
+;
+; ZNVER1-LABEL: test_pause:
+; ZNVER1:       # %bb.0:
+; ZNVER1-NEXT:    #APP
+; ZNVER1-NEXT:    pause # sched: [100:?]
+; ZNVER1-NEXT:    #NO_APP
+; ZNVER1-NEXT:    retq # sched: [1:0.50]
+  call void asm sideeffect "pause", ""()
+  ret void
+}
 
 ; TODO - test_pop
 ; TODO - test_popa




More information about the llvm-commits mailing list