Index: test/CodeGen/X86/aes-schedule.ll =================================================================== --- test/CodeGen/X86/aes-schedule.ll +++ test/CodeGen/X86/aes-schedule.ll @@ -5,7 +5,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -34,6 +34,12 @@ ; HASWELL-NEXT: vaesdec (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aesdec: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaesdec %xmm1, %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: vaesdec (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aesdec: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaesdec %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -77,6 +83,12 @@ ; HASWELL-NEXT: vaesdeclast (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aesdeclast: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaesdeclast %xmm1, %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: vaesdeclast (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aesdeclast: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaesdeclast %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -120,6 +132,12 @@ ; HASWELL-NEXT: vaesenc (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aesenc: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaesenc %xmm1, %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: vaesenc (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aesenc: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaesenc %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -163,6 +181,12 @@ ; HASWELL-NEXT: vaesenclast (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aesenclast: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaesenclast %xmm1, %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: vaesenclast (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aesenclast: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaesenclast %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -210,6 +234,13 @@ ; HASWELL-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aesimc: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaesimc %xmm0, %xmm0 # sched: [14:2.00] +; SKYLAKE-NEXT: vaesimc (%rdi), %xmm1 # sched: [14:2.00] +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aesimc: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaesimc (%rdi), %xmm1 # sched: [7:1.00] @@ -260,6 +291,13 @@ ; HASWELL-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_aeskeygenassist: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaeskeygenassist $7, %xmm0, %xmm0 # sched: [29:7.00] +; SKYLAKE-NEXT: vaeskeygenassist $7, (%rdi), %xmm1 # sched: [28:7.00] +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_aeskeygenassist: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaeskeygenassist $7, (%rdi), %xmm1 # sched: [7:1.00] Index: test/CodeGen/X86/avx-schedule.ll =================================================================== --- test/CodeGen/X86/avx-schedule.ll +++ test/CodeGen/X86/avx-schedule.ll @@ -3,7 +3,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -26,6 +26,12 @@ ; HASWELL-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -62,6 +68,12 @@ ; HASWELL-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -98,6 +110,12 @@ ; HASWELL-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addsubpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addsubpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -135,6 +153,12 @@ ; HASWELL-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addsubps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addsubps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -175,6 +199,13 @@ ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andnotpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandnpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andnotpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -223,6 +254,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andnotps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandnps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andnotps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -271,6 +309,13 @@ ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -317,6 +362,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -363,6 +415,13 @@ ; HASWELL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.33] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.50] @@ -402,6 +461,12 @@ ; HASWELL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.33] +; SKYLAKE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.50] @@ -438,6 +503,12 @@ ; HASWELL-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [2:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendvpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [2:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendvpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] @@ -475,6 +546,12 @@ ; HASWELL-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [2:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendvps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [2:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendvps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] @@ -509,6 +586,11 @@ ; HASWELL-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_broadcastf128: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_broadcastf128: ; BTVER2: # BB#0: ; BTVER2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [6:1.00] @@ -539,6 +621,11 @@ ; HASWELL-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_broadcastsd_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_broadcastsd_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [6:1.00] @@ -570,6 +657,11 @@ ; HASWELL-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_broadcastss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_broadcastss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [5:1.00] @@ -601,6 +693,11 @@ ; HASWELL-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_broadcastss_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_broadcastss_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [6:1.00] @@ -638,6 +735,13 @@ ; HASWELL-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmppd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmppd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] @@ -683,6 +787,13 @@ ; HASWELL-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] @@ -728,6 +839,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtdq2pd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [6:1.00] +; SKYLAKE-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [6:1.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtdq2pd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [8:1.00] @@ -772,6 +890,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtdq2ps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtdq2ps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [8:1.00] @@ -814,6 +939,13 @@ ; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtpd2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [6:1.00] +; SKYLAKE-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [7:1.00] +; SKYLAKE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtpd2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [8:1.00] @@ -856,6 +988,13 @@ ; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtpd2ps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [6:1.00] +; SKYLAKE-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [7:1.00] +; SKYLAKE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtpd2ps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [8:1.00] @@ -898,6 +1037,13 @@ ; HASWELL-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtps2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtps2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [8:1.00] @@ -937,6 +1083,12 @@ ; HASWELL-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [35:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [35:2.00] +; SKYLAKE-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [35:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [38:38.00] @@ -973,6 +1125,12 @@ ; HASWELL-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [21:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [21:2.00] +; SKYLAKE-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [21:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [38:38.00] @@ -1009,6 +1167,12 @@ ; HASWELL-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [14:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_dpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [14:2.00] +; SKYLAKE-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [14:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_dpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [3:1.00] @@ -1049,6 +1213,13 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_extractf128: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_extractf128: ; BTVER2: # BB#0: ; BTVER2-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:0.50] @@ -1086,6 +1257,12 @@ ; HASWELL-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_haddpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_haddpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -1123,6 +1300,12 @@ ; HASWELL-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_haddps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_haddps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -1160,6 +1343,12 @@ ; HASWELL-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_hsubpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_hsubpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -1197,6 +1386,12 @@ ; HASWELL-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_hsubps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_hsubps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -1237,6 +1432,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_insertf128: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_insertf128: ; BTVER2: # BB#0: ; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:0.50] @@ -1275,6 +1477,11 @@ ; HASWELL-NEXT: vlddqu (%rdi), %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_lddqu: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vlddqu (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_lddqu: ; BTVER2: # BB#0: ; BTVER2-NEXT: vlddqu (%rdi), %ymm0 # sched: [5:1.00] @@ -1311,6 +1518,13 @@ ; HASWELL-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maskmovpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 # sched: [2:2.00] +; SKYLAKE-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) # sched: [4:1.00] +; SKYLAKE-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maskmovpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 @@ -1353,6 +1567,13 @@ ; HASWELL-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maskmovpd_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 # sched: [2:2.00] +; SKYLAKE-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) # sched: [4:1.00] +; SKYLAKE-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maskmovpd_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 @@ -1395,6 +1616,13 @@ ; HASWELL-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maskmovps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 # sched: [2:2.00] +; SKYLAKE-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) # sched: [4:1.00] +; SKYLAKE-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maskmovps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 @@ -1437,6 +1665,13 @@ ; HASWELL-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maskmovps_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 # sched: [2:2.00] +; SKYLAKE-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) # sched: [4:1.00] +; SKYLAKE-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maskmovps_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 @@ -1476,6 +1711,12 @@ ; HASWELL-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] @@ -1513,6 +1754,12 @@ ; HASWELL-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] @@ -1550,6 +1797,12 @@ ; HASWELL-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] @@ -1587,6 +1840,12 @@ ; HASWELL-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] @@ -1627,6 +1886,13 @@ ; HASWELL-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movapd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovapd (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movapd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovapd (%rdi), %ymm0 # sched: [5:1.00] @@ -1668,6 +1934,13 @@ ; HASWELL-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movaps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovaps (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movaps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovaps (%rdi), %ymm0 # sched: [5:1.00] @@ -1709,6 +1982,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movddup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:1.00] +; SKYLAKE-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movddup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [5:1.00] @@ -1748,6 +2028,12 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movmskpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovmskpd %ymm0, %eax # sched: [3:1.00] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movmskpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovmskpd %ymm0, %eax # sched: [1:0.50] @@ -1782,6 +2068,12 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movmskps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovmskps %ymm0, %eax # sched: [3:1.00] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movmskps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovmskps %ymm0, %eax # sched: [1:0.50] @@ -1816,6 +2108,12 @@ ; HASWELL-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] @@ -1851,6 +2149,12 @@ ; HASWELL-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] @@ -1889,6 +2193,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movshdup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] sched: [1:1.00] +; SKYLAKE-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movshdup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [5:1.00] @@ -1931,6 +2242,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movsldup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] sched: [1:1.00] +; SKYLAKE-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movsldup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [5:1.00] @@ -1975,6 +2293,13 @@ ; HASWELL-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movupd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovupd (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movupd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovupd (%rdi), %ymm0 # sched: [5:1.00] @@ -2018,6 +2343,13 @@ ; HASWELL-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movups: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovups (%rdi), %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movups: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovups (%rdi), %ymm0 # sched: [5:1.00] @@ -2056,6 +2388,12 @@ ; HASWELL-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [4:4.00] @@ -2092,6 +2430,12 @@ ; HASWELL-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [2:2.00] @@ -2131,6 +2475,13 @@ ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: orpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: orpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -2177,6 +2528,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_orps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_orps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -2223,6 +2581,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:1.00] +; SKYLAKE-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [6:1.00] @@ -2265,6 +2630,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilpd_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] +; SKYLAKE-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilpd_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [6:1.00] @@ -2307,6 +2679,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] +; SKYLAKE-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00] @@ -2349,6 +2728,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilps_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] +; SKYLAKE-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilps_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [6:1.00] @@ -2388,6 +2774,12 @@ ; HASWELL-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilvarpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilvarpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -2425,6 +2817,12 @@ ; HASWELL-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilvarpd_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilvarpd_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -2462,6 +2860,12 @@ ; HASWELL-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilvarps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilvarps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -2499,6 +2903,12 @@ ; HASWELL-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_permilvarps_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_permilvarps_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -2539,6 +2949,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rcpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrcpps (%rdi), %ymm1 # sched: [11:2.00] +; SKYLAKE-NEXT: vrcpps %ymm0, %ymm0 # sched: [11:2.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rcpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vrcpps (%rdi), %ymm1 # sched: [7:2.00] @@ -2582,6 +2999,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundpd $7, %ymm0, %ymm0 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundpd $7, (%rdi), %ymm1 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundpd $7, (%rdi), %ymm1 # sched: [8:1.00] @@ -2625,6 +3049,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundps $7, %ymm0, %ymm0 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundps $7, (%rdi), %ymm1 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundps $7, (%rdi), %ymm1 # sched: [8:1.00] @@ -2668,6 +3099,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rsqrtps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrsqrtps (%rdi), %ymm1 # sched: [11:2.00] +; SKYLAKE-NEXT: vrsqrtps %ymm0, %ymm0 # sched: [11:2.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rsqrtps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vrsqrtps (%rdi), %ymm1 # sched: [7:2.00] @@ -2711,6 +3149,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_shufpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[0],ymm0[2],ymm1[3] sched: [1:1.00] +; SKYLAKE-NEXT: vshufpd {{.*#+}} ymm1 = ymm1[1],mem[0],ymm1[2],mem[3] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_shufpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[0],ymm0[2],ymm1[3] sched: [1:0.50] @@ -2750,6 +3195,12 @@ ; HASWELL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],mem[0,0],ymm0[4,7],mem[4,4] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_shufps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4] sched: [1:1.00] +; SKYLAKE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],mem[0,0],ymm0[4,7],mem[4,4] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_shufps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4] sched: [1:0.50] @@ -2789,6 +3240,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtpd (%rdi), %ymm1 # sched: [35:2.00] +; SKYLAKE-NEXT: vsqrtpd %ymm0, %ymm0 # sched: [35:2.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsqrtpd (%rdi), %ymm1 # sched: [59:54.00] @@ -2832,6 +3290,13 @@ ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtps (%rdi), %ymm1 # sched: [21:2.00] +; SKYLAKE-NEXT: vsqrtps %ymm0, %ymm0 # sched: [21:2.00] +; SKYLAKE-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsqrtps (%rdi), %ymm1 # sched: [47:42.00] @@ -2872,6 +3337,12 @@ ; HASWELL-NEXT: vsubpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubpd (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -2908,6 +3379,12 @@ ; HASWELL-NEXT: vsubps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubps (%rdi), %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] @@ -2953,6 +3430,15 @@ ; HASWELL-NEXT: adcl $0, %eax # sched: [2:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_testpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: xorl %eax, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: vtestpd %xmm1, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: setb %al # sched: [1:0.50] +; SKYLAKE-NEXT: vtestpd (%rdi), %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: adcl $0, %eax # sched: [2:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_testpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: xorl %eax, %eax # sched: [1:0.50] @@ -3009,6 +3495,16 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_testpd_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: xorl %eax, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: vtestpd %ymm1, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: setb %al # sched: [1:0.50] +; SKYLAKE-NEXT: vtestpd (%rdi), %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: adcl $0, %eax # sched: [2:0.50] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_testpd_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: xorl %eax, %eax # sched: [1:0.50] @@ -3063,6 +3559,15 @@ ; HASWELL-NEXT: adcl $0, %eax # sched: [2:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_testps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: xorl %eax, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: vtestps %xmm1, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: setb %al # sched: [1:0.50] +; SKYLAKE-NEXT: vtestps (%rdi), %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: adcl $0, %eax # sched: [2:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_testps: ; BTVER2: # BB#0: ; BTVER2-NEXT: xorl %eax, %eax # sched: [1:0.50] @@ -3119,6 +3624,16 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_testps_ymm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: xorl %eax, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: vtestps %ymm1, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: setb %al # sched: [1:0.50] +; SKYLAKE-NEXT: vtestps (%rdi), %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: adcl $0, %eax # sched: [2:0.50] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_testps_ymm: ; BTVER2: # BB#0: ; BTVER2-NEXT: xorl %eax, %eax # sched: [1:0.50] @@ -3167,6 +3682,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpckhpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] sched: [1:1.00] +; SKYLAKE-NEXT: vunpckhpd {{.*#+}} ymm1 = ymm1[1],mem[1],ymm1[3],mem[3] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpckhpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] sched: [1:0.50] @@ -3206,6 +3728,12 @@ ; HASWELL-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpckhps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] sched: [1:1.00] +; SKYLAKE-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpckhps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] sched: [1:0.50] @@ -3245,6 +3773,13 @@ ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpcklpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] sched: [1:1.00] +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} ymm1 = ymm1[0],mem[0],ymm1[2],mem[2] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpcklpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] sched: [1:0.50] @@ -3284,6 +3819,12 @@ ; HASWELL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpcklps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] sched: [1:1.00] +; SKYLAKE-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpcklps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] sched: [1:0.50] @@ -3323,6 +3864,13 @@ ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_xorpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vxorpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vxorpd (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_xorpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vxorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -3369,6 +3917,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_xorps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vxorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vxorps (%rdi), %ymm0, %ymm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_xorps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vxorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] @@ -3409,6 +3964,11 @@ ; HASWELL-NEXT: vzeroall # sched: [16:16.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_zeroall: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vzeroall # sched: [16:16.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_zeroall: ; BTVER2: # BB#0: ; BTVER2-NEXT: vzeroall # sched: [90:?] @@ -3439,6 +3999,11 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_zeroupper: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_zeroupper: ; BTVER2: # BB#0: ; BTVER2-NEXT: vzeroupper # sched: [46:?] Index: test/CodeGen/X86/avx2-schedule.ll =================================================================== --- test/CodeGen/X86/avx2-schedule.ll +++ test/CodeGen/X86/avx2-schedule.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 define <32 x i8> @test_pabsb(<32 x i8> %a0, <32 x i8> *%a1) { @@ -19,6 +19,13 @@ ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsb (%rdi), %ymm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pabsb: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpabsb (%rdi), %ymm1 # sched: [8:0.50] @@ -48,6 +55,13 @@ ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsd (%rdi), %ymm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pabsd: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpabsd (%rdi), %ymm1 # sched: [8:0.50] @@ -77,6 +91,13 @@ ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsw (%rdi), %ymm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pabsw: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpabsw (%rdi), %ymm1 # sched: [8:0.50] @@ -104,6 +125,12 @@ ; HASWELL-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_paddb: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -128,6 +155,12 @@ ; HASWELL-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_paddd: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -152,6 +185,12 @@ ; HASWELL-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_paddq: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -176,6 +215,12 @@ ; HASWELL-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_paddw: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -202,6 +247,13 @@ ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pand: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pand: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -230,6 +282,13 @@ ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pandn: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pandn: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -258,6 +317,12 @@ ; HASWELL-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmulld: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [10:2.00] +; SKYLAKE-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pmulld: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [4:1.00] @@ -282,6 +347,12 @@ ; HASWELL-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmullw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pmullw: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [4:1.00] @@ -308,6 +379,13 @@ ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_por: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_por: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -334,6 +412,12 @@ ; HASWELL-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_psubb: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -358,6 +442,12 @@ ; HASWELL-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_psubd: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -382,6 +472,12 @@ ; HASWELL-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_psubq: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -406,6 +502,12 @@ ; HASWELL-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_psubw: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.25] @@ -432,6 +534,13 @@ ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pxor: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; ZNVER1-LABEL: test_pxor: ; ZNVER1: # BB#0: ; ZNVER1-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] Index: test/CodeGen/X86/f16c-schedule.ll =================================================================== --- test/CodeGen/X86/f16c-schedule.ll +++ test/CodeGen/X86/f16c-schedule.ll @@ -2,7 +2,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+f16c | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=IVY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -28,6 +28,13 @@ ; HASWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_vcvtph2ps_128: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtph2ps (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vcvtph2ps %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_vcvtph2ps_128: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtph2ps (%rdi), %xmm1 # sched: [8:1.00] @@ -71,6 +78,13 @@ ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_vcvtph2ps_256: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtph2ps (%rdi), %ymm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vcvtph2ps %xmm0, %ymm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_vcvtph2ps_256: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtph2ps (%rdi), %ymm1 # sched: [8:1.00] @@ -111,6 +125,12 @@ ; HASWELL-NEXT: vcvtps2ph $0, %xmm1, (%rdi) # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_vcvtps2ph_128: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtps2ph $0, %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtps2ph $0, %xmm1, (%rdi) # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_vcvtps2ph_128: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtps2ph $0, %xmm0, %xmm0 # sched: [3:1.00] @@ -152,6 +172,13 @@ ; HASWELL-NEXT: vzeroupper # sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_vcvtps2ph_256: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtps2ph $0, %ymm0, %xmm0 # sched: [6:1.00] +; SKYLAKE-NEXT: vcvtps2ph $0, %ymm1, (%rdi) # sched: [6:1.00] +; SKYLAKE-NEXT: vzeroupper # sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_vcvtps2ph_256: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtps2ph $0, %ymm0, %xmm0 # sched: [3:1.00] Index: test/CodeGen/X86/sse-schedule.ll =================================================================== --- test/CodeGen/X86/sse-schedule.ll +++ test/CodeGen/X86/sse-schedule.ll @@ -5,7 +5,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -40,6 +40,12 @@ ; HASWELL-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -88,6 +94,12 @@ ; HASWELL-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -140,6 +152,12 @@ ; HASWELL-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -196,6 +214,12 @@ ; HASWELL-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andnotps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andnotps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -255,6 +279,13 @@ ; HASWELL-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00] @@ -308,6 +339,12 @@ ; HASWELL-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmpss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmpss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -401,6 +438,20 @@ ; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_comiss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %cl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25] +; SKYLAKE-NEXT: vcomiss (%rdi), %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %dl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_comiss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00] @@ -472,6 +523,13 @@ ; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsi2ss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [8:1.00] +; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsi2ss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [3:1.00] @@ -528,6 +586,13 @@ ; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsi2ssq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [8:1.00] +; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsi2ssq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [3:1.00] @@ -584,6 +649,13 @@ ; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtss2si: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtss2si %xmm0, %ecx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtss2si (%rdi), %eax # sched: [4:1.00] +; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtss2si: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtss2si (%rdi), %eax # sched: [8:1.00] @@ -643,6 +715,13 @@ ; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtss2siq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtss2si %xmm0, %rcx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtss2si (%rdi), %rax # sched: [4:1.00] +; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtss2siq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtss2si (%rdi), %rax # sched: [8:1.00] @@ -702,6 +781,13 @@ ; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttss2si: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttss2si %xmm0, %ecx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvttss2si (%rdi), %eax # sched: [4:1.00] +; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttss2si: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttss2si (%rdi), %eax # sched: [8:1.00] @@ -758,6 +844,13 @@ ; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttss2siq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttss2si %xmm0, %rcx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvttss2si (%rdi), %rax # sched: [4:1.00] +; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttss2siq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttss2si (%rdi), %rax # sched: [8:1.00] @@ -809,6 +902,12 @@ ; HASWELL-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [13:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [13:1.00] +; SKYLAKE-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [13:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [19:19.00] @@ -857,6 +956,12 @@ ; HASWELL-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [13:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [13:1.00] +; SKYLAKE-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [13:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [19:19.00] @@ -905,6 +1010,12 @@ ; HASWELL-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_ldmxcsr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00] +; SKYLAKE-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_ldmxcsr: ; BTVER2: # BB#0: ; BTVER2-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00] @@ -955,6 +1066,12 @@ ; HASWELL-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1004,6 +1121,12 @@ ; HASWELL-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1053,6 +1176,12 @@ ; HASWELL-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1102,6 +1231,12 @@ ; HASWELL-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1156,6 +1291,13 @@ ; HASWELL-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movaps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovaps (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movaps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovaps (%rdi), %xmm0 # sched: [5:1.00] @@ -1209,6 +1351,11 @@ ; HASWELL-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movhlps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movhlps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:0.50] @@ -1262,6 +1409,13 @@ ; HASWELL-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movhps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movhps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00] @@ -1318,6 +1472,12 @@ ; HASWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movlhps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movlhps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50] @@ -1370,6 +1530,13 @@ ; HASWELL-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movlps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movlps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00] @@ -1421,6 +1588,11 @@ ; HASWELL-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movmskps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movmskps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovmskps %xmm0, %eax # sched: [1:0.50] @@ -1467,6 +1639,11 @@ ; HASWELL-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00] @@ -1516,6 +1693,13 @@ ; HASWELL-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movss_mem: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [1:0.50] +; SKYLAKE-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movss_mem: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:1.00] @@ -1567,6 +1751,11 @@ ; HASWELL-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movss_reg: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movss_reg: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50] @@ -1616,6 +1805,13 @@ ; HASWELL-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movups: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovups (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movups: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovups (%rdi), %xmm0 # sched: [5:1.00] @@ -1666,6 +1862,12 @@ ; HASWELL-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -1714,6 +1916,12 @@ ; HASWELL-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -1766,6 +1974,12 @@ ; HASWELL-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_orps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_orps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1819,6 +2033,11 @@ ; HASWELL-NEXT: prefetchnta (%rdi) # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_prefetchnta: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: prefetchnta (%rdi) # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_prefetchnta: ; BTVER2: # BB#0: ; BTVER2-NEXT: prefetchnta (%rdi) # sched: [5:1.00] @@ -1871,6 +2090,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rcpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vrcpps (%rdi), %xmm1 # sched: [5:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rcpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vrcpps (%rdi), %xmm1 # sched: [7:1.00] @@ -1935,6 +2161,14 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rcpss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] +; SKYLAKE-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [5:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rcpss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00] @@ -1998,6 +2232,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rsqrtps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [5:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rsqrtps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [7:1.00] @@ -2062,6 +2303,14 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_rsqrtss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] +; SKYLAKE-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_rsqrtss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00] @@ -2119,6 +2368,11 @@ ; HASWELL-NEXT: sfence # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sfence: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: sfence # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sfence: ; BTVER2: # BB#0: ; BTVER2-NEXT: sfence # sched: [1:1.00] @@ -2168,6 +2422,12 @@ ; HASWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_shufps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00] +; SKYLAKE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_shufps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50] @@ -2222,6 +2482,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00] +; SKYLAKE-NEXT: vsqrtps (%rdi), %xmm1 # sched: [14:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsqrtps (%rdi), %xmm1 # sched: [26:21.00] @@ -2286,6 +2553,14 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [14:1.00] +; SKYLAKE-NEXT: vmovaps (%rdi), %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [14:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:1.00] @@ -2340,6 +2615,12 @@ ; HASWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_stmxcsr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00] +; SKYLAKE-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_stmxcsr: ; BTVER2: # BB#0: ; BTVER2-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00] @@ -2390,6 +2671,12 @@ ; HASWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -2438,6 +2725,12 @@ ; HASWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -2526,6 +2819,20 @@ ; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_ucomiss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %cl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25] +; SKYLAKE-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %dl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_ucomiss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00] @@ -2596,6 +2903,12 @@ ; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpckhps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00] +; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpckhps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50] @@ -2648,6 +2961,12 @@ ; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpcklps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpcklps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50] @@ -2700,6 +3019,12 @@ ; HASWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_xorps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_xorps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] Index: test/CodeGen/X86/sse2-schedule.ll =================================================================== --- test/CodeGen/X86/sse2-schedule.ll +++ test/CodeGen/X86/sse2-schedule.ll @@ -5,7 +5,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -40,6 +40,12 @@ ; HASWELL-NEXT: vaddpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -88,6 +94,12 @@ ; HASWELL-NEXT: vaddsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -141,6 +153,13 @@ ; HASWELL-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -201,6 +220,13 @@ ; HASWELL-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_andnotpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vandnpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_andnotpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -263,6 +289,13 @@ ; HASWELL-NEXT: vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmppd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmppd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00] @@ -316,6 +349,12 @@ ; HASWELL-NEXT: vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cmpsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cmpsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -409,6 +448,20 @@ ; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_comisd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcomisd %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %cl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25] +; SKYLAKE-NEXT: vcomisd (%rdi), %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %dl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_comisd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcomisd %xmm1, %xmm0 # sched: [3:1.00] @@ -480,6 +533,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtdq2pd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtdq2pd (%rdi), %xmm1 # sched: [4:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtdq2pd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtdq2pd (%rdi), %xmm1 # sched: [8:1.00] @@ -539,6 +599,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtdq2ps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcvtdq2ps (%rdi), %xmm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtdq2ps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtdq2ps (%rdi), %xmm1 # sched: [8:1.00] @@ -596,6 +663,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtpd2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtpd2dqx (%rdi), %xmm1 # sched: [7:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtpd2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00] @@ -654,6 +728,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtpd2ps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtpd2psx (%rdi), %xmm1 # sched: [7:1.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtpd2ps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00] @@ -712,6 +793,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtps2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcvtps2dq (%rdi), %xmm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtps2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtps2dq (%rdi), %xmm1 # sched: [8:1.00] @@ -770,6 +858,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtps2pd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vcvtps2pd (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtps2pd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtps2pd (%rdi), %xmm1 # sched: [8:1.00] @@ -828,6 +923,13 @@ ; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsd2si: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsd2si %xmm0, %ecx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtsd2si (%rdi), %eax # sched: [4:1.00] +; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsd2si: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsd2si (%rdi), %eax # sched: [8:1.00] @@ -887,6 +989,13 @@ ; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsd2siq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsd2si %xmm0, %rcx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtsd2si (%rdi), %rax # sched: [4:1.00] +; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsd2siq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsd2si (%rdi), %rax # sched: [8:1.00] @@ -952,6 +1061,14 @@ ; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsd2ss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [1:0.50] +; SKYLAKE-NEXT: vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00] +; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsd2ss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:1.00] @@ -1010,6 +1127,13 @@ ; HASWELL-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsi2sd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [8:1.00] +; SKYLAKE-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsi2sd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [3:1.00] @@ -1066,6 +1190,13 @@ ; HASWELL-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtsi2sdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [8:1.00] +; SKYLAKE-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtsi2sdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [3:1.00] @@ -1130,6 +1261,14 @@ ; HASWELL-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvtss2sd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] +; SKYLAKE-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [2:1.00] +; SKYLAKE-NEXT: vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvtss2sd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00] @@ -1189,6 +1328,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttpd2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00] +; SKYLAKE-NEXT: vcvttpd2dqx (%rdi), %xmm1 # sched: [7:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttpd2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00] @@ -1248,6 +1394,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttps2dq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vcvttps2dq (%rdi), %xmm1 # sched: [3:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttps2dq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttps2dq (%rdi), %xmm1 # sched: [8:1.00] @@ -1304,6 +1457,13 @@ ; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttsd2si: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttsd2si %xmm0, %ecx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvttsd2si (%rdi), %eax # sched: [4:1.00] +; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttsd2si: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttsd2si (%rdi), %eax # sched: [8:1.00] @@ -1360,6 +1520,13 @@ ; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_cvttsd2siq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vcvttsd2si %xmm0, %rcx # sched: [4:1.00] +; SKYLAKE-NEXT: vcvttsd2si (%rdi), %rax # sched: [4:1.00] +; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_cvttsd2siq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vcvttsd2si (%rdi), %rax # sched: [8:1.00] @@ -1411,6 +1578,12 @@ ; HASWELL-NEXT: vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivpd %xmm1, %xmm0, %xmm0 # sched: [20:1.00] +; SKYLAKE-NEXT: vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivpd %xmm1, %xmm0, %xmm0 # sched: [19:19.00] @@ -1459,6 +1632,12 @@ ; HASWELL-NEXT: vdivsd (%rdi), %xmm0, %xmm0 # sched: [20:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_divsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdivsd %xmm1, %xmm0, %xmm0 # sched: [20:1.00] +; SKYLAKE-NEXT: vdivsd (%rdi), %xmm0, %xmm0 # sched: [20:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_divsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdivsd %xmm1, %xmm0, %xmm0 # sched: [19:19.00] @@ -1508,6 +1687,11 @@ ; HASWELL-NEXT: lfence # sched: [2:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_lfence: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: lfence # sched: [2:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_lfence: ; BTVER2: # BB#0: ; BTVER2-NEXT: lfence # sched: [1:1.00] @@ -1554,6 +1738,11 @@ ; HASWELL-NEXT: mfence # sched: [2:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mfence: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: mfence # sched: [2:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mfence: ; BTVER2: # BB#0: ; BTVER2-NEXT: mfence # sched: [1:1.00] @@ -1598,6 +1787,11 @@ ; HASWELL-NEXT: vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maskmovdqu: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maskmovdqu: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00] @@ -1643,6 +1837,12 @@ ; HASWELL-NEXT: vmaxpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1692,6 +1892,12 @@ ; HASWELL-NEXT: vmaxsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_maxsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmaxsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_maxsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1741,6 +1947,12 @@ ; HASWELL-NEXT: vminpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1790,6 +2002,12 @@ ; HASWELL-NEXT: vminsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_minsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vminsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_minsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -1844,6 +2062,13 @@ ; HASWELL-NEXT: vmovapd %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movapd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovapd (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovapd %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movapd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovapd (%rdi), %xmm0 # sched: [5:1.00] @@ -1899,6 +2124,13 @@ ; HASWELL-NEXT: vmovdqa %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movdqa: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovdqa (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovdqa %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movdqa: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovdqa (%rdi), %xmm0 # sched: [5:1.00] @@ -1954,6 +2186,13 @@ ; HASWELL-NEXT: vmovdqu %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movdqu: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovdqu (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovdqu %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movdqu: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovdqu (%rdi), %xmm0 # sched: [5:1.00] @@ -2024,6 +2263,16 @@ ; HASWELL-NEXT: vmovd %xmm1, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovd %edi, %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [1:0.50] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovd %xmm0, %eax # sched: [1:1.00] +; SKYLAKE-NEXT: vmovd %xmm1, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [5:1.00] @@ -2105,6 +2354,16 @@ ; HASWELL-NEXT: vmovq %xmm1, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movd_64: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovq %rdi, %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovq %xmm0, %rax # sched: [1:1.00] +; SKYLAKE-NEXT: vmovq %xmm1, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movd_64: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero sched: [5:1.00] @@ -2171,6 +2430,13 @@ ; HASWELL-NEXT: vmovhpd %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movhpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovhpd %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movhpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00] @@ -2229,6 +2495,13 @@ ; HASWELL-NEXT: vmovlpd %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movlpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovlpd %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movlpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00] @@ -2279,6 +2552,11 @@ ; HASWELL-NEXT: vmovmskpd %xmm0, %eax # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movmskpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovmskpd %xmm0, %eax # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movmskpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovmskpd %xmm0, %eax # sched: [1:0.50] @@ -2326,6 +2604,12 @@ ; HASWELL-NEXT: vmovntdq %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntdqa: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovntdq %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntdqa: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50] @@ -2373,6 +2657,12 @@ ; HASWELL-NEXT: vmovntpd %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovntpd %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00] @@ -2425,6 +2715,13 @@ ; HASWELL-NEXT: vmovq %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movq_mem: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vmovq %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movq_mem: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:1.00] @@ -2479,6 +2776,12 @@ ; HASWELL-NEXT: vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movq_reg: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33] +; SKYLAKE-NEXT: vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movq_reg: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.50] @@ -2531,6 +2834,13 @@ ; HASWELL-NEXT: vmovsd %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movsd_mem: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [1:0.50] +; SKYLAKE-NEXT: vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovsd %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movsd_mem: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [5:1.00] @@ -2583,6 +2893,11 @@ ; HASWELL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movsd_reg: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movsd_reg: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:0.50] @@ -2632,6 +2947,13 @@ ; HASWELL-NEXT: vmovupd %xmm0, (%rsi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movupd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovupd (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vmovupd %xmm0, (%rsi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movupd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovupd (%rdi), %xmm0 # sched: [5:1.00] @@ -2682,6 +3004,12 @@ ; HASWELL-NEXT: vmulpd (%rdi), %xmm0, %xmm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulpd %xmm1, %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulpd (%rdi), %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulpd %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -2730,6 +3058,12 @@ ; HASWELL-NEXT: vmulsd (%rdi), %xmm0, %xmm0 # sched: [5:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mulsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmulsd %xmm1, %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: vmulsd (%rdi), %xmm0, %xmm0 # sched: [5:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mulsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmulsd %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -2783,6 +3117,13 @@ ; HASWELL-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_orpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vorpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_orpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -2842,6 +3183,12 @@ ; HASWELL-NEXT: vpackssdw (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_packssdw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpackssdw (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_packssdw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -2896,6 +3243,12 @@ ; HASWELL-NEXT: vpacksswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_packsswb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpacksswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_packsswb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -2950,6 +3303,12 @@ ; HASWELL-NEXT: vpackuswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_packuswb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpackuswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_packuswb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3004,6 +3363,12 @@ ; HASWELL-NEXT: vpaddb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3056,6 +3421,12 @@ ; HASWELL-NEXT: vpaddd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3104,6 +3475,12 @@ ; HASWELL-NEXT: vpaddq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3156,6 +3533,12 @@ ; HASWELL-NEXT: vpaddsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddsb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3209,6 +3592,12 @@ ; HASWELL-NEXT: vpaddsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3262,6 +3651,12 @@ ; HASWELL-NEXT: vpaddusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddusb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddusb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3315,6 +3710,12 @@ ; HASWELL-NEXT: vpaddusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddusw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddusw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3368,6 +3769,12 @@ ; HASWELL-NEXT: vpaddw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_paddw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_paddw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3421,6 +3828,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pand: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpand (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pand: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3483,6 +3897,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pandn: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpandn (%rdi), %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pandn: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3540,6 +3961,12 @@ ; HASWELL-NEXT: vpavgb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pavgb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpavgb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pavgb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3593,6 +4020,12 @@ ; HASWELL-NEXT: vpavgw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pavgw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpavgw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pavgw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -3649,6 +4082,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpeqb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpeqb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3708,6 +4148,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpeqd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpeqd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3767,6 +4214,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpeqw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpeqw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3827,6 +4281,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpgtb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpgtb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3887,6 +4348,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpgtd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpgtd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3947,6 +4415,13 @@ ; HASWELL-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpgtw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpgtw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50] @@ -3999,6 +4474,12 @@ ; HASWELL-NEXT: # kill: %AX %AX %EAX ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pextrw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpextrw $6, %xmm0, %eax # sched: [2:1.00] +; SKYLAKE-NEXT: # kill: %AX %AX %EAX +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pextrw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpextrw $6, %xmm0, %eax # sched: [1:0.50] @@ -4049,6 +4530,12 @@ ; HASWELL-NEXT: vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pinsrw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pinsrw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [1:0.50] @@ -4105,6 +4592,12 @@ ; HASWELL-NEXT: vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaddwd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaddwd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4159,6 +4652,12 @@ ; HASWELL-NEXT: vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4212,6 +4711,12 @@ ; HASWELL-NEXT: vpmaxub (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxub: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxub (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxub: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4265,6 +4770,12 @@ ; HASWELL-NEXT: vpminsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4318,6 +4829,12 @@ ; HASWELL-NEXT: vpminub (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminub: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminub (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminub: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4364,6 +4881,11 @@ ; HASWELL-NEXT: vpmovmskb %xmm0, %eax # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovmskb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovmskb %xmm0, %eax # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovmskb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovmskb %xmm0, %eax # sched: [1:0.50] @@ -4409,6 +4931,12 @@ ; HASWELL-NEXT: vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmulhuw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmulhuw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4458,6 +4986,12 @@ ; HASWELL-NEXT: vpmulhw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmulhw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmulhw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmulhw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmulhw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmulhw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4507,6 +5041,12 @@ ; HASWELL-NEXT: vpmullw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmullw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmullw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmullw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmullw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmullw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4563,6 +5103,12 @@ ; HASWELL-NEXT: vpmuludq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmuludq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmuludq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmuludq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmuludq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmuludq %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4618,6 +5164,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_por: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpor (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_por: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4677,6 +5230,12 @@ ; HASWELL-NEXT: vpsadbw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psadbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsadbw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpsadbw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psadbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsadbw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -4734,6 +5293,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pshufd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00] +; SKYLAKE-NEXT: vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pshufd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00] @@ -4792,6 +5358,13 @@ ; HASWELL-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pshufhw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00] +; SKYLAKE-NEXT: vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pshufhw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [6:1.00] @@ -4850,6 +5423,13 @@ ; HASWELL-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pshuflw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00] +; SKYLAKE-NEXT: vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pshuflw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [6:1.00] @@ -4906,6 +5486,13 @@ ; HASWELL-NEXT: vpslld $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pslld: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpslld (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpslld $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pslld: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpslld %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -4960,6 +5547,11 @@ ; HASWELL-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pslldq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pslldq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:0.50] @@ -5009,6 +5601,13 @@ ; HASWELL-NEXT: vpsllq $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psllq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsllq (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsllq $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psllq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsllq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5067,6 +5666,13 @@ ; HASWELL-NEXT: vpsllw $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psllw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsllw (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsllw $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psllw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsllw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5125,6 +5731,13 @@ ; HASWELL-NEXT: vpsrad $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psrad: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrad (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrad $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psrad: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsrad %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5183,6 +5796,13 @@ ; HASWELL-NEXT: vpsraw $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psraw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsraw (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsraw $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psraw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsraw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5241,6 +5861,13 @@ ; HASWELL-NEXT: vpsrld $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psrld: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrld (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrld $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psrld: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsrld %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5295,6 +5922,11 @@ ; HASWELL-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psrldq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psrldq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:0.50] @@ -5344,6 +5976,13 @@ ; HASWELL-NEXT: vpsrlq $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psrlq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrlq (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrlq $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psrlq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsrlq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5402,6 +6041,13 @@ ; HASWELL-NEXT: vpsrlw $2, %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psrlw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrlw (%rdi), %xmm0, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: vpsrlw $2, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psrlw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsrlw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5459,6 +6105,12 @@ ; HASWELL-NEXT: vpsubb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5511,6 +6163,12 @@ ; HASWELL-NEXT: vpsubd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5559,6 +6217,12 @@ ; HASWELL-NEXT: vpsubq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5611,6 +6275,12 @@ ; HASWELL-NEXT: vpsubsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubsb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5664,6 +6334,12 @@ ; HASWELL-NEXT: vpsubsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5717,6 +6393,12 @@ ; HASWELL-NEXT: vpsubusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubusb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubusb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5770,6 +6452,12 @@ ; HASWELL-NEXT: vpsubusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubusw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubusw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5823,6 +6511,12 @@ ; HASWELL-NEXT: vpsubw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psubw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsubw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psubw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -5875,6 +6569,12 @@ ; HASWELL-NEXT: vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpckhbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpckhbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:0.50] @@ -5930,6 +6630,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpckhdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpckhdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50] @@ -5986,6 +6693,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpckhqdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpckhqdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50] @@ -6041,6 +6755,12 @@ ; HASWELL-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpckhwd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpckhwd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50] @@ -6093,6 +6813,12 @@ ; HASWELL-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpcklbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpcklbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50] @@ -6148,6 +6874,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpckldq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpckldq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50] @@ -6204,6 +6937,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpcklqdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpcklqdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50] @@ -6259,6 +6999,12 @@ ; HASWELL-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_punpcklwd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00] +; SKYLAKE-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_punpcklwd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50] @@ -6312,6 +7058,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pxor: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: vpxor (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pxor: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -6368,6 +7121,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_shufpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00] +; SKYLAKE-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_shufpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:0.50] @@ -6425,6 +7185,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtpd %xmm0, %xmm0 # sched: [21:1.00] +; SKYLAKE-NEXT: vsqrtpd (%rdi), %xmm1 # sched: [21:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsqrtpd (%rdi), %xmm1 # sched: [26:21.00] @@ -6489,6 +7256,14 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_sqrtsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [21:1.00] +; SKYLAKE-NEXT: vmovapd (%rdi), %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [21:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_sqrtsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovapd (%rdi), %xmm1 # sched: [5:1.00] @@ -6543,6 +7318,12 @@ ; HASWELL-NEXT: vsubpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -6591,6 +7372,12 @@ ; HASWELL-NEXT: vsubsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_subsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vsubsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_subsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -6679,6 +7466,20 @@ ; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_ucomisd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vucomisd %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %cl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25] +; SKYLAKE-NEXT: vucomisd (%rdi), %xmm0 # sched: [7:1.00] +; SKYLAKE-NEXT: setnp %al # sched: [1:0.50] +; SKYLAKE-NEXT: sete %dl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25] +; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_ucomisd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vucomisd %xmm1, %xmm0 # sched: [3:1.00] @@ -6750,6 +7551,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpckhpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00] +; SKYLAKE-NEXT: vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpckhpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50] @@ -6812,6 +7620,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_unpcklpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00] +; SKYLAKE-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_unpcklpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50] @@ -6868,6 +7683,13 @@ ; HASWELL-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_xorpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vxorpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_xorpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] Index: test/CodeGen/X86/sse3-schedule.ll =================================================================== --- test/CodeGen/X86/sse3-schedule.ll +++ test/CodeGen/X86/sse3-schedule.ll @@ -5,7 +5,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -40,6 +40,12 @@ ; HASWELL-NEXT: vaddsubpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addsubpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddsubpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addsubpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -89,6 +95,12 @@ ; HASWELL-NEXT: vaddsubps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_addsubps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vaddsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vaddsubps (%rdi), %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_addsubps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vaddsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -138,6 +150,12 @@ ; HASWELL-NEXT: vhaddpd (%rdi), %xmm0, %xmm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_haddpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhaddpd %xmm1, %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhaddpd (%rdi), %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_haddpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -187,6 +205,12 @@ ; HASWELL-NEXT: vhaddps (%rdi), %xmm0, %xmm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_haddps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhaddps %xmm1, %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhaddps (%rdi), %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_haddps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -236,6 +260,12 @@ ; HASWELL-NEXT: vhsubpd (%rdi), %xmm0, %xmm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_hsubpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhsubpd %xmm1, %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhsubpd (%rdi), %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_hsubpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -285,6 +315,12 @@ ; HASWELL-NEXT: vhsubps (%rdi), %xmm0, %xmm0 # sched: [5:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_hsubps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vhsubps %xmm1, %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: vhsubps (%rdi), %xmm0, %xmm0 # sched: [5:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_hsubps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vhsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -331,6 +367,11 @@ ; HASWELL-NEXT: vlddqu (%rdi), %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_lddqu: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vlddqu (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_lddqu: ; BTVER2: # BB#0: ; BTVER2-NEXT: vlddqu (%rdi), %xmm0 # sched: [5:1.00] @@ -381,6 +422,13 @@ ; HASWELL-NEXT: monitor # sched: [100:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_monitor: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: leaq (%rdi), %rax # sched: [1:0.50] +; SKYLAKE-NEXT: movl %esi, %ecx # sched: [1:0.25] +; SKYLAKE-NEXT: monitor # sched: [100:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_monitor: ; BTVER2: # BB#0: ; BTVER2-NEXT: leaq (%rdi), %rax # sched: [1:0.50] @@ -436,6 +484,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movddup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] sched: [1:1.00] +; SKYLAKE-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0] sched: [1:0.50] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movddup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0] sched: [5:1.00] @@ -493,6 +548,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movshdup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] sched: [1:1.00] +; SKYLAKE-NEXT: vmovshdup {{.*#+}} xmm1 = mem[1,1,3,3] sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movshdup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovshdup {{.*#+}} xmm1 = mem[1,1,3,3] sched: [5:1.00] @@ -550,6 +612,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movsldup: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2] sched: [1:1.00] +; SKYLAKE-NEXT: vmovsldup {{.*#+}} xmm1 = mem[0,0,2,2] sched: [1:0.50] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movsldup: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovsldup {{.*#+}} xmm1 = mem[0,0,2,2] sched: [5:1.00] @@ -606,6 +675,13 @@ ; HASWELL-NEXT: mwait # sched: [20:2.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mwait: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl %edi, %ecx # sched: [1:0.25] +; SKYLAKE-NEXT: movl %esi, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: mwait # sched: [20:2.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mwait: ; BTVER2: # BB#0: ; BTVER2-NEXT: movl %edi, %ecx # sched: [1:0.17] Index: test/CodeGen/X86/sse41-schedule.ll =================================================================== --- test/CodeGen/X86/sse41-schedule.ll +++ test/CodeGen/X86/sse41-schedule.ll @@ -4,7 +4,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -37,6 +37,13 @@ ; HASWELL-NEXT: vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1] sched: [1:0.33] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendpd {{.*#+}} xmm0 = xmm0[0],xmm1[1] sched: [1:0.50] @@ -82,6 +89,12 @@ ; HASWELL-NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2,3] sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33] +; SKYLAKE-NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2,3] sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50] @@ -130,6 +143,12 @@ ; HASWELL-NEXT: vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendvpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendvpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -179,6 +198,12 @@ ; HASWELL-NEXT: vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_blendvps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_blendvps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -222,6 +247,12 @@ ; HASWELL-NEXT: vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [9:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_dppd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00] +; SKYLAKE-NEXT: vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [9:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_dppd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -265,6 +296,12 @@ ; HASWELL-NEXT: vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [14:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_dpps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [14:2.00] +; SKYLAKE-NEXT: vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [14:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_dpps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [3:1.00] @@ -308,6 +345,12 @@ ; HASWELL-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_insertps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00] +; SKYLAKE-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_insertps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:0.50] @@ -347,6 +390,11 @@ ; HASWELL-NEXT: vmovntdqa (%rdi), %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_movntdqa: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmovntdqa (%rdi), %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_movntdqa: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmovntdqa (%rdi), %xmm0 # sched: [5:1.00] @@ -386,6 +434,12 @@ ; HASWELL-NEXT: vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [7:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_mpsadbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [7:2.00] +; SKYLAKE-NEXT: vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [7:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_mpsadbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [3:2.00] @@ -430,6 +484,12 @@ ; HASWELL-NEXT: vpackusdw (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_packusdw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpackusdw (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_packusdw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -480,6 +540,12 @@ ; HASWELL-NEXT: vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pblendvb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pblendvb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -523,6 +589,12 @@ ; HASWELL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],mem[2,3],xmm0[4,5,6],mem[7] sched: [4:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pblendw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00] +; SKYLAKE-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],mem[2,3],xmm0[4,5,6],mem[7] sched: [4:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pblendw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50] @@ -565,6 +637,12 @@ ; HASWELL-NEXT: vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpeqq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpeqq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -609,6 +687,12 @@ ; HASWELL-NEXT: vpextrb $1, %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pextrb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpextrb $3, %xmm0, %eax # sched: [2:1.00] +; SKYLAKE-NEXT: vpextrb $1, %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pextrb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpextrb $3, %xmm0, %eax # sched: [1:0.50] @@ -652,6 +736,12 @@ ; HASWELL-NEXT: vpextrd $1, %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pextrd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpextrd $3, %xmm0, %eax # sched: [2:1.00] +; SKYLAKE-NEXT: vpextrd $1, %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pextrd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpextrd $3, %xmm0, %eax # sched: [1:0.50] @@ -694,6 +784,12 @@ ; HASWELL-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pextrq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpextrq $1, %xmm0, %rax # sched: [2:1.00] +; SKYLAKE-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pextrq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpextrq $1, %xmm0, %rax # sched: [1:0.50] @@ -736,6 +832,12 @@ ; HASWELL-NEXT: vpextrw $1, %xmm0, (%rdi) # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pextrw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpextrw $3, %xmm0, %eax # sched: [2:1.00] +; SKYLAKE-NEXT: vpextrw $1, %xmm0, (%rdi) # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pextrw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpextrw $3, %xmm0, %eax # sched: [1:0.50] @@ -779,6 +881,12 @@ ; HASWELL-NEXT: vphminposuw %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phminposuw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphminposuw (%rdi), %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vphminposuw %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phminposuw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphminposuw (%rdi), %xmm0 # sched: [7:1.00] @@ -822,6 +930,12 @@ ; HASWELL-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pinsrb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pinsrb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [1:0.50] @@ -864,6 +978,12 @@ ; HASWELL-NEXT: vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pinsrd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pinsrd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [1:0.50] @@ -910,6 +1030,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pinsrq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:2.00] +; SKYLAKE-NEXT: vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pinsrq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00] @@ -955,6 +1082,12 @@ ; HASWELL-NEXT: vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxsb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -998,6 +1131,12 @@ ; HASWELL-NEXT: vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1041,6 +1180,12 @@ ; HASWELL-NEXT: vpmaxud (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxud: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxud (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxud: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1084,6 +1229,12 @@ ; HASWELL-NEXT: vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaxuw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaxuw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1127,6 +1278,12 @@ ; HASWELL-NEXT: vpminsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminsb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1170,6 +1327,12 @@ ; HASWELL-NEXT: vpminsd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminsd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1213,6 +1376,12 @@ ; HASWELL-NEXT: vpminud (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminud: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminud (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminud: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1256,6 +1425,12 @@ ; HASWELL-NEXT: vpminuw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pminuw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpminuw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pminuw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -1304,6 +1479,13 @@ ; HASWELL-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxbw %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxbw (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00] @@ -1355,6 +1537,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxbd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxbd %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxbd (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxbd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00] @@ -1406,6 +1595,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxbq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxbq %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxbq (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxbq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00] @@ -1457,6 +1653,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxdq %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxdq (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxdq (%rdi), %xmm1 # sched: [6:1.00] @@ -1508,6 +1711,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxwd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxwd %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxwd (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxwd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxwd (%rdi), %xmm1 # sched: [6:1.00] @@ -1559,6 +1769,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovsxwq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovsxwq %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpmovsxwq (%rdi), %xmm1 # sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovsxwq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovsxwq (%rdi), %xmm1 # sched: [6:1.00] @@ -1610,6 +1827,13 @@ ; HASWELL-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxbw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxbw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero sched: [6:1.00] @@ -1661,6 +1885,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxbd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxbd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero sched: [6:1.00] @@ -1712,6 +1943,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxbq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxbq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero sched: [6:1.00] @@ -1763,6 +2001,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero sched: [6:1.00] @@ -1814,6 +2059,13 @@ ; HASWELL-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxwd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxwd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero sched: [6:1.00] @@ -1865,6 +2117,13 @@ ; HASWELL-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmovzxwq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpmovzxwq {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero sched: [1:1.00] +; SKYLAKE-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmovzxwq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmovzxwq {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero sched: [6:1.00] @@ -1911,6 +2170,12 @@ ; HASWELL-NEXT: vpmuldq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmuldq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmuldq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmuldq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmuldq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmuldq %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -1955,6 +2220,12 @@ ; HASWELL-NEXT: vpmulld (%rdi), %xmm0, %xmm0 # sched: [10:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmulld: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmulld %xmm1, %xmm0, %xmm0 # sched: [10:2.00] +; SKYLAKE-NEXT: vpmulld (%rdi), %xmm0, %xmm0 # sched: [10:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmulld: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmulld %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -2013,6 +2284,16 @@ ; HASWELL-NEXT: movzbl %cl, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_ptest: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vptest %xmm1, %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: setb %al # sched: [1:0.50] +; SKYLAKE-NEXT: vptest (%rdi), %xmm0 # sched: [2:1.00] +; SKYLAKE-NEXT: setb %cl # sched: [1:0.50] +; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25] +; SKYLAKE-NEXT: movzbl %cl, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_ptest: ; BTVER2: # BB#0: ; BTVER2-NEXT: vptest %xmm1, %xmm0 # sched: [1:0.50] @@ -2070,6 +2351,13 @@ ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundpd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundpd $7, %xmm0, %xmm0 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundpd $7, (%rdi), %xmm1 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundpd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundpd $7, (%rdi), %xmm1 # sched: [8:1.00] @@ -2121,6 +2409,13 @@ ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundps: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundps $7, %xmm0, %xmm0 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundps $7, (%rdi), %xmm1 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundps: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundps $7, (%rdi), %xmm1 # sched: [8:1.00] @@ -2173,6 +2468,13 @@ ; HASWELL-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundsd $7, %xmm1, %xmm0, %xmm1 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundsd $7, (%rdi), %xmm0, %xmm0 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundsd $7, %xmm1, %xmm0, %xmm1 # sched: [3:1.00] @@ -2225,6 +2527,13 @@ ; HASWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_roundss: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vroundss $7, %xmm1, %xmm0, %xmm1 # sched: [5:1.25] +; SKYLAKE-NEXT: vroundss $7, (%rdi), %xmm0, %xmm0 # sched: [6:2.00] +; SKYLAKE-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_roundss: ; BTVER2: # BB#0: ; BTVER2-NEXT: vroundss $7, %xmm1, %xmm0, %xmm1 # sched: [3:1.00] Index: test/CodeGen/X86/sse42-schedule.ll =================================================================== --- test/CodeGen/X86/sse42-schedule.ll +++ test/CodeGen/X86/sse42-schedule.ll @@ -4,7 +4,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -37,6 +37,13 @@ ; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: crc32_32_8: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [7:1.00] +; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: crc32_32_8: ; BTVER2: # BB#0: ; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00] @@ -86,6 +93,13 @@ ; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: crc32_32_16: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: crc32w (%rdx), %edi # sched: [7:1.00] +; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: crc32_32_16: ; BTVER2: # BB#0: ; BTVER2-NEXT: crc32w %si, %edi # sched: [3:1.00] @@ -135,6 +149,13 @@ ; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: crc32_32_32: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: crc32l (%rdx), %edi # sched: [7:1.00] +; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: crc32_32_32: ; BTVER2: # BB#0: ; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:1.00] @@ -184,6 +205,13 @@ ; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: crc32_64_8: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00] +; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [7:1.00] +; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: crc32_64_8: ; BTVER2: # BB#0: ; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00] @@ -233,6 +261,13 @@ ; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: crc32_64_64: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] +; SKYLAKE-NEXT: crc32q (%rdx), %rdi # sched: [7:1.00] +; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: crc32_64_64: ; BTVER2: # BB#0: ; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] @@ -306,6 +341,19 @@ ; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpestri: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] +; SKYLAKE-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] +; SKYLAKE-NEXT: movl %ecx, %esi # sched: [1:0.25] +; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] +; SKYLAKE-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00] +; SKYLAKE-NEXT: # kill: %ECX %ECX %RCX +; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpestri: ; BTVER2: # BB#0: ; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17] @@ -380,6 +428,16 @@ ; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpestrm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] +; SKYLAKE-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] +; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] +; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpestrm: ; BTVER2: # BB#0: ; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17] @@ -443,6 +501,15 @@ ; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpistri: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] +; SKYLAKE-NEXT: movl %ecx, %eax # sched: [1:0.25] +; SKYLAKE-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:3.00] +; SKYLAKE-NEXT: # kill: %ECX %ECX %RCX +; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpistri: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [6:1.00] @@ -493,6 +560,12 @@ ; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpistrm: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] +; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpistrm: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [7:1.00] @@ -536,6 +609,12 @@ ; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pcmpgtq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pcmpgtq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -580,6 +659,12 @@ ; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pclmulqdq: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00] +; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pclmulqdq: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00] Index: test/CodeGen/X86/ssse3-schedule.ll =================================================================== --- test/CodeGen/X86/ssse3-schedule.ll +++ test/CodeGen/X86/ssse3-schedule.ll @@ -5,7 +5,7 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 @@ -46,6 +46,13 @@ ; HASWELL-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsb %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsb (%rdi), %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pabsb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpabsb (%rdi), %xmm1 # sched: [6:1.00] @@ -104,6 +111,13 @@ ; HASWELL-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsd %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsd (%rdi), %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pabsd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpabsd (%rdi), %xmm1 # sched: [6:1.00] @@ -162,6 +176,13 @@ ; HASWELL-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pabsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpabsw %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpabsw (%rdi), %xmm1 # sched: [1:0.50] +; SKYLAKE-NEXT: vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pabsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpabsw (%rdi), %xmm1 # sched: [6:1.00] @@ -219,6 +240,12 @@ ; HASWELL-NEXT: vpalignr {{.*#+}} xmm0 = mem[14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13] sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_palignr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5] sched: [1:1.00] +; SKYLAKE-NEXT: vpalignr {{.*#+}} xmm0 = mem[14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13] sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_palignr: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5] sched: [1:0.50] @@ -267,6 +294,12 @@ ; HASWELL-NEXT: vphaddd (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phaddd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphaddd %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphaddd (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phaddd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -316,6 +349,12 @@ ; HASWELL-NEXT: vphaddsw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phaddsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphaddsw %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphaddsw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phaddsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -365,6 +404,12 @@ ; HASWELL-NEXT: vphaddw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phaddw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphaddw %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphaddw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phaddw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -414,6 +459,12 @@ ; HASWELL-NEXT: vphsubd (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phsubd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphsubd %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphsubd (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phsubd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -463,6 +514,12 @@ ; HASWELL-NEXT: vphsubsw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phsubsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphsubsw %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphsubsw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phsubsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -512,6 +569,12 @@ ; HASWELL-NEXT: vphsubw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_phsubw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vphsubw %xmm1, %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: vphsubw (%rdi), %xmm0, %xmm0 # sched: [3:2.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_phsubw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vphsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -561,6 +624,12 @@ ; HASWELL-NEXT: vpmaddubsw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmaddubsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmaddubsw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmaddubsw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmaddubsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmaddubsw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -611,6 +680,12 @@ ; HASWELL-NEXT: vpmulhrsw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pmulhrsw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpmulhrsw %xmm1, %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: vpmulhrsw (%rdi), %xmm0, %xmm0 # sched: [5:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pmulhrsw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpmulhrsw %xmm1, %xmm0, %xmm0 # sched: [2:1.00] @@ -660,6 +735,12 @@ ; HASWELL-NEXT: vpshufb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_pshufb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpshufb %xmm1, %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: vpshufb (%rdi), %xmm0, %xmm0 # sched: [1:1.00] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_pshufb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpshufb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -713,6 +794,12 @@ ; HASWELL-NEXT: vpsignb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psignb: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsignb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsignb (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psignb: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsignb %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -766,6 +853,12 @@ ; HASWELL-NEXT: vpsignd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psignd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsignd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsignd (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psignd: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsignd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] @@ -819,6 +912,12 @@ ; HASWELL-NEXT: vpsignw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] ; HASWELL-NEXT: retq # sched: [2:1.00] ; +; SKYLAKE-LABEL: test_psignw: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: vpsignw %xmm1, %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: vpsignw (%rdi), %xmm0, %xmm0 # sched: [1:0.50] +; SKYLAKE-NEXT: retq # sched: [2:1.00] +; ; BTVER2-LABEL: test_psignw: ; BTVER2: # BB#0: ; BTVER2-NEXT: vpsignw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]