Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/avx-schedule.ll
Show All 29 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_addpd: | ; ZNVER1-LABEL: test_addpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vaddpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fadd <4 x double> %a0, %a1 | %1 = fadd <4 x double> %a0, %a1 | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = fadd <4 x double> %1, %2 | %3 = fadd <4 x double> %1, %2 | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
define <8 x float> @test_addps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_addps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_addps: | ; GENERIC-LABEL: test_addps: | ||||
Show All 17 Lines | |||||
; BTVER2-LABEL: test_addps: | ; BTVER2-LABEL: test_addps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_addps: | ; ZNVER1-LABEL: test_addps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vaddps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fadd <8 x float> %a0, %a1 | %1 = fadd <8 x float> %a0, %a1 | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = fadd <8 x float> %1, %2 | %3 = fadd <8 x float> %1, %2 | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
define <4 x double> @test_addsubpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_addsubpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_addsubpd: | ; GENERIC-LABEL: test_addsubpd: | ||||
Show All 16 Lines | |||||
; | ; | ||||
; BTVER2-LABEL: test_addsubpd: | ; BTVER2-LABEL: test_addsubpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_addsubpd: | ; ZNVER1-LABEL: test_addsubpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddsubpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vaddsubpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %a0, <4 x double> %a1) | %1 = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %a0, <4 x double> %a1) | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %1, <4 x double> %2) | %3 = call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %1, <4 x double> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_addsubps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_addsubps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
Show All 16 Lines | |||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_addsubps: | ; BTVER2-LABEL: test_addsubps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_addsubps: | ; ZNVER1-LABEL: test_addsubps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddsubps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vaddsubps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %a0, <8 x float> %a1) | %1 = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %a0, <8 x float> %a1) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %1, <8 x float> %2) | %3 = call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %1, <8 x float> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float>, <8 x float>) nounwind readnone | ||||
define <4 x double> @test_andnotpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_andnotpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
Show All 20 Lines | |||||
; | ; | ||||
; BTVER2-LABEL: test_andnotpd: | ; BTVER2-LABEL: test_andnotpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vandnpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vandnpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_andnotpd: | ; ZNVER1-LABEL: test_andnotpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vandnpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vandnpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vandnpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <4 x double> %a0 to <4 x i64> | %1 = bitcast <4 x double> %a0 to <4 x i64> | ||||
%2 = bitcast <4 x double> %a1 to <4 x i64> | %2 = bitcast <4 x double> %a1 to <4 x i64> | ||||
%3 = xor <4 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1> | %3 = xor <4 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1> | ||||
%4 = and <4 x i64> %3, %2 | %4 = and <4 x i64> %3, %2 | ||||
%5 = load <4 x double>, <4 x double> *%a2, align 32 | %5 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%6 = bitcast <4 x double> %5 to <4 x i64> | %6 = bitcast <4 x double> %5 to <4 x i64> | ||||
%7 = xor <4 x i64> %4, <i64 -1, i64 -1, i64 -1, i64 -1> | %7 = xor <4 x i64> %4, <i64 -1, i64 -1, i64 -1, i64 -1> | ||||
%8 = and <4 x i64> %6, %7 | %8 = and <4 x i64> %6, %7 | ||||
Show All 25 Lines | |||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_andnotps: | ; BTVER2-LABEL: test_andnotps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vandnps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vandnps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_andnotps: | ; ZNVER1-LABEL: test_andnotps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vandnps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vandnps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vandnps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <8 x float> %a0 to <4 x i64> | %1 = bitcast <8 x float> %a0 to <4 x i64> | ||||
%2 = bitcast <8 x float> %a1 to <4 x i64> | %2 = bitcast <8 x float> %a1 to <4 x i64> | ||||
%3 = xor <4 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1> | %3 = xor <4 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1> | ||||
%4 = and <4 x i64> %3, %2 | %4 = and <4 x i64> %3, %2 | ||||
%5 = load <8 x float>, <8 x float> *%a2, align 32 | %5 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%6 = bitcast <8 x float> %5 to <4 x i64> | %6 = bitcast <8 x float> %5 to <4 x i64> | ||||
%7 = xor <4 x i64> %4, <i64 -1, i64 -1, i64 -1, i64 -1> | %7 = xor <4 x i64> %4, <i64 -1, i64 -1, i64 -1, i64 -1> | ||||
%8 = and <4 x i64> %6, %7 | %8 = and <4 x i64> %6, %7 | ||||
Show All 24 Lines | |||||
; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_andpd: | ; BTVER2-LABEL: test_andpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vandpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vandpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_andpd: | ; ZNVER1-LABEL: test_andpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vandpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vandpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vandpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <4 x double> %a0 to <4 x i64> | %1 = bitcast <4 x double> %a0 to <4 x i64> | ||||
%2 = bitcast <4 x double> %a1 to <4 x i64> | %2 = bitcast <4 x double> %a1 to <4 x i64> | ||||
%3 = and <4 x i64> %1, %2 | %3 = and <4 x i64> %1, %2 | ||||
%4 = load <4 x double>, <4 x double> *%a2, align 32 | %4 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%5 = bitcast <4 x double> %4 to <4 x i64> | %5 = bitcast <4 x double> %4 to <4 x i64> | ||||
%6 = and <4 x i64> %3, %5 | %6 = and <4 x i64> %3, %5 | ||||
%7 = bitcast <4 x i64> %6 to <4 x double> | %7 = bitcast <4 x i64> %6 to <4 x double> | ||||
%8 = fadd <4 x double> %a1, %7 | %8 = fadd <4 x double> %a1, %7 | ||||
Show All 21 Lines | |||||
; HASWELL-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_andps: | ; BTVER2-LABEL: test_andps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_andps: | ; ZNVER1-LABEL: test_andps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vandps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vandps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <8 x float> %a0 to <4 x i64> | %1 = bitcast <8 x float> %a0 to <4 x i64> | ||||
%2 = bitcast <8 x float> %a1 to <4 x i64> | %2 = bitcast <8 x float> %a1 to <4 x i64> | ||||
%3 = and <4 x i64> %1, %2 | %3 = and <4 x i64> %1, %2 | ||||
%4 = load <8 x float>, <8 x float> *%a2, align 32 | %4 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%5 = bitcast <8 x float> %4 to <4 x i64> | %5 = bitcast <8 x float> %4 to <4 x i64> | ||||
%6 = and <4 x i64> %3, %5 | %6 = and <4 x i64> %3, %5 | ||||
%7 = bitcast <4 x i64> %6 to <8 x float> | %7 = bitcast <4 x i64> %6 to <8 x float> | ||||
%8 = fadd <8 x float> %a1, %7 | %8 = fadd <8 x float> %a1, %7 | ||||
Show All 20 Lines | |||||
; HASWELL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.33] | ; HASWELL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.33] | ||||
; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [5:0.50] | ; HASWELL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [5:0.50] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_blendpd: | ; BTVER2-LABEL: test_blendpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.50] | ; BTVER2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [6:1.00] | ; BTVER2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_blendpd: | ; ZNVER1-LABEL: test_blendpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.50] | ; ZNVER1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [8:0.50] | ; ZNVER1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],mem[1,2],ymm0[3] sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 0, i32 5, i32 6, i32 3> | %1 = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 0, i32 5, i32 6, i32 3> | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = fadd <4 x double> %a1, %1 | %3 = fadd <4 x double> %a1, %1 | ||||
%4 = shufflevector <4 x double> %3, <4 x double> %2, <4 x i32> <i32 0, i32 5, i32 6, i32 3> | %4 = shufflevector <4 x double> %3, <4 x double> %2, <4 x i32> <i32 0, i32 5, i32 6, i32 3> | ||||
ret <4 x double> %4 | ret <4 x double> %4 | ||||
} | } | ||||
define <8 x float> @test_blendps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_blendps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
Show All 10 Lines | |||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_blendps: | ; HASWELL-LABEL: test_blendps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.33] | ; HASWELL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.33] | ||||
; HASWELL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [5:0.50] | ; HASWELL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [5:0.50] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_blendps: | ; BTVER2-LABEL: test_blendps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.50] | ; BTVER2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.50] | ||||
; BTVER2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [6:1.00] | ; BTVER2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_blendps: | ; ZNVER1-LABEL: test_blendps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.50] | ; ZNVER1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4,5,6,7] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [8:0.50] | ; ZNVER1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2],ymm0[3],mem[4,5,6],ymm0[7] sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 9, i32 10, i32 3, i32 4, i32 5, i32 6, i32 7> | %1 = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 9, i32 10, i32 3, i32 4, i32 5, i32 6, i32 7> | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = shufflevector <8 x float> %1, <8 x float> %2, <8 x i32> <i32 0, i32 1, i32 10, i32 3, i32 12, i32 13, i32 14, i32 7> | %3 = shufflevector <8 x float> %1, <8 x float> %2, <8 x i32> <i32 0, i32 1, i32 10, i32 3, i32 12, i32 13, i32 14, i32 7> | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
define <4 x double> @test_blendvpd(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) { | define <4 x double> @test_blendvpd(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) { | ||||
; GENERIC-LABEL: test_blendvpd: | ; GENERIC-LABEL: test_blendvpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; GENERIC-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; GENERIC-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; GENERIC-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_blendvpd: | ; SANDY-LABEL: test_blendvpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; SANDY-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; SANDY-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; SANDY-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_blendvpd: | ; HASWELL-LABEL: test_blendvpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ; HASWELL-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ||||
; HASWELL-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [6:2.00] | ; HASWELL-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [6:2.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_blendvpd: | ; BTVER2-LABEL: test_blendvpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; BTVER2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; BTVER2-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; BTVER2-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_blendvpd: | ; ZNVER1-LABEL: test_blendvpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vblendvpd %ymm2, (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) | %1 = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) | ||||
%2 = load <4 x double>, <4 x double> *%a3, align 32 | %2 = load <4 x double>, <4 x double> *%a3, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %1, <4 x double> %2, <4 x double> %a2) | %3 = call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %1, <4 x double> %2, <4 x double> %a2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_blendvps(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) { | define <8 x float> @test_blendvps(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) { | ||||
; GENERIC-LABEL: test_blendvps: | ; GENERIC-LABEL: test_blendvps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; GENERIC-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; GENERIC-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; GENERIC-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_blendvps: | ; SANDY-LABEL: test_blendvps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; SANDY-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; SANDY-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; SANDY-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_blendvps: | ; HASWELL-LABEL: test_blendvps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ; HASWELL-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ||||
; HASWELL-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [6:2.00] | ; HASWELL-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [6:2.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_blendvps: | ; BTVER2-LABEL: test_blendvps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ; BTVER2-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [2:1.00] | ||||
; BTVER2-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; BTVER2-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_blendvps: | ; ZNVER1-LABEL: test_blendvps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vblendvps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vblendvps %ymm2, (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) | %1 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) | ||||
%2 = load <8 x float>, <8 x float> *%a3, align 32 | %2 = load <8 x float>, <8 x float> *%a3, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %1, <8 x float> %2, <8 x float> %a2) | %3 = call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %1, <8 x float> %2, <8 x float> %a2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone | ||||
define <8 x float> @test_broadcastf128(<4 x float> *%a0) { | define <8 x float> @test_broadcastf128(<4 x float> *%a0) { | ||||
; GENERIC-LABEL: test_broadcastf128: | ; GENERIC-LABEL: test_broadcastf128: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [7:1.00] | ; GENERIC-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [7:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_broadcastf128: | ; SANDY-LABEL: test_broadcastf128: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [7:1.00] | ; SANDY-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [7:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_broadcastf128: | ; HASWELL-LABEL: test_broadcastf128: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [4:0.50] | ; HASWELL-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [4:0.50] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_broadcastf128: | ; BTVER2-LABEL: test_broadcastf128: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [6:1.00] | ; BTVER2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_broadcastf128: | ; ZNVER1-LABEL: test_broadcastf128: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [8:0.50] | ; ZNVER1-NEXT: vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1] sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load <4 x float>, <4 x float> *%a0, align 32 | %1 = load <4 x float>, <4 x float> *%a0, align 32 | ||||
%2 = shufflevector <4 x float> %1, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> | %2 = shufflevector <4 x float> %1, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> | ||||
ret <8 x float> %2 | ret <8 x float> %2 | ||||
} | } | ||||
define <4 x double> @test_broadcastsd_ymm(double *%a0) { | define <4 x double> @test_broadcastsd_ymm(double *%a0) { | ||||
; GENERIC-LABEL: test_broadcastsd_ymm: | ; GENERIC-LABEL: test_broadcastsd_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [7:0.50] | ; GENERIC-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [7:0.50] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_broadcastsd_ymm: | ; SANDY-LABEL: test_broadcastsd_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [7:0.50] | ; SANDY-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [7:0.50] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_broadcastsd_ymm: | ; HASWELL-LABEL: test_broadcastsd_ymm: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_broadcastsd_ymm: | ; BTVER2-LABEL: test_broadcastsd_ymm: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_broadcastsd_ymm: | ; ZNVER1-LABEL: test_broadcastsd_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vbroadcastsd (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load double, double *%a0, align 8 | %1 = load double, double *%a0, align 8 | ||||
%2 = insertelement <4 x double> undef, double %1, i32 0 | %2 = insertelement <4 x double> undef, double %1, i32 0 | ||||
%3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> zeroinitializer | %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> zeroinitializer | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
define <4 x float> @test_broadcastss(float *%a0) { | define <4 x float> @test_broadcastss(float *%a0) { | ||||
; GENERIC-LABEL: test_broadcastss: | ; GENERIC-LABEL: test_broadcastss: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [6:0.50] | ; GENERIC-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [6:0.50] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_broadcastss: | ; SANDY-LABEL: test_broadcastss: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [6:0.50] | ; SANDY-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [6:0.50] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_broadcastss: | ; HASWELL-LABEL: test_broadcastss: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [4:0.50] | ; HASWELL-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [4:0.50] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_broadcastss: | ; BTVER2-LABEL: test_broadcastss: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [5:1.00] | ; BTVER2-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_broadcastss: | ; ZNVER1-LABEL: test_broadcastss: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vbroadcastss (%rdi), %xmm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load float, float *%a0, align 4 | %1 = load float, float *%a0, align 4 | ||||
%2 = insertelement <4 x float> undef, float %1, i32 0 | %2 = insertelement <4 x float> undef, float %1, i32 0 | ||||
%3 = shufflevector <4 x float> %2, <4 x float> undef, <4 x i32> zeroinitializer | %3 = shufflevector <4 x float> %2, <4 x float> undef, <4 x i32> zeroinitializer | ||||
ret <4 x float> %3 | ret <4 x float> %3 | ||||
} | } | ||||
define <8 x float> @test_broadcastss_ymm(float *%a0) { | define <8 x float> @test_broadcastss_ymm(float *%a0) { | ||||
; GENERIC-LABEL: test_broadcastss_ymm: | ; GENERIC-LABEL: test_broadcastss_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [7:0.50] | ; GENERIC-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [7:0.50] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_broadcastss_ymm: | ; SANDY-LABEL: test_broadcastss_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [7:0.50] | ; SANDY-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [7:0.50] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_broadcastss_ymm: | ; HASWELL-LABEL: test_broadcastss_ymm: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_broadcastss_ymm: | ; BTVER2-LABEL: test_broadcastss_ymm: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_broadcastss_ymm: | ; ZNVER1-LABEL: test_broadcastss_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vbroadcastss (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load float, float *%a0, align 4 | %1 = load float, float *%a0, align 4 | ||||
%2 = insertelement <8 x float> undef, float %1, i32 0 | %2 = insertelement <8 x float> undef, float %1, i32 0 | ||||
%3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> zeroinitializer | %3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> zeroinitializer | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
define <4 x double> @test_cmppd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_cmppd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_cmppd: | ; GENERIC-LABEL: test_cmppd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; GENERIC-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; GENERIC-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; GENERIC-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; GENERIC-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_cmppd: | ; SANDY-LABEL: test_cmppd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; SANDY-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; SANDY-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; SANDY-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; SANDY-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cmppd: | ; HASWELL-LABEL: test_cmppd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; HASWELL-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; HASWELL-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; HASWELL-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cmppd: | ; BTVER2-LABEL: test_cmppd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; BTVER2-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cmppd: | ; ZNVER1-LABEL: test_cmppd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; ZNVER1-NEXT: vcmpeqpd %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vorpd %ymm0, %ymm1, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fcmp oeq <4 x double> %a0, %a1 | %1 = fcmp oeq <4 x double> %a0, %a1 | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = fcmp oeq <4 x double> %a0, %2 | %3 = fcmp oeq <4 x double> %a0, %2 | ||||
%4 = sext <4 x i1> %1 to <4 x i64> | %4 = sext <4 x i1> %1 to <4 x i64> | ||||
%5 = sext <4 x i1> %3 to <4 x i64> | %5 = sext <4 x i1> %3 to <4 x i64> | ||||
%6 = or <4 x i64> %4, %5 | %6 = or <4 x i64> %4, %5 | ||||
%7 = bitcast <4 x i64> %6 to <4 x double> | %7 = bitcast <4 x i64> %6 to <4 x double> | ||||
ret <4 x double> %7 | ret <4 x double> %7 | ||||
Show All 10 Lines | |||||
; SANDY-LABEL: test_cmpps: | ; SANDY-LABEL: test_cmpps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; SANDY-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; SANDY-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; SANDY-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; SANDY-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cmpps: | ; HASWELL-LABEL: test_cmpps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; HASWELL-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; HASWELL-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; HASWELL-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cmpps: | ; BTVER2-LABEL: test_cmpps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; BTVER2-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cmpps: | ; ZNVER1-LABEL: test_cmpps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ; ZNVER1-NEXT: vcmpeqps %ymm1, %ymm0, %ymm1 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vorps %ymm0, %ymm1, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fcmp oeq <8 x float> %a0, %a1 | %1 = fcmp oeq <8 x float> %a0, %a1 | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = fcmp oeq <8 x float> %a0, %2 | %3 = fcmp oeq <8 x float> %a0, %2 | ||||
%4 = sext <8 x i1> %1 to <8 x i32> | %4 = sext <8 x i1> %1 to <8 x i32> | ||||
%5 = sext <8 x i1> %3 to <8 x i32> | %5 = sext <8 x i1> %3 to <8 x i32> | ||||
%6 = or <8 x i32> %4, %5 | %6 = or <8 x i32> %4, %5 | ||||
%7 = bitcast <8 x i32> %6 to <8 x float> | %7 = bitcast <8 x i32> %6 to <8 x float> | ||||
ret <8 x float> %7 | ret <8 x float> %7 | ||||
Show All 9 Lines | |||||
; | ; | ||||
; SANDY-LABEL: test_cvtdq2pd: | ; SANDY-LABEL: test_cvtdq2pd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [4:1.00] | ; SANDY-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [4:1.00] | ||||
; SANDY-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [10:1.00] | ; SANDY-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [10:1.00] | ||||
; SANDY-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cvtdq2pd: | ; HASWELL-LABEL: test_cvtdq2pd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [6:1.00] | ; HASWELL-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [6:1.00] | ||||
; HASWELL-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [8:1.00] | ; HASWELL-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [8:1.00] | ||||
; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cvtdq2pd: | ; BTVER2-LABEL: test_cvtdq2pd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [8:1.00] | ; BTVER2-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cvtdq2pd: | ; ZNVER1-LABEL: test_cvtdq2pd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [12:1.00] | ; ZNVER1-NEXT: vcvtdq2pd (%rdi), %ymm1 # sched: [12:1.00] | ||||
; ZNVER1-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vcvtdq2pd %xmm0, %ymm0 # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = sitofp <4 x i32> %a0 to <4 x double> | %1 = sitofp <4 x i32> %a0 to <4 x double> | ||||
%2 = load <4 x i32>, <4 x i32> *%a1, align 16 | %2 = load <4 x i32>, <4 x i32> *%a1, align 16 | ||||
%3 = sitofp <4 x i32> %2 to <4 x double> | %3 = sitofp <4 x i32> %2 to <4 x double> | ||||
%4 = fadd <4 x double> %1, %3 | %4 = fadd <4 x double> %1, %3 | ||||
ret <4 x double> %4 | ret <4 x double> %4 | ||||
} | } | ||||
define <8 x float> @test_cvtdq2ps(<8 x i32> %a0, <8 x i32> *%a1) { | define <8 x float> @test_cvtdq2ps(<8 x i32> %a0, <8 x i32> *%a1) { | ||||
; GENERIC-LABEL: test_cvtdq2ps: | ; GENERIC-LABEL: test_cvtdq2ps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [10:1.00] | ; GENERIC-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [10:1.00] | ||||
; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_cvtdq2ps: | ; SANDY-LABEL: test_cvtdq2ps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50] | ; SANDY-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50] | ||||
; SANDY-NEXT: vinsertf128 $1, 16(%rdi), %ymm1, %ymm1 # sched: [7:0.50] | ; SANDY-NEXT: vinsertf128 $1, 16(%rdi), %ymm1, %ymm1 # sched: [7:0.50] | ||||
; SANDY-NEXT: vcvtdq2ps %ymm1, %ymm1 # sched: [3:1.00] | ; SANDY-NEXT: vcvtdq2ps %ymm1, %ymm1 # sched: [3:1.00] | ||||
; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cvtdq2ps: | ; HASWELL-LABEL: test_cvtdq2ps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [4:1.00] | ; HASWELL-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [4:1.00] | ||||
; HASWELL-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [8:1.00] | ; HASWELL-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [8:1.00] | ||||
; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cvtdq2ps: | ; BTVER2-LABEL: test_cvtdq2ps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [8:1.00] | ; BTVER2-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cvtdq2ps: | ; ZNVER1-LABEL: test_cvtdq2ps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [12:1.00] | ; ZNVER1-NEXT: vcvtdq2ps (%rdi), %ymm1 # sched: [12:1.00] | ||||
; ZNVER1-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vcvtdq2ps %ymm0, %ymm0 # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = sitofp <8 x i32> %a0 to <8 x float> | %1 = sitofp <8 x i32> %a0 to <8 x float> | ||||
%2 = load <8 x i32>, <8 x i32> *%a1, align 16 | %2 = load <8 x i32>, <8 x i32> *%a1, align 16 | ||||
%3 = sitofp <8 x i32> %2 to <8 x float> | %3 = sitofp <8 x i32> %2 to <8 x float> | ||||
%4 = fadd <8 x float> %1, %3 | %4 = fadd <8 x float> %1, %3 | ||||
ret <8 x float> %4 | ret <8 x float> %4 | ||||
} | } | ||||
define <8 x i32> @test_cvtpd2dq(<4 x double> %a0, <4 x double> *%a1) { | define <8 x i32> @test_cvtpd2dq(<4 x double> %a0, <4 x double> *%a1) { | ||||
; GENERIC-LABEL: test_cvtpd2dq: | ; GENERIC-LABEL: test_cvtpd2dq: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [4:1.00] | ; GENERIC-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [4:1.00] | ||||
; GENERIC-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [11:1.00] | ; GENERIC-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [11:1.00] | ||||
; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_cvtpd2dq: | ; SANDY-LABEL: test_cvtpd2dq: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [4:1.00] | ; SANDY-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [4:1.00] | ||||
; SANDY-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [11:1.00] | ; SANDY-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [11:1.00] | ||||
; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cvtpd2dq: | ; HASWELL-LABEL: test_cvtpd2dq: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [6:1.00] | ; HASWELL-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [6:1.00] | ||||
; HASWELL-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [10:1.00] | ; HASWELL-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [10:1.00] | ||||
; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cvtpd2dq: | ; BTVER2-LABEL: test_cvtpd2dq: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [8:1.00] | ; BTVER2-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [3:1.00] | ; BTVER2-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cvtpd2dq: | ; ZNVER1-LABEL: test_cvtpd2dq: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [12:1.00] | ; ZNVER1-NEXT: vcvttpd2dqy (%rdi), %xmm1 # sched: [12:1.00] | ||||
; ZNVER1-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vcvttpd2dq %ymm0, %xmm0 # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [2:0.67] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fptosi <4 x double> %a0 to <4 x i32> | %1 = fptosi <4 x double> %a0 to <4 x i32> | ||||
%2 = load <4 x double>, <4 x double> *%a1, align 32 | %2 = load <4 x double>, <4 x double> *%a1, align 32 | ||||
%3 = fptosi <4 x double> %2 to <4 x i32> | %3 = fptosi <4 x double> %2 to <4 x i32> | ||||
%4 = shufflevector <4 x i32> %1, <4 x i32> %3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> | %4 = shufflevector <4 x i32> %1, <4 x i32> %3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> | ||||
ret <8 x i32> %4 | ret <8 x i32> %4 | ||||
} | } | ||||
define <8 x float> @test_cvtpd2ps(<4 x double> %a0, <4 x double> *%a1) { | define <8 x float> @test_cvtpd2ps(<4 x double> %a0, <4 x double> *%a1) { | ||||
; GENERIC-LABEL: test_cvtpd2ps: | ; GENERIC-LABEL: test_cvtpd2ps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [4:1.00] | ; GENERIC-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [4:1.00] | ||||
; GENERIC-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [11:1.00] | ; GENERIC-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [11:1.00] | ||||
; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_cvtpd2ps: | ; SANDY-LABEL: test_cvtpd2ps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [4:1.00] | ; SANDY-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [4:1.00] | ||||
; SANDY-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [11:1.00] | ; SANDY-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [11:1.00] | ||||
; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cvtpd2ps: | ; HASWELL-LABEL: test_cvtpd2ps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [5:1.00] | ; HASWELL-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [9:1.00] | ; HASWELL-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [9:1.00] | ||||
; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cvtpd2ps: | ; BTVER2-LABEL: test_cvtpd2ps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [8:1.00] | ; BTVER2-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [3:1.00] | ; BTVER2-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cvtpd2ps: | ; ZNVER1-LABEL: test_cvtpd2ps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [12:1.00] | ; ZNVER1-NEXT: vcvtpd2psy (%rdi), %xmm1 # sched: [11:1.00] | ||||
; ZNVER1-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vcvtpd2ps %ymm0, %xmm0 # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 # sched: [2:0.67] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fptrunc <4 x double> %a0 to <4 x float> | %1 = fptrunc <4 x double> %a0 to <4 x float> | ||||
%2 = load <4 x double>, <4 x double> *%a1, align 32 | %2 = load <4 x double>, <4 x double> *%a1, align 32 | ||||
%3 = fptrunc <4 x double> %2 to <4 x float> | %3 = fptrunc <4 x double> %2 to <4 x float> | ||||
%4 = shufflevector <4 x float> %1, <4 x float> %3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> | %4 = shufflevector <4 x float> %1, <4 x float> %3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> | ||||
ret <8 x float> %4 | ret <8 x float> %4 | ||||
} | } | ||||
define <8 x i32> @test_cvtps2dq(<8 x float> %a0, <8 x float> *%a1) { | define <8 x i32> @test_cvtps2dq(<8 x float> %a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_cvtps2dq: | ; GENERIC-LABEL: test_cvtps2dq: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [10:1.00] | ; GENERIC-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [10:1.00] | ||||
; GENERIC-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_cvtps2dq: | ; SANDY-LABEL: test_cvtps2dq: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [10:1.00] | ; SANDY-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [10:1.00] | ||||
; SANDY-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_cvtps2dq: | ; HASWELL-LABEL: test_cvtps2dq: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [7:1.00] | ; HASWELL-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [7:1.00] | ||||
; HASWELL-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_cvtps2dq: | ; BTVER2-LABEL: test_cvtps2dq: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [8:1.00] | ; BTVER2-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [8:1.00] | ||||
; BTVER2-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_cvtps2dq: | ; ZNVER1-LABEL: test_cvtps2dq: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [12:1.00] | ; ZNVER1-NEXT: vcvttps2dq (%rdi), %ymm1 # sched: [12:1.00] | ||||
; ZNVER1-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vcvttps2dq %ymm0, %ymm0 # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fptosi <8 x float> %a0 to <8 x i32> | %1 = fptosi <8 x float> %a0 to <8 x i32> | ||||
%2 = load <8 x float>, <8 x float> *%a1, align 32 | %2 = load <8 x float>, <8 x float> *%a1, align 32 | ||||
%3 = fptosi <8 x float> %2 to <8 x i32> | %3 = fptosi <8 x float> %2 to <8 x i32> | ||||
%4 = or <8 x i32> %1, %3 | %4 = or <8 x i32> %1, %3 | ||||
ret <8 x i32> %4 | ret <8 x i32> %4 | ||||
} | } | ||||
define <4 x double> @test_divpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_divpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_divpd: | ; GENERIC-LABEL: test_divpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [45:2.00] | ; GENERIC-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [45:2.00] | ||||
; GENERIC-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [52:2.00] | ; GENERIC-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [52:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_divpd: | ; SANDY-LABEL: test_divpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [45:2.00] | ; SANDY-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [45:2.00] | ||||
; SANDY-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [52:2.00] | ; SANDY-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [52:2.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_divpd: | ; HASWELL-LABEL: test_divpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [27:2.00] | ; HASWELL-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [27:2.00] | ||||
; HASWELL-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [31:2.00] | ; HASWELL-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [31:2.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_divpd: | ; BTVER2-LABEL: test_divpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [38:38.00] | ; BTVER2-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [38:38.00] | ||||
; BTVER2-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [43:38.00] | ; BTVER2-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [43:38.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_divpd: | ; ZNVER1-LABEL: test_divpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [15:1.00] | ; ZNVER1-NEXT: vdivpd %ymm1, %ymm0, %ymm0 # sched: [15:15.00] | ||||
; ZNVER1-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [22:1.00] | ; ZNVER1-NEXT: vdivpd (%rdi), %ymm0, %ymm0 # sched: [22:22.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fdiv <4 x double> %a0, %a1 | %1 = fdiv <4 x double> %a0, %a1 | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = fdiv <4 x double> %1, %2 | %3 = fdiv <4 x double> %1, %2 | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
define <8 x float> @test_divps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_divps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_divps: | ; GENERIC-LABEL: test_divps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [29:2.00] | ; GENERIC-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [29:2.00] | ||||
; GENERIC-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [36:2.00] | ; GENERIC-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [36:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_divps: | ; SANDY-LABEL: test_divps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [29:2.00] | ; SANDY-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [29:2.00] | ||||
; SANDY-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [36:2.00] | ; SANDY-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [36:2.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_divps: | ; HASWELL-LABEL: test_divps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [19:2.00] | ; HASWELL-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [19:2.00] | ||||
; HASWELL-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [23:2.00] | ; HASWELL-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [23:2.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_divps: | ; BTVER2-LABEL: test_divps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [38:38.00] | ; BTVER2-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [38:38.00] | ||||
; BTVER2-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [43:38.00] | ; BTVER2-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [43:38.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_divps: | ; ZNVER1-LABEL: test_divps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [15:1.00] | ; ZNVER1-NEXT: vdivps %ymm1, %ymm0, %ymm0 # sched: [12:12.00] | ||||
; ZNVER1-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [22:1.00] | ; ZNVER1-NEXT: vdivps (%rdi), %ymm0, %ymm0 # sched: [19:19.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fdiv <8 x float> %a0, %a1 | %1 = fdiv <8 x float> %a0, %a1 | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = fdiv <8 x float> %1, %2 | %3 = fdiv <8 x float> %1, %2 | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
define <8 x float> @test_dpps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_dpps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_dpps: | ; GENERIC-LABEL: test_dpps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [12:2.00] | ; GENERIC-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [12:2.00] | ||||
; GENERIC-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; GENERIC-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_dpps: | ; SANDY-LABEL: test_dpps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [12:2.00] | ; SANDY-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [12:2.00] | ||||
; SANDY-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ; SANDY-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [7:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_dpps: | ; HASWELL-LABEL: test_dpps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [14:2.00] | ; HASWELL-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [14:2.00] | ||||
; HASWELL-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [18:2.00] | ; HASWELL-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [18:2.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_dpps: | ; BTVER2-LABEL: test_dpps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_dpps: | ; ZNVER1-LABEL: test_dpps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vdpps $7, %ymm1, %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vdpps $7, (%rdi), %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 7) | %1 = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %a0, <8 x float> %a1, i8 7) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %1, <8 x float> %2, i8 7) | %3 = call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %1, <8 x float> %2, i8 7) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone | declare <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float>, <8 x float>, i8) nounwind readnone | ||||
define <4 x float> @test_extractf128(<8 x float> %a0, <8 x float> %a1, <4 x float> *%a2) { | define <4 x float> @test_extractf128(<8 x float> %a0, <8 x float> %a1, <4 x float> *%a2) { | ||||
; GENERIC-LABEL: test_extractf128: | ; GENERIC-LABEL: test_extractf128: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:1.00] | ; GENERIC-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: vzeroupper | ; GENERIC-NEXT: vzeroupper | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_extractf128: | ; SANDY-LABEL: test_extractf128: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:1.00] | ; SANDY-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [5:1.00] | ; SANDY-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [5:1.00] | ||||
; SANDY-NEXT: vzeroupper | ; SANDY-NEXT: vzeroupper | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_extractf128: | ; HASWELL-LABEL: test_extractf128: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [3:1.00] | ; HASWELL-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [4:1.00] | ; HASWELL-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [4:1.00] | ||||
; HASWELL-NEXT: vzeroupper # sched: [1:?] | ; HASWELL-NEXT: vzeroupper # sched: [1:?] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_extractf128: | ; BTVER2-LABEL: test_extractf128: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:0.50] | ; BTVER2-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [1:1.00] | ; BTVER2-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_extractf128: | ; ZNVER1-LABEL: test_extractf128: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vextractf128 $1, %ymm0, %xmm0 # sched: [1:0.33] | ||||
; ZNVER1-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [1:0.50] | ; ZNVER1-NEXT: vextractf128 $1, %ymm1, (%rdi) # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vzeroupper | ; ZNVER1-NEXT: vzeroupper # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <8 x float> %a0, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> | %1 = shufflevector <8 x float> %a0, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> | ||||
%2 = shufflevector <8 x float> %a1, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> | %2 = shufflevector <8 x float> %a1, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> | ||||
store <4 x float> %2, <4 x float> *%a2 | store <4 x float> %2, <4 x float> *%a2 | ||||
ret <4 x float> %1 | ret <4 x float> %1 | ||||
} | } | ||||
define <4 x double> @test_haddpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_haddpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_haddpd: | ; GENERIC-LABEL: test_haddpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ; GENERIC-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ||||
; GENERIC-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ; GENERIC-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_haddpd: | ; SANDY-LABEL: test_haddpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ; SANDY-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ||||
Show All 9 Lines | |||||
; BTVER2-LABEL: test_haddpd: | ; BTVER2-LABEL: test_haddpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_haddpd: | ; ZNVER1-LABEL: test_haddpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vhaddpd %ymm1, %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vhaddpd (%rdi), %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %a0, <4 x double> %a1) | %1 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %a0, <4 x double> %a1) | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %1, <4 x double> %2) | %3 = call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %1, <4 x double> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_haddps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_haddps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_haddps: | ; GENERIC-LABEL: test_haddps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ; GENERIC-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ||||
; GENERIC-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ; GENERIC-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_haddps: | ; SANDY-LABEL: test_haddps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
Show All 10 Lines | |||||
; BTVER2-LABEL: test_haddps: | ; BTVER2-LABEL: test_haddps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_haddps: | ; ZNVER1-LABEL: test_haddps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vhaddps %ymm1, %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vhaddps (%rdi), %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %a0, <8 x float> %a1) | %1 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %a0, <8 x float> %a1) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %1, <8 x float> %2) | %3 = call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %1, <8 x float> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float>, <8 x float>) nounwind readnone | ||||
define <4 x double> @test_hsubpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_hsubpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_hsubpd: | ; GENERIC-LABEL: test_hsubpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ; GENERIC-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ||||
; GENERIC-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ; GENERIC-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_hsubpd: | ; SANDY-LABEL: test_hsubpd: | ||||
Show All 11 Lines | |||||
; BTVER2-LABEL: test_hsubpd: | ; BTVER2-LABEL: test_hsubpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_hsubpd: | ; ZNVER1-LABEL: test_hsubpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vhsubpd %ymm1, %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vhsubpd (%rdi), %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %a0, <4 x double> %a1) | %1 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %a0, <4 x double> %a1) | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %1, <4 x double> %2) | %3 = call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %1, <4 x double> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_hsubps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_hsubps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_hsubps: | ; GENERIC-LABEL: test_hsubps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ; GENERIC-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [5:2.00] | ||||
; GENERIC-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ; GENERIC-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [12:2.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
Show All 12 Lines | |||||
; BTVER2-LABEL: test_hsubps: | ; BTVER2-LABEL: test_hsubps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ; BTVER2-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [8:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_hsubps: | ; ZNVER1-LABEL: test_hsubps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vhsubps %ymm1, %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vhsubps (%rdi), %ymm0, %ymm0 # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %a0, <8 x float> %a1) | %1 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %a0, <8 x float> %a1) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %1, <8 x float> %2) | %3 = call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %1, <8 x float> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float>, <8 x float>) nounwind readnone | ||||
define <8 x float> @test_insertf128(<8 x float> %a0, <4 x float> %a1, <4 x float> *%a2) { | define <8 x float> @test_insertf128(<8 x float> %a0, <4 x float> %a1, <4 x float> *%a2) { | ||||
; GENERIC-LABEL: test_insertf128: | ; GENERIC-LABEL: test_insertf128: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:1.00] | ; GENERIC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [7:0.50] | ; GENERIC-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [7:0.50] | ||||
; GENERIC-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_insertf128: | ; SANDY-LABEL: test_insertf128: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:1.00] | ; SANDY-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:1.00] | ||||
Show All 12 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:0.50] | ; BTVER2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_insertf128: | ; ZNVER1-LABEL: test_insertf128: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [1:0.50] | ; ZNVER1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 # sched: [2:0.67] | ||||
; ZNVER1-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vinsertf128 $1, (%rdi), %ymm0, %ymm0 # sched: [9:0.67] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <4 x float> %a1, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef> | %1 = shufflevector <4 x float> %a1, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef> | ||||
%2 = shufflevector <8 x float> %a0, <8 x float> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> | %2 = shufflevector <8 x float> %a0, <8 x float> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> | ||||
%3 = load <4 x float>, <4 x float> *%a2, align 16 | %3 = load <4 x float>, <4 x float> *%a2, align 16 | ||||
%4 = shufflevector <4 x float> %3, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef> | %4 = shufflevector <4 x float> %3, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef> | ||||
%5 = shufflevector <8 x float> %a0, <8 x float> %4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> | %5 = shufflevector <8 x float> %a0, <8 x float> %4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> | ||||
%6 = fadd <8 x float> %2, %5 | %6 = fadd <8 x float> %2, %5 | ||||
ret <8 x float> %6 | ret <8 x float> %6 | ||||
} | } | ||||
Show All 16 Lines | |||||
; BTVER2-LABEL: test_lddqu: | ; BTVER2-LABEL: test_lddqu: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vlddqu (%rdi), %ymm0 # sched: [5:1.00] | ; BTVER2-NEXT: vlddqu (%rdi), %ymm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_lddqu: | ; ZNVER1-LABEL: test_lddqu: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vlddqu (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vlddqu (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <32 x i8> @llvm.x86.avx.ldu.dq.256(i8* %a0) | %1 = call <32 x i8> @llvm.x86.avx.ldu.dq.256(i8* %a0) | ||||
ret <32 x i8> %1 | ret <32 x i8> %1 | ||||
} | } | ||||
declare <32 x i8> @llvm.x86.avx.ldu.dq.256(i8*) nounwind readonly | declare <32 x i8> @llvm.x86.avx.ldu.dq.256(i8*) nounwind readonly | ||||
define <2 x double> @test_maskmovpd(i8* %a0, <2 x i64> %a1, <2 x double> %a2) { | define <2 x double> @test_maskmovpd(i8* %a0, <2 x i64> %a1, <2 x double> %a2) { | ||||
; GENERIC-LABEL: test_maskmovpd: | ; GENERIC-LABEL: test_maskmovpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 # sched: [8:1.00] | ; GENERIC-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 # sched: [8:1.00] | ||||
; GENERIC-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:1.00] | ; GENERIC-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_maskmovpd: | ; SANDY-LABEL: test_maskmovpd: | ||||
Show All 14 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 | ; BTVER2-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 | ||||
; BTVER2-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) | ; BTVER2-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) | ||||
; BTVER2-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:0.50] | ; BTVER2-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maskmovpd: | ; ZNVER1-LABEL: test_maskmovpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 | ; ZNVER1-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) | ; ZNVER1-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi) # sched: [4:0.50] | ||||
; ZNVER1-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vmovapd %xmm2, %xmm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <2 x double> @llvm.x86.avx.maskload.pd(i8* %a0, <2 x i64> %a1) | %1 = call <2 x double> @llvm.x86.avx.maskload.pd(i8* %a0, <2 x i64> %a1) | ||||
call void @llvm.x86.avx.maskstore.pd(i8* %a0, <2 x i64> %a1, <2 x double> %a2) | call void @llvm.x86.avx.maskstore.pd(i8* %a0, <2 x i64> %a1, <2 x double> %a2) | ||||
ret <2 x double> %1 | ret <2 x double> %1 | ||||
} | } | ||||
declare <2 x double> @llvm.x86.avx.maskload.pd(i8*, <2 x i64>) nounwind readonly | declare <2 x double> @llvm.x86.avx.maskload.pd(i8*, <2 x i64>) nounwind readonly | ||||
declare void @llvm.x86.avx.maskstore.pd(i8*, <2 x i64>, <2 x double>) nounwind | declare void @llvm.x86.avx.maskstore.pd(i8*, <2 x i64>, <2 x double>) nounwind | ||||
define <4 x double> @test_maskmovpd_ymm(i8* %a0, <4 x i64> %a1, <4 x double> %a2) { | define <4 x double> @test_maskmovpd_ymm(i8* %a0, <4 x i64> %a1, <4 x double> %a2) { | ||||
; GENERIC-LABEL: test_maskmovpd_ymm: | ; GENERIC-LABEL: test_maskmovpd_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 # sched: [9:1.00] | ; GENERIC-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 # sched: [9:1.00] | ||||
; GENERIC-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
Show All 15 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 | ; BTVER2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 | ||||
; BTVER2-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) | ; BTVER2-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) | ||||
; BTVER2-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maskmovpd_ymm: | ; ZNVER1-LABEL: test_maskmovpd_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 | ; ZNVER1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2 # sched: [8:1.00] | ||||
; ZNVER1-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) | ; ZNVER1-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vmovapd %ymm2, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.maskload.pd.256(i8* %a0, <4 x i64> %a1) | %1 = call <4 x double> @llvm.x86.avx.maskload.pd.256(i8* %a0, <4 x i64> %a1) | ||||
call void @llvm.x86.avx.maskstore.pd.256(i8* %a0, <4 x i64> %a1, <4 x double> %a2) | call void @llvm.x86.avx.maskstore.pd.256(i8* %a0, <4 x i64> %a1, <4 x double> %a2) | ||||
ret <4 x double> %1 | ret <4 x double> %1 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.maskload.pd.256(i8*, <4 x i64>) nounwind readonly | declare <4 x double> @llvm.x86.avx.maskload.pd.256(i8*, <4 x i64>) nounwind readonly | ||||
declare void @llvm.x86.avx.maskstore.pd.256(i8*, <4 x i64>, <4 x double>) nounwind | declare void @llvm.x86.avx.maskstore.pd.256(i8*, <4 x i64>, <4 x double>) nounwind | ||||
define <4 x float> @test_maskmovps(i8* %a0, <4 x i32> %a1, <4 x float> %a2) { | define <4 x float> @test_maskmovps(i8* %a0, <4 x i32> %a1, <4 x float> %a2) { | ||||
; GENERIC-LABEL: test_maskmovps: | ; GENERIC-LABEL: test_maskmovps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 # sched: [8:1.00] | ; GENERIC-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 # sched: [8:1.00] | ||||
; GENERIC-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:1.00] | ; GENERIC-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
Show All 16 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 | ; BTVER2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 | ||||
; BTVER2-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) | ; BTVER2-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) | ||||
; BTVER2-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:0.50] | ; BTVER2-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maskmovps: | ; ZNVER1-LABEL: test_maskmovps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 | ; ZNVER1-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) | ; ZNVER1-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi) # sched: [4:0.50] | ||||
; ZNVER1-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vmovaps %xmm2, %xmm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x float> @llvm.x86.avx.maskload.ps(i8* %a0, <4 x i32> %a1) | %1 = call <4 x float> @llvm.x86.avx.maskload.ps(i8* %a0, <4 x i32> %a1) | ||||
call void @llvm.x86.avx.maskstore.ps(i8* %a0, <4 x i32> %a1, <4 x float> %a2) | call void @llvm.x86.avx.maskstore.ps(i8* %a0, <4 x i32> %a1, <4 x float> %a2) | ||||
ret <4 x float> %1 | ret <4 x float> %1 | ||||
} | } | ||||
declare <4 x float> @llvm.x86.avx.maskload.ps(i8*, <4 x i32>) nounwind readonly | declare <4 x float> @llvm.x86.avx.maskload.ps(i8*, <4 x i32>) nounwind readonly | ||||
declare void @llvm.x86.avx.maskstore.ps(i8*, <4 x i32>, <4 x float>) nounwind | declare void @llvm.x86.avx.maskstore.ps(i8*, <4 x i32>, <4 x float>) nounwind | ||||
define <8 x float> @test_maskmovps_ymm(i8* %a0, <8 x i32> %a1, <8 x float> %a2) { | define <8 x float> @test_maskmovps_ymm(i8* %a0, <8 x i32> %a1, <8 x float> %a2) { | ||||
; GENERIC-LABEL: test_maskmovps_ymm: | ; GENERIC-LABEL: test_maskmovps_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 # sched: [9:1.00] | ; GENERIC-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 # sched: [9:1.00] | ||||
; GENERIC-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:1.00] | ||||
Show All 17 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 | ; BTVER2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 | ||||
; BTVER2-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) | ; BTVER2-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) | ||||
; BTVER2-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maskmovps_ymm: | ; ZNVER1-LABEL: test_maskmovps_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 | ; ZNVER1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 # sched: [8:1.00] | ||||
; ZNVER1-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) | ; ZNVER1-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi) # sched: [5:1.00] | ||||
; ZNVER1-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vmovaps %ymm2, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.maskload.ps.256(i8* %a0, <8 x i32> %a1) | %1 = call <8 x float> @llvm.x86.avx.maskload.ps.256(i8* %a0, <8 x i32> %a1) | ||||
call void @llvm.x86.avx.maskstore.ps.256(i8* %a0, <8 x i32> %a1, <8 x float> %a2) | call void @llvm.x86.avx.maskstore.ps.256(i8* %a0, <8 x i32> %a1, <8 x float> %a2) | ||||
ret <8 x float> %1 | ret <8 x float> %1 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.maskload.ps.256(i8*, <8 x i32>) nounwind readonly | declare <8 x float> @llvm.x86.avx.maskload.ps.256(i8*, <8 x i32>) nounwind readonly | ||||
declare void @llvm.x86.avx.maskstore.ps.256(i8*, <8 x i32>, <8 x float>) nounwind | declare void @llvm.x86.avx.maskstore.ps.256(i8*, <8 x i32>, <8 x float>) nounwind | ||||
define <4 x double> @test_maxpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_maxpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
Show All 18 Lines | |||||
; BTVER2-LABEL: test_maxpd: | ; BTVER2-LABEL: test_maxpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maxpd: | ; ZNVER1-LABEL: test_maxpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vmaxpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vmaxpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1) | %1 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %a0, <4 x double> %a1) | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %1, <4 x double> %2) | %3 = call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %1, <4 x double> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.max.pd.256(<4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.max.pd.256(<4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_maxps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_maxps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
Show All 17 Lines | |||||
; | ; | ||||
; BTVER2-LABEL: test_maxps: | ; BTVER2-LABEL: test_maxps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_maxps: | ; ZNVER1-LABEL: test_maxps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vmaxps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vmaxps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1) | %1 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %a0, <8 x float> %a1) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %1, <8 x float> %2) | %3 = call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %1, <8 x float> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.max.ps.256(<8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.max.ps.256(<8 x float>, <8 x float>) nounwind readnone | ||||
define <4 x double> @test_minpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_minpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
Show All 16 Lines | |||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_minpd: | ; BTVER2-LABEL: test_minpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_minpd: | ; ZNVER1-LABEL: test_minpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vminpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vminpd (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %a0, <4 x double> %a1) | %1 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %a0, <4 x double> %a1) | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %1, <4 x double> %2) | %3 = call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %1, <4 x double> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.min.pd.256(<4 x double>, <4 x double>) nounwind readnone | declare <4 x double> @llvm.x86.avx.min.pd.256(<4 x double>, <4 x double>) nounwind readnone | ||||
define <8 x float> @test_minps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_minps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
Show All 20 Lines | |||||
; BTVER2-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; BTVER2-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; BTVER2-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_minps: | ; ZNVER1-LABEL: test_minps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vminps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ; ZNVER1-NEXT: vminps (%rdi), %ymm0, %ymm0 # sched: [10:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1) | %1 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %a0, <8 x float> %a1) | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %1, <8 x float> %2) | %3 = call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %1, <8 x float> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.min.ps.256(<8 x float>, <8 x float>) nounwind readnone | declare <8 x float> @llvm.x86.avx.min.ps.256(<8 x float>, <8 x float>) nounwind readnone | ||||
define <4 x double> @test_movapd(<4 x double> *%a0, <4 x double> *%a1) { | define <4 x double> @test_movapd(<4 x double> *%a0, <4 x double> *%a1) { | ||||
Show All 23 Lines | |||||
; BTVER2-NEXT: vmovapd (%rdi), %ymm0 # sched: [5:1.00] | ; BTVER2-NEXT: vmovapd (%rdi), %ymm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movapd: | ; ZNVER1-LABEL: test_movapd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovapd (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vmovapd (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovapd %ymm0, (%rsi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load <4 x double>, <4 x double> *%a0, align 32 | %1 = load <4 x double>, <4 x double> *%a0, align 32 | ||||
%2 = fadd <4 x double> %1, %1 | %2 = fadd <4 x double> %1, %1 | ||||
store <4 x double> %2, <4 x double> *%a1, align 32 | store <4 x double> %2, <4 x double> *%a1, align 32 | ||||
ret <4 x double> %2 | ret <4 x double> %2 | ||||
} | } | ||||
define <8 x float> @test_movaps(<8 x float> *%a0, <8 x float> *%a1) { | define <8 x float> @test_movaps(<8 x float> *%a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_movaps: | ; GENERIC-LABEL: test_movaps: | ||||
Show All 21 Lines | |||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovaps (%rdi), %ymm0 # sched: [5:1.00] | ; BTVER2-NEXT: vmovaps (%rdi), %ymm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movaps: | ; ZNVER1-LABEL: test_movaps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovaps (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vmovaps (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovaps %ymm0, (%rsi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load <8 x float>, <8 x float> *%a0, align 32 | %1 = load <8 x float>, <8 x float> *%a0, align 32 | ||||
%2 = fadd <8 x float> %1, %1 | %2 = fadd <8 x float> %1, %1 | ||||
store <8 x float> %2, <8 x float> *%a1, align 32 | store <8 x float> %2, <8 x float> *%a1, align 32 | ||||
ret <8 x float> %2 | ret <8 x float> %2 | ||||
} | } | ||||
define <4 x double> @test_movddup(<4 x double> %a0, <4 x double> *%a1) { | define <4 x double> @test_movddup(<4 x double> %a0, <4 x double> *%a1) { | ||||
; GENERIC-LABEL: test_movddup: | ; GENERIC-LABEL: test_movddup: | ||||
Show All 13 Lines | |||||
; HASWELL-LABEL: test_movddup: | ; HASWELL-LABEL: test_movddup: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:1.00] | ; HASWELL-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:1.00] | ||||
; HASWELL-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [4:0.50] | ; HASWELL-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [4:0.50] | ||||
; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movddup: | ; BTVER2-LABEL: test_movddup: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [5:1.00] | ; BTVER2-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [5:1.00] | ||||
; BTVER2-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:0.50] | ; BTVER2-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movddup: | ; ZNVER1-LABEL: test_movddup: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [8:0.50] | ; ZNVER1-NEXT: vmovddup {{.*#+}} ymm1 = mem[0,0,2,2] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:0.50] | ; ZNVER1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> | %1 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> | ||||
%2 = load <4 x double>, <4 x double> *%a1, align 32 | %2 = load <4 x double>, <4 x double> *%a1, align 32 | ||||
%3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> | %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> | ||||
%4 = fadd <4 x double> %1, %3 | %4 = fadd <4 x double> %1, %3 | ||||
ret <4 x double> %4 | ret <4 x double> %4 | ||||
} | } | ||||
define i32 @test_movmskpd(<4 x double> %a0) { | define i32 @test_movmskpd(<4 x double> %a0) { | ||||
; GENERIC-LABEL: test_movmskpd: | ; GENERIC-LABEL: test_movmskpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ; GENERIC-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ||||
; GENERIC-NEXT: vzeroupper | ; GENERIC-NEXT: vzeroupper | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_movmskpd: | ; SANDY-LABEL: test_movmskpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ; SANDY-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ||||
; SANDY-NEXT: vzeroupper | ; SANDY-NEXT: vzeroupper | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_movmskpd: | ; HASWELL-LABEL: test_movmskpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ; HASWELL-NEXT: vmovmskpd %ymm0, %eax # sched: [2:1.00] | ||||
; HASWELL-NEXT: vzeroupper # sched: [1:?] | ; HASWELL-NEXT: vzeroupper # sched: [1:?] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movmskpd: | ; BTVER2-LABEL: test_movmskpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovmskpd %ymm0, %eax # sched: [1:0.50] | ; BTVER2-NEXT: vmovmskpd %ymm0, %eax # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movmskpd: | ; ZNVER1-LABEL: test_movmskpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovmskpd %ymm0, %eax # sched: [1:0.25] | ; ZNVER1-NEXT: vmovmskpd %ymm0, %eax # sched: [1:1.00] | ||||
; ZNVER1-NEXT: vzeroupper | ; ZNVER1-NEXT: vzeroupper # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) | %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
declare i32 @llvm.x86.avx.movmsk.pd.256(<4 x double>) nounwind readnone | declare i32 @llvm.x86.avx.movmsk.pd.256(<4 x double>) nounwind readnone | ||||
define i32 @test_movmskps(<8 x float> %a0) { | define i32 @test_movmskps(<8 x float> %a0) { | ||||
; GENERIC-LABEL: test_movmskps: | ; GENERIC-LABEL: test_movmskps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ; GENERIC-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ||||
; GENERIC-NEXT: vzeroupper | ; GENERIC-NEXT: vzeroupper | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_movmskps: | ; SANDY-LABEL: test_movmskps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ; SANDY-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ||||
; SANDY-NEXT: vzeroupper | ; SANDY-NEXT: vzeroupper | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_movmskps: | ; HASWELL-LABEL: test_movmskps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ; HASWELL-NEXT: vmovmskps %ymm0, %eax # sched: [2:1.00] | ||||
; HASWELL-NEXT: vzeroupper # sched: [1:?] | ; HASWELL-NEXT: vzeroupper # sched: [1:?] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movmskps: | ; BTVER2-LABEL: test_movmskps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovmskps %ymm0, %eax # sched: [1:0.50] | ; BTVER2-NEXT: vmovmskps %ymm0, %eax # sched: [1:0.50] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movmskps: | ; ZNVER1-LABEL: test_movmskps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovmskps %ymm0, %eax # sched: [1:0.25] | ; ZNVER1-NEXT: vmovmskps %ymm0, %eax # sched: [1:1.00] | ||||
; ZNVER1-NEXT: vzeroupper | ; ZNVER1-NEXT: vzeroupper # sched: [100:?] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) | %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
declare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>) nounwind readnone | declare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>) nounwind readnone | ||||
define <4 x double> @test_movntpd(<4 x double> %a0, <4 x double> *%a1) { | define <4 x double> @test_movntpd(<4 x double> %a0, <4 x double> *%a1) { | ||||
; GENERIC-LABEL: test_movntpd: | ; GENERIC-LABEL: test_movntpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: vmovntpd %ymm0, (%rdi) # sched: [5:1.00] | ; GENERIC-NEXT: vmovntpd %ymm0, (%rdi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_movntpd: | ; SANDY-LABEL: test_movntpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: vmovntpd %ymm0, (%rdi) # sched: [5:1.00] | ; SANDY-NEXT: vmovntpd %ymm0, (%rdi) # sched: [5:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_movntpd: | ; HASWELL-LABEL: test_movntpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] | ; HASWELL-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movntpd: | ; BTVER2-LABEL: test_movntpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movntpd: | ; ZNVER1-LABEL: test_movntpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovntpd %ymm0, (%rdi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fadd <4 x double> %a0, %a0 | %1 = fadd <4 x double> %a0, %a0 | ||||
store <4 x double> %1, <4 x double> *%a1, align 32, !nontemporal !0 | store <4 x double> %1, <4 x double> *%a1, align 32, !nontemporal !0 | ||||
ret <4 x double> %1 | ret <4 x double> %1 | ||||
} | } | ||||
define <8 x float> @test_movntps(<8 x float> %a0, <8 x float> *%a1) { | define <8 x float> @test_movntps(<8 x float> %a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_movntps: | ; GENERIC-LABEL: test_movntps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
Show All 9 Lines | |||||
; | ; | ||||
; HASWELL-LABEL: test_movntps: | ; HASWELL-LABEL: test_movntps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] | ; HASWELL-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movntps: | ; BTVER2-LABEL: test_movntps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movntps: | ; ZNVER1-LABEL: test_movntps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovntps %ymm0, (%rdi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fadd <8 x float> %a0, %a0 | %1 = fadd <8 x float> %a0, %a0 | ||||
store <8 x float> %1, <8 x float> *%a1, align 32, !nontemporal !0 | store <8 x float> %1, <8 x float> *%a1, align 32, !nontemporal !0 | ||||
ret <8 x float> %1 | ret <8 x float> %1 | ||||
} | } | ||||
define <8 x float> @test_movshdup(<8 x float> %a0, <8 x float> *%a1) { | define <8 x float> @test_movshdup(<8 x float> %a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_movshdup: | ; GENERIC-LABEL: test_movshdup: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
Show All 15 Lines | |||||
; HASWELL-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [4:0.50] | ; HASWELL-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [4:0.50] | ||||
; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movshdup: | ; BTVER2-LABEL: test_movshdup: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [5:1.00] | ; BTVER2-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [5:1.00] | ||||
; BTVER2-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] sched: [1:0.50] | ; BTVER2-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movshdup: | ; ZNVER1-LABEL: test_movshdup: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [8:0.50] | ; ZNVER1-NEXT: vmovshdup {{.*#+}} ymm1 = mem[1,1,3,3,5,5,7,7] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] sched: [1:0.50] | ; ZNVER1-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> | %1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> | ||||
%2 = load <8 x float>, <8 x float> *%a1, align 32 | %2 = load <8 x float>, <8 x float> *%a1, align 32 | ||||
%3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> | %3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> | ||||
%4 = fadd <8 x float> %1, %3 | %4 = fadd <8 x float> %1, %3 | ||||
ret <8 x float> %4 | ret <8 x float> %4 | ||||
} | } | ||||
define <8 x float> @test_movsldup(<8 x float> %a0, <8 x float> *%a1) { | define <8 x float> @test_movsldup(<8 x float> %a0, <8 x float> *%a1) { | ||||
Show All 18 Lines | |||||
; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movsldup: | ; BTVER2-LABEL: test_movsldup: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [5:1.00] | ; BTVER2-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [5:1.00] | ||||
; BTVER2-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] sched: [1:0.50] | ; BTVER2-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movsldup: | ; ZNVER1-LABEL: test_movsldup: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [8:0.50] | ; ZNVER1-NEXT: vmovsldup {{.*#+}} ymm1 = mem[0,0,2,2,4,4,6,6] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] sched: [1:0.50] | ; ZNVER1-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> | %1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> | ||||
%2 = load <8 x float>, <8 x float> *%a1, align 32 | %2 = load <8 x float>, <8 x float> *%a1, align 32 | ||||
%3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> | %3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> | ||||
%4 = fadd <8 x float> %1, %3 | %4 = fadd <8 x float> %1, %3 | ||||
ret <8 x float> %4 | ret <8 x float> %4 | ||||
} | } | ||||
define <4 x double> @test_movupd(<4 x double> *%a0, <4 x double> *%a1) { | define <4 x double> @test_movupd(<4 x double> *%a0, <4 x double> *%a1) { | ||||
Show All 18 Lines | |||||
; HASWELL-NEXT: vmovupd (%rdi), %ymm0 # sched: [4:0.50] | ; HASWELL-NEXT: vmovupd (%rdi), %ymm0 # sched: [4:0.50] | ||||
; HASWELL-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] | ; HASWELL-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movupd: | ; BTVER2-LABEL: test_movupd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovupd (%rdi), %ymm0 # sched: [5:1.00] | ; BTVER2-NEXT: vmovupd (%rdi), %ymm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movupd: | ; ZNVER1-LABEL: test_movupd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovupd (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vmovupd (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovupd %ymm0, (%rsi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load <4 x double>, <4 x double> *%a0, align 1 | %1 = load <4 x double>, <4 x double> *%a0, align 1 | ||||
%2 = fadd <4 x double> %1, %1 | %2 = fadd <4 x double> %1, %1 | ||||
store <4 x double> %2, <4 x double> *%a1, align 1 | store <4 x double> %2, <4 x double> *%a1, align 1 | ||||
ret <4 x double> %2 | ret <4 x double> %2 | ||||
} | } | ||||
define <8 x float> @test_movups(<8 x float> *%a0, <8 x float> *%a1) { | define <8 x float> @test_movups(<8 x float> *%a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_movups: | ; GENERIC-LABEL: test_movups: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmovups (%rdi), %ymm0 # sched: [7:0.50] | ; GENERIC-NEXT: vmovups (%rdi), %ymm0 # sched: [7:0.50] | ||||
; GENERIC-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: vmovups %ymm0, (%rsi) # sched: [5:1.00] | ; GENERIC-NEXT: vmovups %ymm0, (%rsi) # sched: [5:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_movups: | ; SANDY-LABEL: test_movups: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50] | ; SANDY-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50] | ||||
; SANDY-NEXT: vinsertf128 $1, 16(%rdi), %ymm0, %ymm0 # sched: [7:0.50] | ; SANDY-NEXT: vinsertf128 $1, 16(%rdi), %ymm0, %ymm0 # sched: [7:0.50] | ||||
; SANDY-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: vextractf128 $1, %ymm0, 16(%rsi) # sched: [5:1.00] | ; SANDY-NEXT: vextractf128 $1, %ymm0, 16(%rsi) # sched: [5:1.00] | ||||
; SANDY-NEXT: vmovups %xmm0, (%rsi) # sched: [5:1.00] | ; SANDY-NEXT: vmovups %xmm0, (%rsi) # sched: [5:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_movups: | ; HASWELL-LABEL: test_movups: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmovups (%rdi), %ymm0 # sched: [4:0.50] | ; HASWELL-NEXT: vmovups (%rdi), %ymm0 # sched: [4:0.50] | ||||
; HASWELL-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] | ; HASWELL-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_movups: | ; BTVER2-LABEL: test_movups: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmovups (%rdi), %ymm0 # sched: [5:1.00] | ; BTVER2-NEXT: vmovups (%rdi), %ymm0 # sched: [5:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] | ; BTVER2-NEXT: vmovups %ymm0, (%rsi) # sched: [1:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_movups: | ; ZNVER1-LABEL: test_movups: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmovups (%rdi), %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vmovups (%rdi), %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: vmovups %ymm0, (%rsi) # sched: [1:0.50] | ; ZNVER1-NEXT: vmovups %ymm0, (%rsi) # sched: [1:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = load <8 x float>, <8 x float> *%a0, align 1 | %1 = load <8 x float>, <8 x float> *%a0, align 1 | ||||
%2 = fadd <8 x float> %1, %1 | %2 = fadd <8 x float> %1, %1 | ||||
store <8 x float> %2, <8 x float> *%a1, align 1 | store <8 x float> %2, <8 x float> *%a1, align 1 | ||||
ret <8 x float> %2 | ret <8 x float> %2 | ||||
} | } | ||||
define <4 x double> @test_mulpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @test_mulpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: test_mulpd: | ; GENERIC-LABEL: test_mulpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; GENERIC-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; GENERIC-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_mulpd: | ; SANDY-LABEL: test_mulpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; SANDY-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; SANDY-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; SANDY-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_mulpd: | ; HASWELL-LABEL: test_mulpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; HASWELL-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_mulpd: | ; BTVER2-LABEL: test_mulpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [4:4.00] | ; BTVER2-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [4:4.00] | ||||
; BTVER2-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [9:4.00] | ; BTVER2-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [9:4.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_mulpd: | ; ZNVER1-LABEL: test_mulpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vmulpd %ymm1, %ymm0, %ymm0 # sched: [4:0.50] | ||||
; ZNVER1-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; ZNVER1-NEXT: vmulpd (%rdi), %ymm0, %ymm0 # sched: [11:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fmul <4 x double> %a0, %a1 | %1 = fmul <4 x double> %a0, %a1 | ||||
%2 = load <4 x double>, <4 x double> *%a2, align 32 | %2 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%3 = fmul <4 x double> %1, %2 | %3 = fmul <4 x double> %1, %2 | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
define <8 x float> @test_mulps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | define <8 x float> @test_mulps(<8 x float> %a0, <8 x float> %a1, <8 x float> *%a2) { | ||||
; GENERIC-LABEL: test_mulps: | ; GENERIC-LABEL: test_mulps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; GENERIC-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; GENERIC-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; GENERIC-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_mulps: | ; SANDY-LABEL: test_mulps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; SANDY-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; SANDY-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; SANDY-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_mulps: | ; HASWELL-LABEL: test_mulps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ; HASWELL-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [9:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_mulps: | ; BTVER2-LABEL: test_mulps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ; BTVER2-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [2:2.00] | ||||
; BTVER2-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [7:2.00] | ; BTVER2-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [7:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_mulps: | ; ZNVER1-LABEL: test_mulps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [5:1.00] | ; ZNVER1-NEXT: vmulps %ymm1, %ymm0, %ymm0 # sched: [4:0.50] | ||||
; ZNVER1-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [12:1.00] | ; ZNVER1-NEXT: vmulps (%rdi), %ymm0, %ymm0 # sched: [11:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = fmul <8 x float> %a0, %a1 | %1 = fmul <8 x float> %a0, %a1 | ||||
%2 = load <8 x float>, <8 x float> *%a2, align 32 | %2 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%3 = fmul <8 x float> %1, %2 | %3 = fmul <8 x float> %1, %2 | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
define <4 x double> @orpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | define <4 x double> @orpd(<4 x double> %a0, <4 x double> %a1, <4 x double> *%a2) { | ||||
; GENERIC-LABEL: orpd: | ; GENERIC-LABEL: orpd: | ||||
Show All 14 Lines | |||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: orpd: | ; BTVER2-LABEL: orpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: orpd: | ; ZNVER1-LABEL: orpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vorpd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vorpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <4 x double> %a0 to <4 x i64> | %1 = bitcast <4 x double> %a0 to <4 x i64> | ||||
%2 = bitcast <4 x double> %a1 to <4 x i64> | %2 = bitcast <4 x double> %a1 to <4 x i64> | ||||
%3 = or <4 x i64> %1, %2 | %3 = or <4 x i64> %1, %2 | ||||
%4 = load <4 x double>, <4 x double> *%a2, align 32 | %4 = load <4 x double>, <4 x double> *%a2, align 32 | ||||
%5 = bitcast <4 x double> %4 to <4 x i64> | %5 = bitcast <4 x double> %4 to <4 x i64> | ||||
%6 = or <4 x i64> %3, %5 | %6 = or <4 x i64> %3, %5 | ||||
%7 = bitcast <4 x i64> %6 to <4 x double> | %7 = bitcast <4 x i64> %6 to <4 x double> | ||||
%8 = fadd <4 x double> %a1, %7 | %8 = fadd <4 x double> %a1, %7 | ||||
Show All 18 Lines | |||||
; HASWELL-LABEL: test_orps: | ; HASWELL-LABEL: test_orps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_orps: | ; BTVER2-LABEL: test_orps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_orps: | ; ZNVER1-LABEL: test_orps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ; ZNVER1-NEXT: vorps %ymm1, %ymm0, %ymm0 # sched: [1:0.25] | ||||
; ZNVER1-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vorps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm0, %ymm1, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = bitcast <8 x float> %a0 to <4 x i64> | %1 = bitcast <8 x float> %a0 to <4 x i64> | ||||
%2 = bitcast <8 x float> %a1 to <4 x i64> | %2 = bitcast <8 x float> %a1 to <4 x i64> | ||||
%3 = or <4 x i64> %1, %2 | %3 = or <4 x i64> %1, %2 | ||||
%4 = load <8 x float>, <8 x float> *%a2, align 32 | %4 = load <8 x float>, <8 x float> *%a2, align 32 | ||||
%5 = bitcast <8 x float> %4 to <4 x i64> | %5 = bitcast <8 x float> %4 to <4 x i64> | ||||
%6 = or <4 x i64> %3, %5 | %6 = or <4 x i64> %3, %5 | ||||
%7 = bitcast <4 x i64> %6 to <8 x float> | %7 = bitcast <4 x i64> %6 to <8 x float> | ||||
%8 = fadd <8 x float> %a1, %7 | %8 = fadd <8 x float> %a1, %7 | ||||
Show All 13 Lines | |||||
; SANDY-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:1.00] | ; SANDY-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [7:1.00] | ; SANDY-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [7:1.00] | ||||
; SANDY-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilpd: | ; HASWELL-LABEL: test_permilpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:1.00] | ; HASWELL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [5:1.00] | ; HASWELL-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilpd: | ; BTVER2-LABEL: test_permilpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [6:1.00] | ; BTVER2-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [6:1.00] | ||||
; BTVER2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:0.50] | ; BTVER2-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; BTVER2-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilpd: | ; ZNVER1-LABEL: test_permilpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [8:0.50] | ; ZNVER1-NEXT: vpermilpd {{.*#+}} xmm1 = mem[1,0] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:0.50] | ; ZNVER1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 1, i32 0> | %1 = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> <i32 1, i32 0> | ||||
%2 = load <2 x double>, <2 x double> *%a1, align 16 | %2 = load <2 x double>, <2 x double> *%a1, align 16 | ||||
%3 = shufflevector <2 x double> %2, <2 x double> undef, <2 x i32> <i32 1, i32 0> | %3 = shufflevector <2 x double> %2, <2 x double> undef, <2 x i32> <i32 1, i32 0> | ||||
%4 = fadd <2 x double> %1, %3 | %4 = fadd <2 x double> %1, %3 | ||||
ret <2 x double> %4 | ret <2 x double> %4 | ||||
} | } | ||||
define <4 x double> @test_permilpd_ymm(<4 x double> %a0, <4 x double> *%a1) { | define <4 x double> @test_permilpd_ymm(<4 x double> %a0, <4 x double> *%a1) { | ||||
; GENERIC-LABEL: test_permilpd_ymm: | ; GENERIC-LABEL: test_permilpd_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ; GENERIC-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:1.00] | ; GENERIC-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:1.00] | ||||
; GENERIC-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilpd_ymm: | ; SANDY-LABEL: test_permilpd_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ; SANDY-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:1.00] | ; SANDY-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:1.00] | ||||
; SANDY-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilpd_ymm: | ; HASWELL-LABEL: test_permilpd_ymm: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ; HASWELL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [5:1.00] | ; HASWELL-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilpd_ymm: | ; BTVER2-LABEL: test_permilpd_ymm: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [6:1.00] | ; BTVER2-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [6:1.00] | ||||
; BTVER2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:0.50] | ; BTVER2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilpd_ymm: | ; ZNVER1-LABEL: test_permilpd_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:0.50] | ; ZNVER1-NEXT: vpermilpd {{.*#+}} ymm1 = mem[1,0,2,3] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:0.50] | ; ZNVER1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3> | %1 = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3> | ||||
%2 = load <4 x double>, <4 x double> *%a1, align 32 | %2 = load <4 x double>, <4 x double> *%a1, align 32 | ||||
%3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3> | %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3> | ||||
%4 = fadd <4 x double> %1, %3 | %4 = fadd <4 x double> %1, %3 | ||||
ret <4 x double> %4 | ret <4 x double> %4 | ||||
} | } | ||||
define <4 x float> @test_permilps(<4 x float> %a0, <4 x float> *%a1) { | define <4 x float> @test_permilps(<4 x float> %a0, <4 x float> *%a1) { | ||||
; GENERIC-LABEL: test_permilps: | ; GENERIC-LABEL: test_permilps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ; GENERIC-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00] | ; GENERIC-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00] | ||||
; GENERIC-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilps: | ; SANDY-LABEL: test_permilps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ; SANDY-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00] | ; SANDY-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00] | ||||
; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilps: | ; HASWELL-LABEL: test_permilps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ; HASWELL-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [5:1.00] | ; HASWELL-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilps: | ; BTVER2-LABEL: test_permilps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00] | ; BTVER2-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00] | ||||
; BTVER2-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:0.50] | ; BTVER2-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilps: | ; ZNVER1-LABEL: test_permilps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [8:0.50] | ; ZNVER1-NEXT: vpermilps {{.*#+}} xmm1 = mem[3,2,1,0] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:0.50] | ; ZNVER1-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[3,2,1,0] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> | %1 = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> | ||||
%2 = load <4 x float>, <4 x float> *%a1, align 16 | %2 = load <4 x float>, <4 x float> *%a1, align 16 | ||||
%3 = shufflevector <4 x float> %2, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> | %3 = shufflevector <4 x float> %2, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> | ||||
%4 = fadd <4 x float> %1, %3 | %4 = fadd <4 x float> %1, %3 | ||||
ret <4 x float> %4 | ret <4 x float> %4 | ||||
} | } | ||||
define <8 x float> @test_permilps_ymm(<8 x float> %a0, <8 x float> *%a1) { | define <8 x float> @test_permilps_ymm(<8 x float> %a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_permilps_ymm: | ; GENERIC-LABEL: test_permilps_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ; GENERIC-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:1.00] | ; GENERIC-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:1.00] | ||||
; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilps_ymm: | ; SANDY-LABEL: test_permilps_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ; SANDY-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:1.00] | ; SANDY-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:1.00] | ||||
; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilps_ymm: | ; HASWELL-LABEL: test_permilps_ymm: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ; HASWELL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [5:1.00] | ; HASWELL-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [5:1.00] | ||||
; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilps_ymm: | ; BTVER2-LABEL: test_permilps_ymm: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [6:1.00] | ; BTVER2-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [6:1.00] | ||||
; BTVER2-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:0.50] | ; BTVER2-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:0.50] | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilps_ymm: | ; ZNVER1-LABEL: test_permilps_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:0.50] | ; ZNVER1-NEXT: vpermilps {{.*#+}} ymm1 = mem[3,2,1,0,7,6,5,4] sched: [8:0.50] | ||||
; ZNVER1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:0.50] | ; ZNVER1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4] sched: [1:0.50] | ||||
; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; ZNVER1-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> | %1 = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> | ||||
%2 = load <8 x float>, <8 x float> *%a1, align 32 | %2 = load <8 x float>, <8 x float> *%a1, align 32 | ||||
%3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> | %3 = shufflevector <8 x float> %2, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> | ||||
%4 = fadd <8 x float> %1, %3 | %4 = fadd <8 x float> %1, %3 | ||||
ret <8 x float> %4 | ret <8 x float> %4 | ||||
} | } | ||||
define <2 x double> @test_permilvarpd(<2 x double> %a0, <2 x i64> %a1, <2 x i64> *%a2) { | define <2 x double> @test_permilvarpd(<2 x double> %a0, <2 x i64> %a1, <2 x i64> *%a2) { | ||||
; GENERIC-LABEL: test_permilvarpd: | ; GENERIC-LABEL: test_permilvarpd: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ; GENERIC-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ; GENERIC-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilvarpd: | ; SANDY-LABEL: test_permilvarpd: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ; SANDY-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ; SANDY-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilvarpd: | ; HASWELL-LABEL: test_permilvarpd: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ; HASWELL-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [5:1.00] | ; HASWELL-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilvarpd: | ; BTVER2-LABEL: test_permilvarpd: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ; BTVER2-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00] | ; BTVER2-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilvarpd: | ; ZNVER1-LABEL: test_permilvarpd: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vpermilpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vpermilpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1) | %1 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1) | ||||
%2 = load <2 x i64>, <2 x i64> *%a2, align 16 | %2 = load <2 x i64>, <2 x i64> *%a2, align 16 | ||||
%3 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %1, <2 x i64> %2) | %3 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %1, <2 x i64> %2) | ||||
ret <2 x double> %3 | ret <2 x double> %3 | ||||
} | } | ||||
declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwind readnone | declare <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double>, <2 x i64>) nounwind readnone | ||||
define <4 x double> @test_permilvarpd_ymm(<4 x double> %a0, <4 x i64> %a1, <4 x i64> *%a2) { | define <4 x double> @test_permilvarpd_ymm(<4 x double> %a0, <4 x i64> %a1, <4 x i64> *%a2) { | ||||
; GENERIC-LABEL: test_permilvarpd_ymm: | ; GENERIC-LABEL: test_permilvarpd_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; GENERIC-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilvarpd_ymm: | ; SANDY-LABEL: test_permilvarpd_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; SANDY-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
Show All 9 Lines | |||||
; BTVER2-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilvarpd_ymm: | ; ZNVER1-LABEL: test_permilvarpd_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1) | %1 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1) | ||||
%2 = load <4 x i64>, <4 x i64> *%a2, align 32 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 | ||||
%3 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %1, <4 x i64> %2) | %3 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %1, <4 x i64> %2) | ||||
ret <4 x double> %3 | ret <4 x double> %3 | ||||
} | } | ||||
declare <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double>, <4 x i64>) nounwind readnone | declare <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double>, <4 x i64>) nounwind readnone | ||||
define <4 x float> @test_permilvarps(<4 x float> %a0, <4 x i32> %a1, <4 x i32> *%a2) { | define <4 x float> @test_permilvarps(<4 x float> %a0, <4 x i32> %a1, <4 x i32> *%a2) { | ||||
; GENERIC-LABEL: test_permilvarps: | ; GENERIC-LABEL: test_permilvarps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ; GENERIC-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ; GENERIC-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilvarps: | ; SANDY-LABEL: test_permilvarps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ; SANDY-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ; SANDY-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [7:1.00] | ||||
Show All 10 Lines | |||||
; BTVER2-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ; BTVER2-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [6:1.00] | ; BTVER2-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilvarps: | ; ZNVER1-LABEL: test_permilvarps: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vpermilps %xmm1, %xmm0, %xmm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vpermilps (%rdi), %xmm0, %xmm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1) | %1 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1) | ||||
%2 = load <4 x i32>, <4 x i32> *%a2, align 16 | %2 = load <4 x i32>, <4 x i32> *%a2, align 16 | ||||
%3 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %1, <4 x i32> %2) | %3 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %1, <4 x i32> %2) | ||||
ret <4 x float> %3 | ret <4 x float> %3 | ||||
} | } | ||||
declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind readnone | declare <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float>, <4 x i32>) nounwind readnone | ||||
define <8 x float> @test_permilvarps_ymm(<8 x float> %a0, <8 x i32> %a1, <8 x i32> *%a2) { | define <8 x float> @test_permilvarps_ymm(<8 x float> %a0, <8 x i32> %a1, <8 x i32> *%a2) { | ||||
; GENERIC-LABEL: test_permilvarps_ymm: | ; GENERIC-LABEL: test_permilvarps_ymm: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; GENERIC-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; GENERIC-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; GENERIC-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_permilvarps_ymm: | ; SANDY-LABEL: test_permilvarps_ymm: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; SANDY-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; SANDY-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ; SANDY-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_permilvarps_ymm: | ; HASWELL-LABEL: test_permilvarps_ymm: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ; HASWELL-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:1.00] | ||||
; HASWELL-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ; HASWELL-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [5:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_permilvarps_ymm: | ; BTVER2-LABEL: test_permilvarps_ymm: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; BTVER2-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; BTVER2-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ; BTVER2-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [6:1.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
; | ; | ||||
; ZNVER1-LABEL: test_permilvarps_ymm: | ; ZNVER1-LABEL: test_permilvarps_ymm: | ||||
; ZNVER1: # BB#0: | ; ZNVER1: # BB#0: | ||||
; ZNVER1-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ; ZNVER1-NEXT: vpermilps %ymm1, %ymm0, %ymm0 # sched: [1:0.50] | ||||
; ZNVER1-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ; ZNVER1-NEXT: vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:0.50] | ||||
; ZNVER1-NEXT: retq # sched: [5:0.50] | ; ZNVER1-NEXT: retq # sched: [1:0.50] | ||||
%1 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1) | %1 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1) | ||||
%2 = load <8 x i32>, <8 x i32> *%a2, align 32 | %2 = load <8 x i32>, <8 x i32> *%a2, align 32 | ||||
%3 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> %2) | %3 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> %2) | ||||
ret <8 x float> %3 | ret <8 x float> %3 | ||||
} | } | ||||
declare <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float>, <8 x i32>) nounwind readnone | declare <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float>, <8 x i32>) nounwind readnone | ||||
define <8 x float> @test_rcpps(<8 x float> %a0, <8 x float> *%a1) { | define <8 x float> @test_rcpps(<8 x float> %a0, <8 x float> *%a1) { | ||||
; GENERIC-LABEL: test_rcpps: | ; GENERIC-LABEL: test_rcpps: | ||||
; GENERIC: # BB#0: | ; GENERIC: # BB#0: | ||||
; GENERIC-NEXT: vrcpps (%rdi), %ymm1 # sched: [14:2.00] | ; GENERIC-NEXT: vrcpps (%rdi), %ymm1 # sched: [14:2.00] | ||||
; GENERIC-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ; GENERIC-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ||||
; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; GENERIC-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; GENERIC-NEXT: retq # sched: [1:1.00] | ; GENERIC-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; SANDY-LABEL: test_rcpps: | ; SANDY-LABEL: test_rcpps: | ||||
; SANDY: # BB#0: | ; SANDY: # BB#0: | ||||
; SANDY-NEXT: vrcpps (%rdi), %ymm1 # sched: [14:2.00] | ; SANDY-NEXT: vrcpps (%rdi), %ymm1 # sched: [14:2.00] | ||||
; SANDY-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ; SANDY-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ||||
; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; SANDY-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; SANDY-NEXT: retq # sched: [1:1.00] | ; SANDY-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; HASWELL-LABEL: test_rcpps: | ; HASWELL-LABEL: test_rcpps: | ||||
; HASWELL: # BB#0: | ; HASWELL: # BB#0: | ||||
; HASWELL-NEXT: vrcpps (%rdi), %ymm1 # sched: [11:2.00] | ; HASWELL-NEXT: vrcpps (%rdi), %ymm1 # sched: [11:2.00] | ||||
; HASWELL-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ; HASWELL-NEXT: vrcpps %ymm0, %ymm0 # sched: [7:2.00] | ||||
; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ; HASWELL-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:1.00] | ||||
; HASWELL-NEXT: retq # sched: [1:1.00] | ; HASWELL-NEXT: retq # sched: [1:1.00] | ||||
; | ; | ||||
; BTVER2-LABEL: test_rcpps: | ; BTVER2-LABEL: test_rcpps: | ||||
; BTVER2: # BB#0: | ; BTVER2: # BB#0: | ||||
; BTVER2-NEXT: vrcpps (%rdi), %ymm1 # sched: [7:2.00] | ; BTVER2-NEXT: vrcpps (%rdi), %ymm1 # sched: [7:2.00] | ||||
; BTVER2-NEXT: vrcpps %ymm0, %ymm0 # sched: [2:2.00] | ; BTVER2-NEXT: vrcpps %ymm0, %ymm0 # sched: [2:2.00] | ||||
; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ; BTVER2-NEXT: vaddps %ymm1, %ymm0, %ymm0 # sched: [3:2.00] | ||||
; BTVER2-NEXT: retq # sched: [4:1.00] | ; BTVER2-NEXT: retq # sched: [4:1.00] | ||||
< |