brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · ef22e6d Raw
233 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=CHECK --check-prefix=X643; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=CHECK --check-prefix=X864 5; Function Attrs: norecurse nounwind readnone6define zeroext i8 @TEST_mm512_test_epi64_mask(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {7; CHECK-LABEL: TEST_mm512_test_epi64_mask:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    vptestmq %zmm0, %zmm1, %k010; CHECK-NEXT:    kmovw %k0, %eax11; CHECK-NEXT:    # kill: def $al killed $al killed $eax12; CHECK-NEXT:    vzeroupper13; CHECK-NEXT:    ret{{[l|q]}}14entry:15  %and.i.i = and <8 x i64> %__B, %__A16  %0 = icmp ne <8 x i64> %and.i.i, zeroinitializer17  %1 = bitcast <8 x i1> %0 to i818  ret i8 %119}20 21; Similar to the above, but the compare is reversed to have the zeros on the LHS22define zeroext i8 @TEST_mm512_test_epi64_mask_2(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {23; CHECK-LABEL: TEST_mm512_test_epi64_mask_2:24; CHECK:       # %bb.0: # %entry25; CHECK-NEXT:    vptestmq %zmm0, %zmm1, %k026; CHECK-NEXT:    kmovw %k0, %eax27; CHECK-NEXT:    # kill: def $al killed $al killed $eax28; CHECK-NEXT:    vzeroupper29; CHECK-NEXT:    ret{{[l|q]}}30entry:31  %and.i.i = and <8 x i64> %__B, %__A32  %0 = icmp ne <8 x i64> zeroinitializer, %and.i.i33  %1 = bitcast <8 x i1> %0 to i834  ret i8 %135}36 37; Function Attrs: norecurse nounwind readnone38define zeroext i16 @TEST_mm512_test_epi32_mask(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {39; CHECK-LABEL: TEST_mm512_test_epi32_mask:40; CHECK:       # %bb.0: # %entry41; CHECK-NEXT:    vptestmd %zmm0, %zmm1, %k042; CHECK-NEXT:    kmovw %k0, %eax43; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax44; CHECK-NEXT:    vzeroupper45; CHECK-NEXT:    ret{{[l|q]}}46entry:47  %and.i.i = and <8 x i64> %__B, %__A48  %0 = bitcast <8 x i64> %and.i.i to <16 x i32>49  %1 = icmp ne <16 x i32> %0, zeroinitializer50  %2 = bitcast <16 x i1> %1 to i1651  ret i16 %252}53 54; Function Attrs: norecurse nounwind readnone55define zeroext i8 @TEST_mm512_mask_test_epi64_mask(i8 %__U, <8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {56; X64-LABEL: TEST_mm512_mask_test_epi64_mask:57; X64:       # %bb.0: # %entry58; X64-NEXT:    vptestmq %zmm0, %zmm1, %k059; X64-NEXT:    kmovw %k0, %eax60; X64-NEXT:    andb %dil, %al61; X64-NEXT:    # kill: def $al killed $al killed $eax62; X64-NEXT:    vzeroupper63; X64-NEXT:    retq64;65; X86-LABEL: TEST_mm512_mask_test_epi64_mask:66; X86:       # %bb.0: # %entry67; X86-NEXT:    vptestmq %zmm0, %zmm1, %k068; X86-NEXT:    kmovw %k0, %eax69; X86-NEXT:    andb {{[0-9]+}}(%esp), %al70; X86-NEXT:    # kill: def $al killed $al killed $eax71; X86-NEXT:    vzeroupper72; X86-NEXT:    retl73entry:74  %and.i.i = and <8 x i64> %__B, %__A75  %0 = icmp ne <8 x i64> %and.i.i, zeroinitializer76  %1 = bitcast i8 %__U to <8 x i1>77  %2 = and <8 x i1> %0, %178  %3 = bitcast <8 x i1> %2 to i879  ret i8 %380}81 82; Function Attrs: norecurse nounwind readnone83define zeroext i16 @TEST_mm512_mask_test_epi32_mask(i16 %__U, <8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {84; X64-LABEL: TEST_mm512_mask_test_epi32_mask:85; X64:       # %bb.0: # %entry86; X64-NEXT:    vptestmd %zmm0, %zmm1, %k087; X64-NEXT:    kmovw %k0, %eax88; X64-NEXT:    andl %edi, %eax89; X64-NEXT:    # kill: def $ax killed $ax killed $eax90; X64-NEXT:    vzeroupper91; X64-NEXT:    retq92;93; X86-LABEL: TEST_mm512_mask_test_epi32_mask:94; X86:       # %bb.0: # %entry95; X86-NEXT:    vptestmd %zmm0, %zmm1, %k096; X86-NEXT:    kmovw %k0, %eax97; X86-NEXT:    andw {{[0-9]+}}(%esp), %ax98; X86-NEXT:    # kill: def $ax killed $ax killed $eax99; X86-NEXT:    vzeroupper100; X86-NEXT:    retl101entry:102  %and.i.i = and <8 x i64> %__B, %__A103  %0 = bitcast <8 x i64> %and.i.i to <16 x i32>104  %1 = icmp ne <16 x i32> %0, zeroinitializer105  %2 = bitcast i16 %__U to <16 x i1>106  %3 = and <16 x i1> %1, %2107  %4 = bitcast <16 x i1> %3 to i16108  ret i16 %4109}110 111; Function Attrs: norecurse nounwind readnone112define zeroext i8 @TEST_mm512_testn_epi64_mask(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {113; CHECK-LABEL: TEST_mm512_testn_epi64_mask:114; CHECK:       # %bb.0: # %entry115; CHECK-NEXT:    vptestnmq %zmm0, %zmm1, %k0116; CHECK-NEXT:    kmovw %k0, %eax117; CHECK-NEXT:    # kill: def $al killed $al killed $eax118; CHECK-NEXT:    vzeroupper119; CHECK-NEXT:    ret{{[l|q]}}120entry:121  %and.i.i = and <8 x i64> %__B, %__A122  %0 = icmp eq <8 x i64> %and.i.i, zeroinitializer123  %1 = bitcast <8 x i1> %0 to i8124  ret i8 %1125}126 127; Similar to the above, but the compare is reversed to have the zeros on the LHS128define zeroext i8 @TEST_mm512_testn_epi64_mask_2(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {129; CHECK-LABEL: TEST_mm512_testn_epi64_mask_2:130; CHECK:       # %bb.0: # %entry131; CHECK-NEXT:    vptestnmq %zmm0, %zmm1, %k0132; CHECK-NEXT:    kmovw %k0, %eax133; CHECK-NEXT:    # kill: def $al killed $al killed $eax134; CHECK-NEXT:    vzeroupper135; CHECK-NEXT:    ret{{[l|q]}}136entry:137  %and.i.i = and <8 x i64> %__B, %__A138  %0 = icmp eq <8 x i64> zeroinitializer, %and.i.i139  %1 = bitcast <8 x i1> %0 to i8140  ret i8 %1141}142 143; Function Attrs: norecurse nounwind readnone144define zeroext i16 @TEST_mm512_testn_epi32_mask(<8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {145; CHECK-LABEL: TEST_mm512_testn_epi32_mask:146; CHECK:       # %bb.0: # %entry147; CHECK-NEXT:    vptestnmd %zmm0, %zmm1, %k0148; CHECK-NEXT:    kmovw %k0, %eax149; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax150; CHECK-NEXT:    vzeroupper151; CHECK-NEXT:    ret{{[l|q]}}152entry:153  %and.i.i = and <8 x i64> %__B, %__A154  %0 = bitcast <8 x i64> %and.i.i to <16 x i32>155  %1 = icmp eq <16 x i32> %0, zeroinitializer156  %2 = bitcast <16 x i1> %1 to i16157  ret i16 %2158}159 160; Function Attrs: norecurse nounwind readnone161define zeroext i8 @TEST_mm512_mask_testn_epi64_mask(i8 %__U, <8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {162; X64-LABEL: TEST_mm512_mask_testn_epi64_mask:163; X64:       # %bb.0: # %entry164; X64-NEXT:    vptestnmq %zmm0, %zmm1, %k0165; X64-NEXT:    kmovw %k0, %eax166; X64-NEXT:    andb %dil, %al167; X64-NEXT:    # kill: def $al killed $al killed $eax168; X64-NEXT:    vzeroupper169; X64-NEXT:    retq170;171; X86-LABEL: TEST_mm512_mask_testn_epi64_mask:172; X86:       # %bb.0: # %entry173; X86-NEXT:    vptestnmq %zmm0, %zmm1, %k0174; X86-NEXT:    kmovw %k0, %eax175; X86-NEXT:    andb {{[0-9]+}}(%esp), %al176; X86-NEXT:    # kill: def $al killed $al killed $eax177; X86-NEXT:    vzeroupper178; X86-NEXT:    retl179entry:180  %and.i.i = and <8 x i64> %__B, %__A181  %0 = icmp eq <8 x i64> %and.i.i, zeroinitializer182  %1 = bitcast i8 %__U to <8 x i1>183  %2 = and <8 x i1> %0, %1184  %3 = bitcast <8 x i1> %2 to i8185  ret i8 %3186}187 188; Function Attrs: norecurse nounwind readnone189define zeroext i16 @TEST_mm512_mask_testn_epi32_mask(i16 %__U, <8 x i64> %__A, <8 x i64> %__B) local_unnamed_addr #0 {190; X64-LABEL: TEST_mm512_mask_testn_epi32_mask:191; X64:       # %bb.0: # %entry192; X64-NEXT:    vptestnmd %zmm0, %zmm1, %k0193; X64-NEXT:    kmovw %k0, %eax194; X64-NEXT:    andl %edi, %eax195; X64-NEXT:    # kill: def $ax killed $ax killed $eax196; X64-NEXT:    vzeroupper197; X64-NEXT:    retq198;199; X86-LABEL: TEST_mm512_mask_testn_epi32_mask:200; X86:       # %bb.0: # %entry201; X86-NEXT:    vptestnmd %zmm0, %zmm1, %k0202; X86-NEXT:    kmovw %k0, %eax203; X86-NEXT:    andw {{[0-9]+}}(%esp), %ax204; X86-NEXT:    # kill: def $ax killed $ax killed $eax205; X86-NEXT:    vzeroupper206; X86-NEXT:    retl207entry:208  %and.i.i = and <8 x i64> %__B, %__A209  %0 = bitcast <8 x i64> %and.i.i to <16 x i32>210  %1 = icmp eq <16 x i32> %0, zeroinitializer211  %2 = bitcast i16 %__U to <16 x i1>212  %3 = and <16 x i1> %1, %2213  %4 = bitcast <16 x i1> %3 to i16214  ret i16 %4215}216 217define <2 x i64> @setcc_commute(<2 x i64> %a) {218; CHECK-LABEL: setcc_commute:219; CHECK:       # %bb.0:220; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0221; CHECK-NEXT:    vpxor %xmm1, %xmm1, %xmm1222; CHECK-NEXT:    vpsubq %xmm0, %xmm1, %xmm1223; CHECK-NEXT:    vptestmq %zmm0, %zmm0, %k1224; CHECK-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1}225; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0226; CHECK-NEXT:    vzeroupper227; CHECK-NEXT:    ret{{[l|q]}}228  %1 = sub <2 x i64> zeroinitializer, %a229  %2 = icmp eq <2 x i64> %a, zeroinitializer230  %3 = select <2 x i1> %2, <2 x i64> %a, <2 x i64> %1231  ret <2 x i64> %3232}233