192 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512cd | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512cd | FileCheck %s --check-prefixes=CHECK,X644 5declare <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32>, <16 x i32>, i16) nounwind readonly6 7define <16 x i32> @test_conflict_d(<16 x i32> %a) {8; CHECK-LABEL: test_conflict_d:9; CHECK: # %bb.0:10; CHECK-NEXT: vpconflictd %zmm0, %zmm011; CHECK-NEXT: ret{{[l|q]}}12 %res = call <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32> %a, <16 x i32> undef, i16 -1)13 ret <16 x i32> %res14}15 16define <16 x i32> @test_mask_conflict_d(<16 x i32> %a, <16 x i32> %b, i16 %mask) {17; X86-LABEL: test_mask_conflict_d:18; X86: # %bb.0:19; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k120; X86-NEXT: vpconflictd %zmm0, %zmm1 {%k1}21; X86-NEXT: vmovdqa64 %zmm1, %zmm022; X86-NEXT: retl23;24; X64-LABEL: test_mask_conflict_d:25; X64: # %bb.0:26; X64-NEXT: kmovw %edi, %k127; X64-NEXT: vpconflictd %zmm0, %zmm1 {%k1}28; X64-NEXT: vmovdqa64 %zmm1, %zmm029; X64-NEXT: retq30 %res = call <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32> %a, <16 x i32> %b, i16 %mask)31 ret <16 x i32> %res32}33 34define <16 x i32> @test_maskz_conflict_d(<16 x i32> %a, i16 %mask) {35; X86-LABEL: test_maskz_conflict_d:36; X86: # %bb.0:37; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k138; X86-NEXT: vpconflictd %zmm0, %zmm0 {%k1} {z}39; X86-NEXT: retl40;41; X64-LABEL: test_maskz_conflict_d:42; X64: # %bb.0:43; X64-NEXT: kmovw %edi, %k144; X64-NEXT: vpconflictd %zmm0, %zmm0 {%k1} {z}45; X64-NEXT: retq46 %res = call <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32> %a, <16 x i32> zeroinitializer, i16 %mask)47 ret <16 x i32> %res48}49 50declare <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64>, <8 x i64>, i8) nounwind readonly51 52define <8 x i64> @test_conflict_q(<8 x i64> %a) {53; CHECK-LABEL: test_conflict_q:54; CHECK: # %bb.0:55; CHECK-NEXT: vpconflictq %zmm0, %zmm056; CHECK-NEXT: ret{{[l|q]}}57 %res = call <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64> %a, <8 x i64> undef, i8 -1)58 ret <8 x i64> %res59}60 61define <8 x i64> @test_mask_conflict_q(<8 x i64> %a, <8 x i64> %b, i8 %mask) {62; X86-LABEL: test_mask_conflict_q:63; X86: # %bb.0:64; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax65; X86-NEXT: kmovw %eax, %k166; X86-NEXT: vpconflictq %zmm0, %zmm1 {%k1}67; X86-NEXT: vmovdqa64 %zmm1, %zmm068; X86-NEXT: retl69;70; X64-LABEL: test_mask_conflict_q:71; X64: # %bb.0:72; X64-NEXT: kmovw %edi, %k173; X64-NEXT: vpconflictq %zmm0, %zmm1 {%k1}74; X64-NEXT: vmovdqa64 %zmm1, %zmm075; X64-NEXT: retq76 %res = call <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64> %a, <8 x i64> %b, i8 %mask)77 ret <8 x i64> %res78}79 80define <8 x i64> @test_maskz_conflict_q(<8 x i64> %a, i8 %mask) {81; X86-LABEL: test_maskz_conflict_q:82; X86: # %bb.0:83; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax84; X86-NEXT: kmovw %eax, %k185; X86-NEXT: vpconflictq %zmm0, %zmm0 {%k1} {z}86; X86-NEXT: retl87;88; X64-LABEL: test_maskz_conflict_q:89; X64: # %bb.0:90; X64-NEXT: kmovw %edi, %k191; X64-NEXT: vpconflictq %zmm0, %zmm0 {%k1} {z}92; X64-NEXT: retq93 %res = call <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64> %a, <8 x i64> zeroinitializer, i8 %mask)94 ret <8 x i64> %res95}96 97define <16 x i32> @test_lzcnt_d(<16 x i32> %a) {98; CHECK-LABEL: test_lzcnt_d:99; CHECK: # %bb.0:100; CHECK-NEXT: vplzcntd %zmm0, %zmm0101; CHECK-NEXT: ret{{[l|q]}}102 %res = call <16 x i32> @llvm.x86.avx512.mask.lzcnt.d.512(<16 x i32> %a, <16 x i32> zeroinitializer, i16 -1)103 ret <16 x i32> %res104}105 106declare <16 x i32> @llvm.x86.avx512.mask.lzcnt.d.512(<16 x i32>, <16 x i32>, i16) nounwind readonly107 108define <8 x i64> @test_lzcnt_q(<8 x i64> %a) {109; CHECK-LABEL: test_lzcnt_q:110; CHECK: # %bb.0:111; CHECK-NEXT: vplzcntq %zmm0, %zmm0112; CHECK-NEXT: ret{{[l|q]}}113 %res = call <8 x i64> @llvm.x86.avx512.mask.lzcnt.q.512(<8 x i64> %a, <8 x i64> zeroinitializer, i8 -1)114 ret <8 x i64> %res115}116 117declare <8 x i64> @llvm.x86.avx512.mask.lzcnt.q.512(<8 x i64>, <8 x i64>, i8) nounwind readonly118 119 120define <16 x i32> @test_mask_lzcnt_d(<16 x i32> %a, <16 x i32> %b, i16 %mask) {121; X86-LABEL: test_mask_lzcnt_d:122; X86: # %bb.0:123; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1124; X86-NEXT: vplzcntd %zmm0, %zmm1 {%k1}125; X86-NEXT: vmovdqa64 %zmm1, %zmm0126; X86-NEXT: retl127;128; X64-LABEL: test_mask_lzcnt_d:129; X64: # %bb.0:130; X64-NEXT: kmovw %edi, %k1131; X64-NEXT: vplzcntd %zmm0, %zmm1 {%k1}132; X64-NEXT: vmovdqa64 %zmm1, %zmm0133; X64-NEXT: retq134 %res = call <16 x i32> @llvm.x86.avx512.mask.lzcnt.d.512(<16 x i32> %a, <16 x i32> %b, i16 %mask)135 ret <16 x i32> %res136}137 138define <8 x i64> @test_mask_lzcnt_q(<8 x i64> %a, <8 x i64> %b, i8 %mask) {139; X86-LABEL: test_mask_lzcnt_q:140; X86: # %bb.0:141; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax142; X86-NEXT: kmovw %eax, %k1143; X86-NEXT: vplzcntq %zmm0, %zmm1 {%k1}144; X86-NEXT: vmovdqa64 %zmm1, %zmm0145; X86-NEXT: retl146;147; X64-LABEL: test_mask_lzcnt_q:148; X64: # %bb.0:149; X64-NEXT: kmovw %edi, %k1150; X64-NEXT: vplzcntq %zmm0, %zmm1 {%k1}151; X64-NEXT: vmovdqa64 %zmm1, %zmm0152; X64-NEXT: retq153 %res = call <8 x i64> @llvm.x86.avx512.mask.lzcnt.q.512(<8 x i64> %a, <8 x i64> %b, i8 %mask)154 ret <8 x i64> %res155}156 157define <16 x i32> @test_x86_vbroadcastmw_512(i16 %a0) {158; X86-LABEL: test_x86_vbroadcastmw_512:159; X86: # %bb.0:160; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax161; X86-NEXT: vpbroadcastd %eax, %zmm0162; X86-NEXT: retl163;164; X64-LABEL: test_x86_vbroadcastmw_512:165; X64: # %bb.0:166; X64-NEXT: movzwl %di, %eax167; X64-NEXT: vpbroadcastd %eax, %zmm0168; X64-NEXT: retq169 %res = call <16 x i32> @llvm.x86.avx512.broadcastmw.512(i16 %a0)170 ret <16 x i32> %res171}172declare <16 x i32> @llvm.x86.avx512.broadcastmw.512(i16)173 174define <8 x i64> @test_x86_broadcastmb_512(i8 %a0) {175; X86-LABEL: test_x86_broadcastmb_512:176; X86: # %bb.0:177; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax178; X86-NEXT: vmovd %eax, %xmm0179; X86-NEXT: vpbroadcastq %xmm0, %zmm0180; X86-NEXT: retl181;182; X64-LABEL: test_x86_broadcastmb_512:183; X64: # %bb.0:184; X64-NEXT: movzbl %dil, %eax185; X64-NEXT: vpbroadcastq %rax, %zmm0186; X64-NEXT: retq187 %res = call <8 x i64> @llvm.x86.avx512.broadcastmb.512(i8 %a0)188 ret <8 x i64> %res189}190declare <8 x i64> @llvm.x86.avx512.broadcastmb.512(i8)191 192