brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.5 KiB · f58f19e Raw
347 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2   | FileCheck %s --check-prefixes=CHECK,SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=CHECK,SSE,SSE44; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx    | FileCheck %s --check-prefixes=CHECK,AVX,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2   | FileCheck %s --check-prefixes=CHECK,AVX,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512f  | FileCheck %s --check-prefixes=CHECK,AVX,AVX5127; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=CHECK,AVX,AVX5128 9; trunc(concat(x,y)) -> pack10 11define <8 x i16> @trunc_concat_packssdw_128(<4 x i32> %a0, <4 x i32> %a1) nounwind {12; SSE-LABEL: trunc_concat_packssdw_128:13; SSE:       # %bb.0:14; SSE-NEXT:    psrad $17, %xmm015; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm116; SSE-NEXT:    packssdw %xmm1, %xmm017; SSE-NEXT:    retq18;19; AVX1-LABEL: trunc_concat_packssdw_128:20; AVX1:       # %bb.0:21; AVX1-NEXT:    vpsrad $17, %xmm0, %xmm022; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm123; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm024; AVX1-NEXT:    retq25;26; AVX2-LABEL: trunc_concat_packssdw_128:27; AVX2:       # %bb.0:28; AVX2-NEXT:    vpsrad $17, %xmm0, %xmm029; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [15,15,15,15]30; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm131; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm032; AVX2-NEXT:    retq33;34; AVX512-LABEL: trunc_concat_packssdw_128:35; AVX512:       # %bb.0:36; AVX512-NEXT:    vpsrad $17, %xmm0, %xmm037; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm138; AVX512-NEXT:    vpackssdw %xmm1, %xmm0, %xmm039; AVX512-NEXT:    retq40  %1 = ashr <4 x i32> %a0, <i32 17, i32 17, i32 17, i32 17>41  %2 = and  <4 x i32> %a1, <i32 15, i32 15, i32 15, i32 15>42  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>43  %4 = trunc <8 x i32> %3 to <8 x i16>44  ret <8 x i16> %445}46 47define <8 x i16> @trunc_concat_packusdw_128(<4 x i32> %a0, <4 x i32> %a1) nounwind {48; SSE2-LABEL: trunc_concat_packusdw_128:49; SSE2:       # %bb.0:50; SSE2-NEXT:    psrld $17, %xmm051; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm152; SSE2-NEXT:    packssdw %xmm1, %xmm053; SSE2-NEXT:    retq54;55; SSE4-LABEL: trunc_concat_packusdw_128:56; SSE4:       # %bb.0:57; SSE4-NEXT:    psrld $17, %xmm058; SSE4-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm159; SSE4-NEXT:    packusdw %xmm1, %xmm060; SSE4-NEXT:    retq61;62; AVX1-LABEL: trunc_concat_packusdw_128:63; AVX1:       # %bb.0:64; AVX1-NEXT:    vpsrld $17, %xmm0, %xmm065; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm166; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm067; AVX1-NEXT:    retq68;69; AVX2-LABEL: trunc_concat_packusdw_128:70; AVX2:       # %bb.0:71; AVX2-NEXT:    vpsrld $17, %xmm0, %xmm072; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [15,15,15,15]73; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm174; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm075; AVX2-NEXT:    retq76;77; AVX512-LABEL: trunc_concat_packusdw_128:78; AVX512:       # %bb.0:79; AVX512-NEXT:    vpsrld $17, %xmm0, %xmm080; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm181; AVX512-NEXT:    vpackusdw %xmm1, %xmm0, %xmm082; AVX512-NEXT:    retq83  %1 = lshr <4 x i32> %a0, <i32 17, i32 17, i32 17, i32 17>84  %2 = and  <4 x i32> %a1, <i32 15, i32 15, i32 15, i32 15>85  %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>86  %4 = trunc <8 x i32> %3 to <8 x i16>87  ret <8 x i16> %488}89 90define <16 x i8> @trunc_concat_packsswb_128(<8 x i16> %a0, <8 x i16> %a1) nounwind {91; SSE-LABEL: trunc_concat_packsswb_128:92; SSE:       # %bb.0:93; SSE-NEXT:    psraw $15, %xmm094; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm195; SSE-NEXT:    packsswb %xmm1, %xmm096; SSE-NEXT:    retq97;98; AVX1-LABEL: trunc_concat_packsswb_128:99; AVX1:       # %bb.0:100; AVX1-NEXT:    vpsraw $15, %xmm0, %xmm0101; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1102; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0103; AVX1-NEXT:    retq104;105; AVX2-LABEL: trunc_concat_packsswb_128:106; AVX2:       # %bb.0:107; AVX2-NEXT:    vpsraw $15, %xmm0, %xmm0108; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1109; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0110; AVX2-NEXT:    retq111;112; AVX512-LABEL: trunc_concat_packsswb_128:113; AVX512:       # %bb.0:114; AVX512-NEXT:    vpsraw $15, %xmm0, %xmm0115; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1116; AVX512-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0117; AVX512-NEXT:    retq118  %1 = ashr <8 x i16> %a0, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>119  %2 = and  <8 x i16> %a1, <i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1>120  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>121  %4 = trunc <16 x i16> %3 to <16 x i8>122  ret <16 x i8> %4123}124 125define <16 x i8> @trunc_concat_packuswb_128(<8 x i16> %a0, <8 x i16> %a1) nounwind {126; SSE-LABEL: trunc_concat_packuswb_128:127; SSE:       # %bb.0:128; SSE-NEXT:    psrlw $15, %xmm0129; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1130; SSE-NEXT:    packuswb %xmm1, %xmm0131; SSE-NEXT:    retq132;133; AVX1-LABEL: trunc_concat_packuswb_128:134; AVX1:       # %bb.0:135; AVX1-NEXT:    vpsrlw $15, %xmm0, %xmm0136; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1137; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0138; AVX1-NEXT:    retq139;140; AVX2-LABEL: trunc_concat_packuswb_128:141; AVX2:       # %bb.0:142; AVX2-NEXT:    vpsrlw $15, %xmm0, %xmm0143; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1144; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0145; AVX2-NEXT:    retq146;147; AVX512-LABEL: trunc_concat_packuswb_128:148; AVX512:       # %bb.0:149; AVX512-NEXT:    vpsrlw $15, %xmm0, %xmm0150; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1151; AVX512-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0152; AVX512-NEXT:    retq153  %1 = lshr <8 x i16> %a0, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>154  %2 = and  <8 x i16> %a1, <i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1>155  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>156  %4 = trunc <16 x i16> %3 to <16 x i8>157  ret <16 x i8> %4158}159 160; concat(trunc(x),trunc(y)) -> pack161 162define <8 x i16> @concat_trunc_packssdw_128(<4 x i32> %a0, <4 x i32> %a1) nounwind {163; SSE2-LABEL: concat_trunc_packssdw_128:164; SSE2:       # %bb.0:165; SSE2-NEXT:    psrad $17, %xmm0166; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1167; SSE2-NEXT:    packssdw %xmm0, %xmm0168; SSE2-NEXT:    packuswb %xmm1, %xmm1169; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]170; SSE2-NEXT:    retq171;172; SSE4-LABEL: concat_trunc_packssdw_128:173; SSE4:       # %bb.0:174; SSE4-NEXT:    psrad $17, %xmm0175; SSE4-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1176; SSE4-NEXT:    packssdw %xmm1, %xmm0177; SSE4-NEXT:    retq178;179; AVX1-LABEL: concat_trunc_packssdw_128:180; AVX1:       # %bb.0:181; AVX1-NEXT:    vpsrad $17, %xmm0, %xmm0182; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1183; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0184; AVX1-NEXT:    retq185;186; AVX2-LABEL: concat_trunc_packssdw_128:187; AVX2:       # %bb.0:188; AVX2-NEXT:    vpsrad $17, %xmm0, %xmm0189; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [15,15,15,15]190; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1191; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0192; AVX2-NEXT:    retq193;194; AVX512-LABEL: concat_trunc_packssdw_128:195; AVX512:       # %bb.0:196; AVX512-NEXT:    vpsrad $17, %xmm0, %xmm0197; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1198; AVX512-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0199; AVX512-NEXT:    retq200  %1 = ashr <4 x i32> %a0, <i32 17, i32 17, i32 17, i32 17>201  %2 = and  <4 x i32> %a1, <i32 15, i32 15, i32 15, i32 15>202  %3 = trunc <4 x i32> %1 to <4 x i16>203  %4 = trunc <4 x i32> %2 to <4 x i16>204  %5 = shufflevector <4 x i16> %3, <4 x i16> %4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>205  ret <8 x i16> %5206}207 208define <8 x i16> @concat_trunc_packusdw_128(<4 x i32> %a0, <4 x i32> %a1) nounwind {209; SSE2-LABEL: concat_trunc_packusdw_128:210; SSE2:       # %bb.0:211; SSE2-NEXT:    psrld $17, %xmm0212; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1213; SSE2-NEXT:    packssdw %xmm0, %xmm0214; SSE2-NEXT:    packuswb %xmm1, %xmm1215; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]216; SSE2-NEXT:    retq217;218; SSE4-LABEL: concat_trunc_packusdw_128:219; SSE4:       # %bb.0:220; SSE4-NEXT:    psrld $17, %xmm0221; SSE4-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1222; SSE4-NEXT:    packusdw %xmm1, %xmm0223; SSE4-NEXT:    retq224;225; AVX1-LABEL: concat_trunc_packusdw_128:226; AVX1:       # %bb.0:227; AVX1-NEXT:    vpsrld $17, %xmm0, %xmm0228; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1229; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0230; AVX1-NEXT:    retq231;232; AVX2-LABEL: concat_trunc_packusdw_128:233; AVX2:       # %bb.0:234; AVX2-NEXT:    vpsrld $17, %xmm0, %xmm0235; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [15,15,15,15]236; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1237; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0238; AVX2-NEXT:    retq239;240; AVX512-LABEL: concat_trunc_packusdw_128:241; AVX512:       # %bb.0:242; AVX512-NEXT:    vpsrld $17, %xmm0, %xmm0243; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1244; AVX512-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0245; AVX512-NEXT:    retq246  %1 = lshr <4 x i32> %a0, <i32 17, i32 17, i32 17, i32 17>247  %2 = and  <4 x i32> %a1, <i32 15, i32 15, i32 15, i32 15>248  %3 = trunc <4 x i32> %1 to <4 x i16>249  %4 = trunc <4 x i32> %2 to <4 x i16>250  %5 = shufflevector <4 x i16> %3, <4 x i16> %4, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>251  ret <8 x i16> %5252}253 254define <16 x i8> @concat_trunc_packsswb_128(<8 x i16> %a0, <8 x i16> %a1) nounwind {255; SSE-LABEL: concat_trunc_packsswb_128:256; SSE:       # %bb.0:257; SSE-NEXT:    psraw $15, %xmm0258; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1259; SSE-NEXT:    packsswb %xmm1, %xmm0260; SSE-NEXT:    retq261;262; AVX1-LABEL: concat_trunc_packsswb_128:263; AVX1:       # %bb.0:264; AVX1-NEXT:    vpsraw $15, %xmm0, %xmm0265; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1266; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0267; AVX1-NEXT:    retq268;269; AVX2-LABEL: concat_trunc_packsswb_128:270; AVX2:       # %bb.0:271; AVX2-NEXT:    vpsraw $15, %xmm0, %xmm0272; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1273; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0274; AVX2-NEXT:    retq275;276; AVX512-LABEL: concat_trunc_packsswb_128:277; AVX512:       # %bb.0:278; AVX512-NEXT:    vpsraw $15, %xmm0, %xmm0279; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1280; AVX512-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0281; AVX512-NEXT:    retq282  %1 = ashr <8 x i16> %a0, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>283  %2 = and  <8 x i16> %a1, <i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1>284  %3 = trunc <8 x i16> %1 to <8 x i8>285  %4 = trunc <8 x i16> %2 to <8 x i8>286  %5 = shufflevector <8 x i8> %3, <8 x i8> %4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>287  ret <16 x i8> %5288}289 290define <16 x i8> @concat_trunc_packuswb_128(<8 x i16> %a0, <8 x i16> %a1) nounwind {291; SSE-LABEL: concat_trunc_packuswb_128:292; SSE:       # %bb.0:293; SSE-NEXT:    psrlw $15, %xmm0294; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1295; SSE-NEXT:    packuswb %xmm1, %xmm0296; SSE-NEXT:    retq297;298; AVX1-LABEL: concat_trunc_packuswb_128:299; AVX1:       # %bb.0:300; AVX1-NEXT:    vpsrlw $15, %xmm0, %xmm0301; AVX1-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1302; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0303; AVX1-NEXT:    retq304;305; AVX2-LABEL: concat_trunc_packuswb_128:306; AVX2:       # %bb.0:307; AVX2-NEXT:    vpsrlw $15, %xmm0, %xmm0308; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1309; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0310; AVX2-NEXT:    retq311;312; AVX512-LABEL: concat_trunc_packuswb_128:313; AVX512:       # %bb.0:314; AVX512-NEXT:    vpsrlw $15, %xmm0, %xmm0315; AVX512-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %xmm1316; AVX512-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0317; AVX512-NEXT:    retq318  %1 = lshr <8 x i16> %a0, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>319  %2 = and  <8 x i16> %a1, <i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1, i16  1>320  %3 = trunc <8 x i16> %1 to <8 x i8>321  %4 = trunc <8 x i16> %2 to <8 x i8>322  %5 = shufflevector <8 x i8> %3, <8 x i8> %4, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>323  ret <16 x i8> %5324}325 326; Fuzz test - don't pack a v1i32 comparison result.327define void @autogen_SD10339(<1 x i32> %I49) {328; CHECK-LABEL: autogen_SD10339:329; CHECK:       # %bb.0: # %BB330; CHECK-NEXT:    .p2align 4331; CHECK-NEXT:  .LBB8_1: # %CF332; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1333; CHECK-NEXT:    movw $1, 0334; CHECK-NEXT:    jmp .LBB8_1335BB:336  %Cmp53 = icmp uge <1 x i32> %I49, zeroinitializer337  br label %CF338 339CF:                                               ; preds = %CF, %BB340  %ZE166 = zext <1 x i1> %Cmp53 to <1 x i16>341  store <1 x i16> %ZE166, ptr null, align 2342  br label %CF343}344 345;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:346; AVX: {{.*}}347