brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 5319359 Raw
162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512dq-builtins.c6 7define zeroext i8 @test_mm512_mask_fpclass_pd_mask(i8 zeroext %__U, <8 x double> %__A) {8; X86-LABEL: test_mm512_mask_fpclass_pd_mask:9; X86:       # %bb.0: # %entry10; X86-NEXT:    vfpclasspd $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)11; X86-NEXT:    kmovw %k0, %eax12; X86-NEXT:    andb {{[0-9]+}}(%esp), %al13; X86-NEXT:    # kill: def $al killed $al killed $eax14; X86-NEXT:    vzeroupper15; X86-NEXT:    retl16;17; X64-LABEL: test_mm512_mask_fpclass_pd_mask:18; X64:       # %bb.0: # %entry19; X64-NEXT:    vfpclasspd $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)20; X64-NEXT:    kmovw %k0, %eax21; X64-NEXT:    andb %dil, %al22; X64-NEXT:    # kill: def $al killed $al killed $eax23; X64-NEXT:    vzeroupper24; X64-NEXT:    retq25entry:26  %0 = tail call <8 x i1> @llvm.x86.avx512.fpclass.pd.512(<8 x double> %__A, i32 4)27  %1 = bitcast i8 %__U to <8 x i1>28  %2 = and <8 x i1> %0, %129  %3 = bitcast <8 x i1> %2 to i830  ret i8 %331}32 33declare <8 x i1> @llvm.x86.avx512.fpclass.pd.512(<8 x double>, i32)34 35define zeroext i8 @test_mm512_fpclass_pd_mask(<8 x double> %__A) {36; CHECK-LABEL: test_mm512_fpclass_pd_mask:37; CHECK:       # %bb.0: # %entry38; CHECK-NEXT:    vfpclasspd $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)39; CHECK-NEXT:    kmovw %k0, %eax40; CHECK-NEXT:    # kill: def $al killed $al killed $eax41; CHECK-NEXT:    vzeroupper42; CHECK-NEXT:    ret{{[l|q]}}43entry:44  %0 = tail call <8 x i1> @llvm.x86.avx512.fpclass.pd.512(<8 x double> %__A, i32 4)45  %1 = bitcast <8 x i1> %0 to i846  ret i8 %147}48 49define zeroext i16 @test_mm512_mask_fpclass_ps_mask(i16 zeroext %__U, <16 x float> %__A) {50; X86-LABEL: test_mm512_mask_fpclass_ps_mask:51; X86:       # %bb.0: # %entry52; X86-NEXT:    vfpclassps $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)53; X86-NEXT:    kmovw %k0, %eax54; X86-NEXT:    andw {{[0-9]+}}(%esp), %ax55; X86-NEXT:    # kill: def $ax killed $ax killed $eax56; X86-NEXT:    vzeroupper57; X86-NEXT:    retl58;59; X64-LABEL: test_mm512_mask_fpclass_ps_mask:60; X64:       # %bb.0: # %entry61; X64-NEXT:    vfpclassps $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)62; X64-NEXT:    kmovw %k0, %eax63; X64-NEXT:    andl %edi, %eax64; X64-NEXT:    # kill: def $ax killed $ax killed $eax65; X64-NEXT:    vzeroupper66; X64-NEXT:    retq67entry:68  %0 = tail call <16 x i1> @llvm.x86.avx512.fpclass.ps.512(<16 x float> %__A, i32 4)69  %1 = bitcast i16 %__U to <16 x i1>70  %2 = and <16 x i1> %0, %171  %3 = bitcast <16 x i1> %2 to i1672  ret i16 %373}74 75declare <16 x i1> @llvm.x86.avx512.fpclass.ps.512(<16 x float>, i32)76 77define zeroext i16 @test_mm512_fpclass_ps_mask(<16 x float> %__A) {78; CHECK-LABEL: test_mm512_fpclass_ps_mask:79; CHECK:       # %bb.0: # %entry80; CHECK-NEXT:    vfpclassps $4, %zmm0, %k0 # k0 = isNegativeZero(zmm0)81; CHECK-NEXT:    kmovw %k0, %eax82; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax83; CHECK-NEXT:    vzeroupper84; CHECK-NEXT:    ret{{[l|q]}}85entry:86  %0 = tail call <16 x i1> @llvm.x86.avx512.fpclass.ps.512(<16 x float> %__A, i32 4)87  %1 = bitcast <16 x i1> %0 to i1688  ret i16 %189}90 91define zeroext i8 @test_mm_fpclass_sd_mask(<4 x float> %__A) {92; CHECK-LABEL: test_mm_fpclass_sd_mask:93; CHECK:       # %bb.0: # %entry94; CHECK-NEXT:    vfpclasssd $2, %xmm0, %k0 # k0 = isPositiveZero(xmm0)95; CHECK-NEXT:    kmovw %k0, %eax96; CHECK-NEXT:    # kill: def $al killed $al killed $eax97; CHECK-NEXT:    ret{{[l|q]}}98entry:99  %0 = bitcast <4 x float> %__A to <2 x double>100  %1 = tail call i8 @llvm.x86.avx512.mask.fpclass.sd(<2 x double> %0, i32 2, i8 -1)101  ret i8 %1102}103 104declare i8 @llvm.x86.avx512.mask.fpclass.sd(<2 x double>, i32, i8)105 106define zeroext i8 @test_mm_mask_fpclass_sd_mask(i8 zeroext %__U, <4 x float> %__A) {107; X86-LABEL: test_mm_mask_fpclass_sd_mask:108; X86:       # %bb.0: # %entry109; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1110; X86-NEXT:    vfpclasssd $2, %xmm0, %k0 {%k1} # k0 {%k1} = isPositiveZero(xmm0)111; X86-NEXT:    kmovw %k0, %eax112; X86-NEXT:    # kill: def $al killed $al killed $eax113; X86-NEXT:    retl114;115; X64-LABEL: test_mm_mask_fpclass_sd_mask:116; X64:       # %bb.0: # %entry117; X64-NEXT:    kmovw %edi, %k1118; X64-NEXT:    vfpclasssd $2, %xmm0, %k0 {%k1} # k0 {%k1} = isPositiveZero(xmm0)119; X64-NEXT:    kmovw %k0, %eax120; X64-NEXT:    # kill: def $al killed $al killed $eax121; X64-NEXT:    retq122entry:123  %0 = bitcast <4 x float> %__A to <2 x double>124  %1 = tail call i8 @llvm.x86.avx512.mask.fpclass.sd(<2 x double> %0, i32 2, i8 %__U)125  ret i8 %1126}127 128define zeroext i8 @test_mm_fpclass_ss_mask(<4 x float> %__A) {129; CHECK-LABEL: test_mm_fpclass_ss_mask:130; CHECK:       # %bb.0: # %entry131; CHECK-NEXT:    vfpclassss $2, %xmm0, %k0 # k0 = isPositiveZero(xmm0)132; CHECK-NEXT:    kmovw %k0, %eax133; CHECK-NEXT:    # kill: def $al killed $al killed $eax134; CHECK-NEXT:    ret{{[l|q]}}135entry:136  %0 = tail call i8 @llvm.x86.avx512.mask.fpclass.ss(<4 x float> %__A, i32 2, i8 -1)137  ret i8 %0138}139 140declare i8 @llvm.x86.avx512.mask.fpclass.ss(<4 x float>, i32, i8)141 142define zeroext i8 @test_mm_mask_fpclass_ss_mask(i8 zeroext %__U, <4 x float> %__A) {143; X86-LABEL: test_mm_mask_fpclass_ss_mask:144; X86:       # %bb.0: # %entry145; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k1146; X86-NEXT:    vfpclassss $2, %xmm0, %k0 {%k1} # k0 {%k1} = isPositiveZero(xmm0)147; X86-NEXT:    kmovw %k0, %eax148; X86-NEXT:    # kill: def $al killed $al killed $eax149; X86-NEXT:    retl150;151; X64-LABEL: test_mm_mask_fpclass_ss_mask:152; X64:       # %bb.0: # %entry153; X64-NEXT:    kmovw %edi, %k1154; X64-NEXT:    vfpclassss $2, %xmm0, %k0 {%k1} # k0 {%k1} = isPositiveZero(xmm0)155; X64-NEXT:    kmovw %k0, %eax156; X64-NEXT:    # kill: def $al killed $al killed $eax157; X64-NEXT:    retq158entry:159  %0 = tail call i8 @llvm.x86.avx512.mask.fpclass.ss(<4 x float> %__A, i32 2, i8 %__U)160  ret i8 %0161}162