Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/avx512bw-intrinsics-upgrade.ll
Show First 20 Lines • Show All 2,882 Lines • ▼ Show 20 Lines | |||||
; X64-NEXT: retq # encoding: [0xc3] | ; X64-NEXT: retq # encoding: [0xc3] | ||||
%res = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> %x3, i32 %x4) | %res = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> %x3, i32 %x4) | ||||
%res1 = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> zeroinitializer, i32 %x4) | %res1 = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> zeroinitializer, i32 %x4) | ||||
%res2 = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> %x3, i32 -1) | %res2 = call <32 x i16> @llvm.x86.avx512.mask.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2, <32 x i16> %x3, i32 -1) | ||||
%res3 = add <32 x i16> %res, %res1 | %res3 = add <32 x i16> %res, %res1 | ||||
%res4 = add <32 x i16> %res3, %res2 | %res4 = add <32 x i16> %res3, %res2 | ||||
ret <32 x i16> %res4 | ret <32 x i16> %res4 | ||||
} | } | ||||
define <32 x i16> @test_mask_adds_epu16_rr_512(<32 x i16> %a, <32 x i16> %b) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rr_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: vpaddusw %zmm1, %zmm0, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rr_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: vpaddusw %zmm1, %zmm0, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 -1) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_adds_epu16_rrk_512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rrk_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %edi, %k1 | |||||
; AVX512BW-NEXT: vpaddusw %zmm1, %zmm0, %zmm2 {%k1} | |||||
; AVX512BW-NEXT: vmovdqa64 %zmm2, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rrk_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpaddusw %zmm1, %zmm0, %zmm2 {%k1} | |||||
; AVX512F-32-NEXT: vmovdqa64 %zmm2, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_adds_epu16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rrkz_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %edi, %k1 | |||||
; AVX512BW-NEXT: vpaddusw %zmm1, %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rrkz_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpaddusw %zmm1, %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_adds_epu16_rm_512(<32 x i16> %a, <32 x i16>* %ptr_b) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rm_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: vpaddusw (%rdi), %zmm0, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rm_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: vpaddusw (%eax), %zmm0, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 -1) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_adds_epu16_rmk_512(<32 x i16> %a, <32 x i16>* %ptr_b, <32 x i16> %passThru, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rmk_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %esi, %k1 | |||||
; AVX512BW-NEXT: vpaddusw (%rdi), %zmm0, %zmm1 {%k1} | |||||
; AVX512BW-NEXT: vmovdqa64 %zmm1, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rmk_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpaddusw (%eax), %zmm0, %zmm1 {%k1} | |||||
; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_adds_epu16_rmkz_512(<32 x i16> %a, <32 x i16>* %ptr_b, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_adds_epu16_rmkz_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %esi, %k1 | |||||
; AVX512BW-NEXT: vpaddusw (%rdi), %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_adds_epu16_rmkz_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpaddusw (%eax), %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
declare <32 x i16> @llvm.x86.avx512.mask.paddus.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32) | |||||
define <32 x i16> @test_mask_subs_epu16_rr_512(<32 x i16> %a, <32 x i16> %b) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rr_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: vpsubusw %zmm1, %zmm0, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rr_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: vpsubusw %zmm1, %zmm0, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 -1) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_subs_epu16_rrk_512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rrk_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %edi, %k1 | |||||
; AVX512BW-NEXT: vpsubusw %zmm1, %zmm0, %zmm2 {%k1} | |||||
; AVX512BW-NEXT: vmovdqa64 %zmm2, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rrk_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpsubusw %zmm1, %zmm0, %zmm2 {%k1} | |||||
; AVX512F-32-NEXT: vmovdqa64 %zmm2, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_subs_epu16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rrkz_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %edi, %k1 | |||||
; AVX512BW-NEXT: vpsubusw %zmm1, %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rrkz_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpsubusw %zmm1, %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512F-32-NEXT: retl | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_subs_epu16_rm_512(<32 x i16> %a, <32 x i16>* %ptr_b) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rm_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: vpsubusw (%rdi), %zmm0, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rm_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: vpsubusw (%eax), %zmm0, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 -1) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_subs_epu16_rmk_512(<32 x i16> %a, <32 x i16>* %ptr_b, <32 x i16> %passThru, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rmk_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %esi, %k1 | |||||
; AVX512BW-NEXT: vpsubusw (%rdi), %zmm0, %zmm1 {%k1} | |||||
; AVX512BW-NEXT: vmovdqa64 %zmm1, %zmm0 | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rmk_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpsubusw (%eax), %zmm0, %zmm1 {%k1} | |||||
; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0 | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> %passThru, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
define <32 x i16> @test_mask_subs_epu16_rmkz_512(<32 x i16> %a, <32 x i16>* %ptr_b, i32 %mask) { | |||||
; AVX512BW-LABEL: test_mask_subs_epu16_rmkz_512: | |||||
; AVX512BW: ## %bb.0: | |||||
; AVX512BW-NEXT: kmovd %esi, %k1 | |||||
; AVX512BW-NEXT: vpsubusw (%rdi), %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512BW-NEXT: retq | |||||
; | |||||
; AVX512F-32-LABEL: test_mask_subs_epu16_rmkz_512: | |||||
; AVX512F-32: # %bb.0: | |||||
; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax | |||||
; AVX512F-32-NEXT: kmovd {{[0-9]+}}(%esp), %k1 | |||||
; AVX512F-32-NEXT: vpsubusw (%eax), %zmm0, %zmm0 {%k1} {z} | |||||
; AVX512F-32-NEXT: retl | |||||
%b = load <32 x i16>, <32 x i16>* %ptr_b | |||||
%res = call <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16> %a, <32 x i16> %b, <32 x i16> zeroinitializer, i32 %mask) | |||||
ret <32 x i16> %res | |||||
} | |||||
declare <32 x i16> @llvm.x86.avx512.mask.psubus.w.512(<32 x i16>, <32 x i16>, <32 x i16>, i32) |