brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · 4e9c0d9 Raw
262 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f          | FileCheck %s --check-prefixes=AVX512,AVX512F3; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL4 5define dso_local <8 x i64> @select_sub(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {6; AVX512-LABEL: select_sub:7; AVX512:       # %bb.0: # %entry8; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm39; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k110; AVX512-NEXT:    vpsubq %zmm2, %zmm1, %zmm0 {%k1}11; AVX512-NEXT:    retq12entry:13  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 114  %0 = load <8 x i64>, ptr %arrayidx, align 6415  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>16  %not = icmp ne <8 x i64> %and1, zeroinitializer17  %sub = sub <8 x i64> %a, %b18  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %sub19  ret <8 x i64> %120}21 22define dso_local <8 x i64> @select_add(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {23; AVX512-LABEL: select_add:24; AVX512:       # %bb.0: # %entry25; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm326; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k127; AVX512-NEXT:    vpaddq %zmm2, %zmm1, %zmm0 {%k1}28; AVX512-NEXT:    retq29entry:30  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 131  %0 = load <8 x i64>, ptr %arrayidx, align 6432  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>33  %not = icmp ne <8 x i64> %and1, zeroinitializer34  %add = add <8 x i64> %a, %b35  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %add36  ret <8 x i64> %137}38 39define dso_local <8 x i64> @select_and(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {40; AVX512-LABEL: select_and:41; AVX512:       # %bb.0: # %entry42; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm343; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k144; AVX512-NEXT:    vpandq %zmm2, %zmm1, %zmm0 {%k1}45; AVX512-NEXT:    retq46entry:47  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 148  %0 = load <8 x i64>, ptr %arrayidx, align 6449  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>50  %not = icmp ne <8 x i64> %and1, zeroinitializer51  %and = and <8 x i64> %a, %b52  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %and53  ret <8 x i64> %154}55 56define dso_local <8 x i64> @select_xor(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {57; AVX512-LABEL: select_xor:58; AVX512:       # %bb.0: # %entry59; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm360; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k161; AVX512-NEXT:    vpxorq %zmm2, %zmm1, %zmm0 {%k1}62; AVX512-NEXT:    retq63entry:64  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 165  %0 = load <8 x i64>, ptr %arrayidx, align 6466  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>67  %not = icmp ne <8 x i64> %and1, zeroinitializer68  %xor = xor <8 x i64> %a, %b69  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %xor70  ret <8 x i64> %171}72 73define dso_local <8 x i64> @select_shl(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {74; AVX512-LABEL: select_shl:75; AVX512:       # %bb.0: # %entry76; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm377; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k178; AVX512-NEXT:    vpsllvq %zmm2, %zmm1, %zmm0 {%k1}79; AVX512-NEXT:    retq80entry:81  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 182  %0 = load <8 x i64>, ptr %arrayidx, align 6483  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>84  %not = icmp ne <8 x i64> %and1, zeroinitializer85  %shl = shl <8 x i64> %a, %b86  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %shl87  ret <8 x i64> %188}89 90define dso_local <8 x i64> @select_srl(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {91; AVX512-LABEL: select_srl:92; AVX512:       # %bb.0: # %entry93; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm394; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k195; AVX512-NEXT:    vpsrlvq %zmm2, %zmm1, %zmm0 {%k1}96; AVX512-NEXT:    retq97entry:98  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 199  %0 = load <8 x i64>, ptr %arrayidx, align 64100  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>101  %not = icmp ne <8 x i64> %and1, zeroinitializer102  %srl = lshr <8 x i64> %a, %b103  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %srl104  ret <8 x i64> %1105}106 107define dso_local <8 x i64> @select_sra(<8 x i64> %src, <8 x i64> %a, <8 x i64> %b, ptr %ptr) {108; AVX512-LABEL: select_sra:109; AVX512:       # %bb.0: # %entry110; AVX512-NEXT:    vmovdqa64 64(%rdi), %zmm3111; AVX512-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm3, %k1112; AVX512-NEXT:    vpsravq %zmm2, %zmm1, %zmm0 {%k1}113; AVX512-NEXT:    retq114entry:115  %arrayidx = getelementptr inbounds <8 x i64>, ptr %ptr, i64 1116  %0 = load <8 x i64>, ptr %arrayidx, align 64117  %and1 = and <8 x i64> %0, <i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248, i64 2251799813685248>118  %not = icmp ne <8 x i64> %and1, zeroinitializer119  %sra = ashr <8 x i64> %a, %b120  %1 = select <8 x i1> %not, <8 x i64> %src, <8 x i64> %sra121  ret <8 x i64> %1122}123 124define dso_local <8 x i32> @select_mul(<8 x i32> %src, <8 x i32> %a, <8 x i32> %b, ptr %ptr) {125; AVX512F-LABEL: select_mul:126; AVX512F:       # %bb.0: # %entry127; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0128; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3129; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm3, %k1130; AVX512F-NEXT:    vpmulld %ymm2, %ymm1, %ymm1131; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}132; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0133; AVX512F-NEXT:    retq134;135; AVX512VL-LABEL: select_mul:136; AVX512VL:       # %bb.0: # %entry137; AVX512VL-NEXT:    vmovdqa 32(%rdi), %ymm3138; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm3, %k1139; AVX512VL-NEXT:    vpmulld %ymm2, %ymm1, %ymm0 {%k1}140; AVX512VL-NEXT:    retq141entry:142  %arrayidx = getelementptr inbounds <8 x i32>, ptr %ptr, i32 1143  %0 = load <8 x i32>, ptr %arrayidx, align 64144  %and1 = and <8 x i32> %0, <i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517>145  %not = icmp ne <8 x i32> %and1, zeroinitializer146  %mul = mul <8 x i32> %a, %b147  %1 = select <8 x i1> %not, <8 x i32> %src, <8 x i32> %mul148  ret <8 x i32> %1149}150 151define dso_local <8 x i32> @select_smax(<8 x i32> %src, <8 x i32> %a, <8 x i32> %b, ptr %ptr) {152; AVX512F-LABEL: select_smax:153; AVX512F:       # %bb.0: # %entry154; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0155; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3156; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm3, %k1157; AVX512F-NEXT:    vpmaxsd %ymm2, %ymm1, %ymm1158; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}159; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0160; AVX512F-NEXT:    retq161;162; AVX512VL-LABEL: select_smax:163; AVX512VL:       # %bb.0: # %entry164; AVX512VL-NEXT:    vmovdqa 32(%rdi), %ymm3165; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm3, %k1166; AVX512VL-NEXT:    vpmaxsd %ymm2, %ymm1, %ymm0 {%k1}167; AVX512VL-NEXT:    retq168entry:169  %arrayidx = getelementptr inbounds <8 x i32>, ptr %ptr, i32 1170  %0 = load <8 x i32>, ptr %arrayidx, align 64171  %and1 = and <8 x i32> %0, <i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517>172  %not = icmp ne <8 x i32> %and1, zeroinitializer173  %smax = call <8 x i32> @llvm.smax.v4i32(<8 x i32> %a, <8 x i32> %b)174  %1 = select <8 x i1> %not, <8 x i32> %src, <8 x i32> %smax175  ret <8 x i32> %1176}177declare <8 x i32> @llvm.smax.v4i32(<8 x i32> %a, <8 x i32> %b)178 179define dso_local <8 x i32> @select_smin(<8 x i32> %src, <8 x i32> %a, <8 x i32> %b, ptr %ptr) {180; AVX512F-LABEL: select_smin:181; AVX512F:       # %bb.0: # %entry182; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0183; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3184; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm3, %k1185; AVX512F-NEXT:    vpminsd %ymm2, %ymm1, %ymm1186; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}187; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0188; AVX512F-NEXT:    retq189;190; AVX512VL-LABEL: select_smin:191; AVX512VL:       # %bb.0: # %entry192; AVX512VL-NEXT:    vmovdqa 32(%rdi), %ymm3193; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm3, %k1194; AVX512VL-NEXT:    vpminsd %ymm2, %ymm1, %ymm0 {%k1}195; AVX512VL-NEXT:    retq196entry:197  %arrayidx = getelementptr inbounds <8 x i32>, ptr %ptr, i32 1198  %0 = load <8 x i32>, ptr %arrayidx, align 64199  %and1 = and <8 x i32> %0, <i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517>200  %not = icmp ne <8 x i32> %and1, zeroinitializer201  %smin = call <8 x i32> @llvm.smin.v4i32(<8 x i32> %a, <8 x i32> %b)202  %1 = select <8 x i1> %not, <8 x i32> %src, <8 x i32> %smin203  ret <8 x i32> %1204}205declare <8 x i32> @llvm.smin.v4i32(<8 x i32> %a, <8 x i32> %b)206 207define dso_local <8 x i32> @select_umax(<8 x i32> %src, <8 x i32> %a, <8 x i32> %b, ptr %ptr) {208; AVX512F-LABEL: select_umax:209; AVX512F:       # %bb.0: # %entry210; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0211; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3212; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm3, %k1213; AVX512F-NEXT:    vpmaxud %ymm2, %ymm1, %ymm1214; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}215; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0216; AVX512F-NEXT:    retq217;218; AVX512VL-LABEL: select_umax:219; AVX512VL:       # %bb.0: # %entry220; AVX512VL-NEXT:    vmovdqa 32(%rdi), %ymm3221; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm3, %k1222; AVX512VL-NEXT:    vpmaxud %ymm2, %ymm1, %ymm0 {%k1}223; AVX512VL-NEXT:    retq224entry:225  %arrayidx = getelementptr inbounds <8 x i32>, ptr %ptr, i32 1226  %0 = load <8 x i32>, ptr %arrayidx, align 64227  %and1 = and <8 x i32> %0, <i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517>228  %not = icmp ne <8 x i32> %and1, zeroinitializer229  %umax = call <8 x i32> @llvm.umax.v4i32(<8 x i32> %a, <8 x i32> %b)230  %1 = select <8 x i1> %not, <8 x i32> %src, <8 x i32> %umax231  ret <8 x i32> %1232}233declare <8 x i32> @llvm.umax.v4i32(<8 x i32> %a, <8 x i32> %b)234 235define dso_local <8 x i32> @select_umin(<8 x i32> %src, <8 x i32> %a, <8 x i32> %b, ptr %ptr) {236; AVX512F-LABEL: select_umin:237; AVX512F:       # %bb.0: # %entry238; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0239; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm3240; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm3, %k1241; AVX512F-NEXT:    vpminud %ymm2, %ymm1, %ymm1242; AVX512F-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}243; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0244; AVX512F-NEXT:    retq245;246; AVX512VL-LABEL: select_umin:247; AVX512VL:       # %bb.0: # %entry248; AVX512VL-NEXT:    vmovdqa 32(%rdi), %ymm3249; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm3, %k1250; AVX512VL-NEXT:    vpminud %ymm2, %ymm1, %ymm0 {%k1}251; AVX512VL-NEXT:    retq252entry:253  %arrayidx = getelementptr inbounds <8 x i32>, ptr %ptr, i32 1254  %0 = load <8 x i32>, ptr %arrayidx, align 64255  %and1 = and <8 x i32> %0, <i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517, i32 22517>256  %not = icmp ne <8 x i32> %and1, zeroinitializer257  %umin = call <8 x i32> @llvm.umin.v4i32(<8 x i32> %a, <8 x i32> %b)258  %1 = select <8 x i1> %not, <8 x i32> %src, <8 x i32> %umin259  ret <8 x i32> %1260}261declare <8 x i32> @llvm.umin.v4i32(<8 x i32> %a, <8 x i32> %b)262