1734 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-prefix=SSE --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX5128; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX5129 10; FIXME: should be paddusb11define <16 x i8> @test1(<16 x i8> %x) {12; SSE-LABEL: test1:13; SSE: # %bb.0:14; SSE-NEXT: pcmpeqd %xmm1, %xmm115; SSE-NEXT: movdqa %xmm0, %xmm216; SSE-NEXT: psubb %xmm1, %xmm217; SSE-NEXT: pcmpeqb %xmm1, %xmm018; SSE-NEXT: por %xmm2, %xmm019; SSE-NEXT: retq20;21; AVX1-LABEL: test1:22; AVX1: # %bb.0:23; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm124; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm225; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm026; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm027; AVX1-NEXT: retq28;29; AVX2-LABEL: test1:30; AVX2: # %bb.0:31; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm132; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm233; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm034; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm035; AVX2-NEXT: retq36;37; AVX512-LABEL: test1:38; AVX512: # %bb.0:39; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm240; AVX512-NEXT: vpsubb %xmm2, %xmm0, %xmm141; AVX512-NEXT: vpcmpeqb %xmm2, %xmm0, %k142; AVX512-NEXT: vmovdqu8 %xmm2, %xmm1 {%k1}43; AVX512-NEXT: vmovdqa %xmm1, %xmm044; AVX512-NEXT: retq45 %1 = add <16 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>46 %2 = icmp eq <16 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>47 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %148 ret <16 x i8> %349}50 51define <16 x i8> @test2(<16 x i8> %x) {52; SSE-LABEL: test2:53; SSE: # %bb.0:54; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm055; SSE-NEXT: retq56;57; AVX-LABEL: test2:58; AVX: # %bb.0:59; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm060; AVX-NEXT: retq61 %1 = add <16 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>62 %2 = icmp ugt <16 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>63 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %164 ret <16 x i8> %365}66 67define <16 x i8> @test3(<16 x i8> %x) {68; SSE-LABEL: test3:69; SSE: # %bb.0:70; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm071; SSE-NEXT: retq72;73; AVX-LABEL: test3:74; AVX: # %bb.0:75; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm076; AVX-NEXT: retq77 %1 = add <16 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>78 %2 = icmp ugt <16 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>79 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %180 ret <16 x i8> %381}82 83define <16 x i8> @test4(<16 x i8> %x) {84; SSE-LABEL: test4:85; SSE: # %bb.0:86; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm087; SSE-NEXT: retq88;89; AVX-LABEL: test4:90; AVX: # %bb.0:91; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm092; AVX-NEXT: retq93 %1 = add <16 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>94 %2 = icmp ugt <16 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>95 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %196 ret <16 x i8> %397}98 99; FIXME: should be paddusb100define <16 x i8> @test5(<16 x i8> %x) {101; SSE-LABEL: test5:102; SSE: # %bb.0:103; SSE-NEXT: movdqa {{.*#+}} xmm1 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]104; SSE-NEXT: pxor %xmm0, %xmm1105; SSE-NEXT: pmaxub %xmm1, %xmm0106; SSE-NEXT: pcmpeqb %xmm1, %xmm0107; SSE-NEXT: pcmpeqd %xmm2, %xmm2108; SSE-NEXT: pxor %xmm2, %xmm0109; SSE-NEXT: por %xmm1, %xmm0110; SSE-NEXT: retq111;112; AVX1-LABEL: test5:113; AVX1: # %bb.0:114; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1115; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0116; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0117; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2118; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0119; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0120; AVX1-NEXT: retq121;122; AVX2-LABEL: test5:123; AVX2: # %bb.0:124; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1125; AVX2-NEXT: vpmaxub %xmm0, %xmm1, %xmm0126; AVX2-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0127; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2128; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0129; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0130; AVX2-NEXT: retq131;132; AVX512-LABEL: test5:133; AVX512: # %bb.0:134; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1135; AVX512-NEXT: vpcmpltub %xmm0, %xmm1, %k1136; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0137; AVX512-NEXT: vmovdqu8 %xmm0, %xmm1 {%k1}138; AVX512-NEXT: vmovdqa %xmm1, %xmm0139; AVX512-NEXT: retq140 %1 = xor <16 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>141 %2 = icmp ult <16 x i8> %1, %x142 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1143 ret <16 x i8> %3144}145 146define <16 x i8> @test6(<16 x i8> %x) {147; SSE-LABEL: test6:148; SSE: # %bb.0:149; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0150; SSE-NEXT: retq151;152; AVX-LABEL: test6:153; AVX: # %bb.0:154; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0155; AVX-NEXT: retq156 %1 = add <16 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>157 %2 = icmp ugt <16 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>158 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1159 ret <16 x i8> %3160}161 162define <32 x i8> @test7(<32 x i8> %x) {163; SSE-LABEL: test7:164; SSE: # %bb.0:165; SSE-NEXT: pcmpeqd %xmm2, %xmm2166; SSE-NEXT: movdqa %xmm1, %xmm3167; SSE-NEXT: psubb %xmm2, %xmm3168; SSE-NEXT: movdqa %xmm0, %xmm4169; SSE-NEXT: psubb %xmm2, %xmm4170; SSE-NEXT: pcmpeqb %xmm2, %xmm1171; SSE-NEXT: por %xmm3, %xmm1172; SSE-NEXT: pcmpeqb %xmm2, %xmm0173; SSE-NEXT: por %xmm4, %xmm0174; SSE-NEXT: retq175;176; AVX1-LABEL: test7:177; AVX1: # %bb.0:178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1179; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2180; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm3181; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm4182; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3183; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1184; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0185; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0186; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0187; AVX1-NEXT: retq188;189; AVX2-LABEL: test7:190; AVX2: # %bb.0:191; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1192; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm2193; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0194; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0195; AVX2-NEXT: retq196;197; AVX512-LABEL: test7:198; AVX512: # %bb.0:199; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2200; AVX512-NEXT: vpsubb %ymm2, %ymm0, %ymm1201; AVX512-NEXT: vpcmpeqb %ymm2, %ymm0, %k1202; AVX512-NEXT: vmovdqu8 %ymm2, %ymm1 {%k1}203; AVX512-NEXT: vmovdqa %ymm1, %ymm0204; AVX512-NEXT: retq205 %1 = add <32 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>206 %2 = icmp eq <32 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>207 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1208 ret <32 x i8> %3209}210 211define <32 x i8> @test8(<32 x i8> %x) {212; SSE-LABEL: test8:213; SSE: # %bb.0:214; SSE-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]215; SSE-NEXT: paddusb %xmm2, %xmm0216; SSE-NEXT: paddusb %xmm2, %xmm1217; SSE-NEXT: retq218;219; AVX1-LABEL: test8:220; AVX1: # %bb.0:221; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1222; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]223; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1224; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0225; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0226; AVX1-NEXT: retq227;228; AVX2-LABEL: test8:229; AVX2: # %bb.0:230; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0231; AVX2-NEXT: retq232;233; AVX512-LABEL: test8:234; AVX512: # %bb.0:235; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0236; AVX512-NEXT: retq237 %1 = add <32 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>238 %2 = icmp ugt <32 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>239 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1240 ret <32 x i8> %3241}242 243define <32 x i8> @test9(<32 x i8> %x) {244; SSE-LABEL: test9:245; SSE: # %bb.0:246; SSE-NEXT: movdqa {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]247; SSE-NEXT: paddusb %xmm2, %xmm0248; SSE-NEXT: paddusb %xmm2, %xmm1249; SSE-NEXT: retq250;251; AVX1-LABEL: test9:252; AVX1: # %bb.0:253; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1254; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]255; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1256; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0257; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0258; AVX1-NEXT: retq259;260; AVX2-LABEL: test9:261; AVX2: # %bb.0:262; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0263; AVX2-NEXT: retq264;265; AVX512-LABEL: test9:266; AVX512: # %bb.0:267; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0268; AVX512-NEXT: retq269 %1 = add <32 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>270 %2 = icmp ugt <32 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>271 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1272 ret <32 x i8> %3273}274 275define <32 x i8> @test10(<32 x i8> %x) {276; SSE-LABEL: test10:277; SSE: # %bb.0:278; SSE-NEXT: movdqa {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]279; SSE-NEXT: paddusb %xmm2, %xmm0280; SSE-NEXT: paddusb %xmm2, %xmm1281; SSE-NEXT: retq282;283; AVX1-LABEL: test10:284; AVX1: # %bb.0:285; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1286; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]287; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1288; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0289; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0290; AVX1-NEXT: retq291;292; AVX2-LABEL: test10:293; AVX2: # %bb.0:294; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0295; AVX2-NEXT: retq296;297; AVX512-LABEL: test10:298; AVX512: # %bb.0:299; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0300; AVX512-NEXT: retq301 %1 = add <32 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>302 %2 = icmp ugt <32 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>303 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1304 ret <32 x i8> %3305}306 307define <32 x i8> @test11(<32 x i8> %x) {308; SSE-LABEL: test11:309; SSE: # %bb.0:310; SSE-NEXT: movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]311; SSE-NEXT: movdqa %xmm0, %xmm3312; SSE-NEXT: pxor %xmm2, %xmm3313; SSE-NEXT: pxor %xmm1, %xmm2314; SSE-NEXT: pmaxub %xmm2, %xmm1315; SSE-NEXT: pcmpeqb %xmm2, %xmm1316; SSE-NEXT: pcmpeqd %xmm4, %xmm4317; SSE-NEXT: pxor %xmm4, %xmm1318; SSE-NEXT: pmaxub %xmm3, %xmm0319; SSE-NEXT: pcmpeqb %xmm3, %xmm0320; SSE-NEXT: pxor %xmm4, %xmm0321; SSE-NEXT: por %xmm3, %xmm0322; SSE-NEXT: por %xmm2, %xmm1323; SSE-NEXT: retq324;325; AVX1-LABEL: test11:326; AVX1: # %bb.0:327; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1328; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2329; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3330; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2331; AVX1-NEXT: vpcmpeqb %xmm2, %xmm3, %xmm2332; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3333; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2334; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0335; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0336; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0337; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0338; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0339; AVX1-NEXT: retq340;341; AVX2-LABEL: test11:342; AVX2: # %bb.0:343; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1344; AVX2-NEXT: vpmaxub %ymm0, %ymm1, %ymm0345; AVX2-NEXT: vpcmpeqb %ymm0, %ymm1, %ymm0346; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2347; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0348; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0349; AVX2-NEXT: retq350;351; AVX512-LABEL: test11:352; AVX512: # %bb.0:353; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1354; AVX512-NEXT: vpcmpltub %ymm0, %ymm1, %k1355; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0356; AVX512-NEXT: vmovdqu8 %ymm0, %ymm1 {%k1}357; AVX512-NEXT: vmovdqa %ymm1, %ymm0358; AVX512-NEXT: retq359 %1 = xor <32 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>360 %2 = icmp ult <32 x i8> %1, %x361 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1362 ret <32 x i8> %3363}364 365define <32 x i8> @test12(<32 x i8> %x) {366; SSE-LABEL: test12:367; SSE: # %bb.0:368; SSE-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]369; SSE-NEXT: paddusb %xmm2, %xmm0370; SSE-NEXT: paddusb %xmm2, %xmm1371; SSE-NEXT: retq372;373; AVX1-LABEL: test12:374; AVX1: # %bb.0:375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1376; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]377; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1378; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0379; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0380; AVX1-NEXT: retq381;382; AVX2-LABEL: test12:383; AVX2: # %bb.0:384; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0385; AVX2-NEXT: retq386;387; AVX512-LABEL: test12:388; AVX512: # %bb.0:389; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0390; AVX512-NEXT: retq391 %1 = add <32 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>392 %2 = icmp ugt <32 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>393 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1394 ret <32 x i8> %3395}396 397define <64 x i8> @test13(<64 x i8> %x) {398; SSE-LABEL: test13:399; SSE: # %bb.0:400; SSE-NEXT: pcmpeqd %xmm4, %xmm4401; SSE-NEXT: movdqa %xmm3, %xmm5402; SSE-NEXT: psubb %xmm4, %xmm5403; SSE-NEXT: movdqa %xmm2, %xmm6404; SSE-NEXT: psubb %xmm4, %xmm6405; SSE-NEXT: movdqa %xmm1, %xmm7406; SSE-NEXT: psubb %xmm4, %xmm7407; SSE-NEXT: movdqa %xmm0, %xmm8408; SSE-NEXT: psubb %xmm4, %xmm8409; SSE-NEXT: pcmpeqb %xmm4, %xmm3410; SSE-NEXT: por %xmm5, %xmm3411; SSE-NEXT: pcmpeqb %xmm4, %xmm2412; SSE-NEXT: por %xmm6, %xmm2413; SSE-NEXT: pcmpeqb %xmm4, %xmm1414; SSE-NEXT: por %xmm7, %xmm1415; SSE-NEXT: pcmpeqb %xmm4, %xmm0416; SSE-NEXT: por %xmm8, %xmm0417; SSE-NEXT: retq418;419; AVX1-LABEL: test13:420; AVX1: # %bb.0:421; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2422; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3423; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm4424; AVX1-NEXT: vpsubb %xmm3, %xmm1, %xmm5425; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4426; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5427; AVX1-NEXT: vpsubb %xmm3, %xmm5, %xmm6428; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm7429; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6430; AVX1-NEXT: vpcmpeqb %xmm3, %xmm2, %xmm2431; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1432; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1433; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1434; AVX1-NEXT: vpcmpeqb %xmm3, %xmm5, %xmm2435; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0436; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0437; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0438; AVX1-NEXT: retq439;440; AVX2-LABEL: test13:441; AVX2: # %bb.0:442; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2443; AVX2-NEXT: vpsubb %ymm2, %ymm1, %ymm3444; AVX2-NEXT: vpsubb %ymm2, %ymm0, %ymm4445; AVX2-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm1446; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1447; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0448; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0449; AVX2-NEXT: retq450;451; AVX512-LABEL: test13:452; AVX512: # %bb.0:453; AVX512-NEXT: vpternlogd {{.*#+}} zmm1 = -1454; AVX512-NEXT: vpcmpneqb %zmm1, %zmm0, %k1455; AVX512-NEXT: vpsubb %zmm1, %zmm0, %zmm1 {%k1}456; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0457; AVX512-NEXT: retq458 %1 = add <64 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>459 %2 = icmp eq <64 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>460 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1461 ret <64 x i8> %3462}463 464define <64 x i8> @test14(<64 x i8> %x) {465; SSE-LABEL: test14:466; SSE: # %bb.0:467; SSE-NEXT: movdqa {{.*#+}} xmm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]468; SSE-NEXT: paddusb %xmm4, %xmm0469; SSE-NEXT: paddusb %xmm4, %xmm1470; SSE-NEXT: paddusb %xmm4, %xmm2471; SSE-NEXT: paddusb %xmm4, %xmm3472; SSE-NEXT: retq473;474; AVX1-LABEL: test14:475; AVX1: # %bb.0:476; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2477; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]478; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2479; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0480; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0481; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2482; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2483; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1484; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1485; AVX1-NEXT: retq486;487; AVX2-LABEL: test14:488; AVX2: # %bb.0:489; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]490; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0491; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1492; AVX2-NEXT: retq493;494; AVX512-LABEL: test14:495; AVX512: # %bb.0:496; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0497; AVX512-NEXT: retq498 %1 = add <64 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>499 %2 = icmp ugt <64 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>500 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1501 ret <64 x i8> %3502}503 504define <64 x i8> @test15(<64 x i8> %x) {505; SSE-LABEL: test15:506; SSE: # %bb.0:507; SSE-NEXT: movdqa {{.*#+}} xmm4 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]508; SSE-NEXT: paddusb %xmm4, %xmm0509; SSE-NEXT: paddusb %xmm4, %xmm1510; SSE-NEXT: paddusb %xmm4, %xmm2511; SSE-NEXT: paddusb %xmm4, %xmm3512; SSE-NEXT: retq513;514; AVX1-LABEL: test15:515; AVX1: # %bb.0:516; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2517; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]518; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2519; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0520; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0521; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2522; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2523; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1524; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1525; AVX1-NEXT: retq526;527; AVX2-LABEL: test15:528; AVX2: # %bb.0:529; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]530; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0531; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1532; AVX2-NEXT: retq533;534; AVX512-LABEL: test15:535; AVX512: # %bb.0:536; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0537; AVX512-NEXT: retq538 %1 = add <64 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>539 %2 = icmp ugt <64 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>540 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1541 ret <64 x i8> %3542}543 544define <64 x i8> @test16(<64 x i8> %x) {545; SSE-LABEL: test16:546; SSE: # %bb.0:547; SSE-NEXT: movdqa {{.*#+}} xmm4 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]548; SSE-NEXT: paddusb %xmm4, %xmm0549; SSE-NEXT: paddusb %xmm4, %xmm1550; SSE-NEXT: paddusb %xmm4, %xmm2551; SSE-NEXT: paddusb %xmm4, %xmm3552; SSE-NEXT: retq553;554; AVX1-LABEL: test16:555; AVX1: # %bb.0:556; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2557; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]558; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2559; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0560; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0561; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2562; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2563; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1564; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1565; AVX1-NEXT: retq566;567; AVX2-LABEL: test16:568; AVX2: # %bb.0:569; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]570; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0571; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1572; AVX2-NEXT: retq573;574; AVX512-LABEL: test16:575; AVX512: # %bb.0:576; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0577; AVX512-NEXT: retq578 %1 = add <64 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>579 %2 = icmp ugt <64 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>580 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1581 ret <64 x i8> %3582}583 584define <64 x i8> @test17(<64 x i8> %x) {585; SSE-LABEL: test17:586; SSE: # %bb.0:587; SSE-NEXT: movdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]588; SSE-NEXT: movdqa %xmm0, %xmm5589; SSE-NEXT: pxor %xmm4, %xmm5590; SSE-NEXT: movdqa %xmm1, %xmm6591; SSE-NEXT: pxor %xmm4, %xmm6592; SSE-NEXT: movdqa %xmm2, %xmm7593; SSE-NEXT: pxor %xmm4, %xmm7594; SSE-NEXT: pxor %xmm3, %xmm4595; SSE-NEXT: pmaxub %xmm4, %xmm3596; SSE-NEXT: pcmpeqb %xmm4, %xmm3597; SSE-NEXT: pcmpeqd %xmm8, %xmm8598; SSE-NEXT: pxor %xmm8, %xmm3599; SSE-NEXT: pmaxub %xmm7, %xmm2600; SSE-NEXT: pcmpeqb %xmm7, %xmm2601; SSE-NEXT: pxor %xmm8, %xmm2602; SSE-NEXT: pmaxub %xmm6, %xmm1603; SSE-NEXT: pcmpeqb %xmm6, %xmm1604; SSE-NEXT: pxor %xmm8, %xmm1605; SSE-NEXT: pmaxub %xmm5, %xmm0606; SSE-NEXT: pcmpeqb %xmm5, %xmm0607; SSE-NEXT: pxor %xmm8, %xmm0608; SSE-NEXT: por %xmm5, %xmm0609; SSE-NEXT: por %xmm6, %xmm1610; SSE-NEXT: por %xmm7, %xmm2611; SSE-NEXT: por %xmm4, %xmm3612; SSE-NEXT: retq613;614; AVX1-LABEL: test17:615; AVX1: # %bb.0:616; AVX1-NEXT: vbroadcastss {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]617; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm3618; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2619; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4620; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5621; AVX1-NEXT: vpmaxub %xmm5, %xmm4, %xmm5622; AVX1-NEXT: vpcmpeqb %xmm5, %xmm4, %xmm4623; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5624; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4625; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1626; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1627; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1628; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1629; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4630; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6631; AVX1-NEXT: vpmaxub %xmm6, %xmm4, %xmm6632; AVX1-NEXT: vpcmpeqb %xmm6, %xmm4, %xmm4633; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4634; AVX1-NEXT: vpmaxub %xmm0, %xmm3, %xmm0635; AVX1-NEXT: vpcmpeqb %xmm0, %xmm3, %xmm0636; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0637; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0638; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0639; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1640; AVX1-NEXT: retq641;642; AVX2-LABEL: test17:643; AVX2: # %bb.0:644; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]645; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3646; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2647; AVX2-NEXT: vpmaxub %ymm1, %ymm2, %ymm1648; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1649; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4650; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1651; AVX2-NEXT: vpmaxub %ymm0, %ymm3, %ymm0652; AVX2-NEXT: vpcmpeqb %ymm0, %ymm3, %ymm0653; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0654; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0655; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1656; AVX2-NEXT: retq657;658; AVX512-LABEL: test17:659; AVX512: # %bb.0:660; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1661; AVX512-NEXT: vpcmpltub %zmm0, %zmm1, %k1662; AVX512-NEXT: vpternlogd {{.*#+}} zmm0 = -1663; AVX512-NEXT: vmovdqu8 %zmm0, %zmm1 {%k1}664; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0665; AVX512-NEXT: retq666 %1 = xor <64 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>667 %2 = icmp ult <64 x i8> %1, %x668 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1669 ret <64 x i8> %3670}671 672define <64 x i8> @test18(<64 x i8> %x) {673; SSE-LABEL: test18:674; SSE: # %bb.0:675; SSE-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]676; SSE-NEXT: paddusb %xmm4, %xmm0677; SSE-NEXT: paddusb %xmm4, %xmm1678; SSE-NEXT: paddusb %xmm4, %xmm2679; SSE-NEXT: paddusb %xmm4, %xmm3680; SSE-NEXT: retq681;682; AVX1-LABEL: test18:683; AVX1: # %bb.0:684; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2685; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]686; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2687; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0688; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0689; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2690; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2691; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1692; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1693; AVX1-NEXT: retq694;695; AVX2-LABEL: test18:696; AVX2: # %bb.0:697; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]698; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0699; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1700; AVX2-NEXT: retq701;702; AVX512-LABEL: test18:703; AVX512: # %bb.0:704; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0705; AVX512-NEXT: retq706 %1 = add <64 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>707 %2 = icmp ugt <64 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>708 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1709 ret <64 x i8> %3710}711 712define <8 x i16> @test19(<8 x i16> %x) {713; SSE-LABEL: test19:714; SSE: # %bb.0:715; SSE-NEXT: pcmpeqd %xmm1, %xmm1716; SSE-NEXT: movdqa %xmm0, %xmm2717; SSE-NEXT: psubw %xmm1, %xmm2718; SSE-NEXT: pcmpeqw %xmm1, %xmm0719; SSE-NEXT: por %xmm2, %xmm0720; SSE-NEXT: retq721;722; AVX1-LABEL: test19:723; AVX1: # %bb.0:724; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1725; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2726; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0727; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0728; AVX1-NEXT: retq729;730; AVX2-LABEL: test19:731; AVX2: # %bb.0:732; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1733; AVX2-NEXT: vpsubw %xmm1, %xmm0, %xmm2734; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0735; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0736; AVX2-NEXT: retq737;738; AVX512-LABEL: test19:739; AVX512: # %bb.0:740; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2741; AVX512-NEXT: vpsubw %xmm2, %xmm0, %xmm1742; AVX512-NEXT: vpcmpeqw %xmm2, %xmm0, %k1743; AVX512-NEXT: vmovdqu16 %xmm2, %xmm1 {%k1}744; AVX512-NEXT: vmovdqa %xmm1, %xmm0745; AVX512-NEXT: retq746 %1 = add <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>747 %2 = icmp eq <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>748 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1749 ret <8 x i16> %3750}751 752define <8 x i16> @test20(<8 x i16> %x) {753; SSE-LABEL: test20:754; SSE: # %bb.0:755; SSE-NEXT: paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0756; SSE-NEXT: retq757;758; AVX-LABEL: test20:759; AVX: # %bb.0:760; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0761; AVX-NEXT: retq762 %1 = add <8 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>763 %2 = icmp ugt <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>764 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1765 ret <8 x i16> %3766}767 768define <8 x i16> @test21(<8 x i16> %x) {769; SSE-LABEL: test21:770; SSE: # %bb.0:771; SSE-NEXT: paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0772; SSE-NEXT: retq773;774; AVX-LABEL: test21:775; AVX: # %bb.0:776; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0777; AVX-NEXT: retq778 %1 = add <8 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>779 %2 = icmp ugt <8 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>780 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1781 ret <8 x i16> %3782}783 784define <8 x i16> @test22(<8 x i16> %x) {785; SSE-LABEL: test22:786; SSE: # %bb.0:787; SSE-NEXT: paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0788; SSE-NEXT: retq789;790; AVX-LABEL: test22:791; AVX: # %bb.0:792; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0793; AVX-NEXT: retq794 %1 = add <8 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>795 %2 = icmp ugt <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>796 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1797 ret <8 x i16> %3798}799 800define <8 x i16> @test23(<8 x i16> %x) {801; SSE2-LABEL: test23:802; SSE2: # %bb.0:803; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]804; SSE2-NEXT: pxor %xmm0, %xmm2805; SSE2-NEXT: movdqa %xmm2, %xmm1806; SSE2-NEXT: pcmpgtw %xmm0, %xmm1807; SSE2-NEXT: por %xmm2, %xmm1808; SSE2-NEXT: movdqa %xmm1, %xmm0809; SSE2-NEXT: retq810;811; SSSE3-LABEL: test23:812; SSSE3: # %bb.0:813; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]814; SSSE3-NEXT: pxor %xmm0, %xmm2815; SSSE3-NEXT: movdqa %xmm2, %xmm1816; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1817; SSSE3-NEXT: por %xmm2, %xmm1818; SSSE3-NEXT: movdqa %xmm1, %xmm0819; SSSE3-NEXT: retq820;821; SSE41-LABEL: test23:822; SSE41: # %bb.0:823; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [32768,32768,32768,32768,32768,32768,32768,32768]824; SSE41-NEXT: pxor %xmm0, %xmm1825; SSE41-NEXT: pmaxuw %xmm1, %xmm0826; SSE41-NEXT: pcmpeqw %xmm1, %xmm0827; SSE41-NEXT: pcmpeqd %xmm2, %xmm2828; SSE41-NEXT: pxor %xmm2, %xmm0829; SSE41-NEXT: por %xmm1, %xmm0830; SSE41-NEXT: retq831;832; AVX1-LABEL: test23:833; AVX1: # %bb.0:834; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1835; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0836; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0837; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2838; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0839; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0840; AVX1-NEXT: retq841;842; AVX2-LABEL: test23:843; AVX2: # %bb.0:844; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1845; AVX2-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0846; AVX2-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0847; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2848; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0849; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0850; AVX2-NEXT: retq851;852; AVX512-LABEL: test23:853; AVX512: # %bb.0:854; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1855; AVX512-NEXT: vpcmpltuw %xmm0, %xmm1, %k1856; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0857; AVX512-NEXT: vmovdqu16 %xmm0, %xmm1 {%k1}858; AVX512-NEXT: vmovdqa %xmm1, %xmm0859; AVX512-NEXT: retq860 %1 = xor <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>861 %2 = icmp ult <8 x i16> %1, %x862 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1863 ret <8 x i16> %3864}865 866define <8 x i16> @test24(<8 x i16> %x) {867; SSE-LABEL: test24:868; SSE: # %bb.0:869; SSE-NEXT: paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0870; SSE-NEXT: retq871;872; AVX-LABEL: test24:873; AVX: # %bb.0:874; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0875; AVX-NEXT: retq876 %1 = add <8 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>877 %2 = icmp ugt <8 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>878 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1879 ret <8 x i16> %3880}881 882define <16 x i16> @test25(<16 x i16> %x) {883; SSE-LABEL: test25:884; SSE: # %bb.0:885; SSE-NEXT: pcmpeqd %xmm2, %xmm2886; SSE-NEXT: movdqa %xmm1, %xmm3887; SSE-NEXT: psubw %xmm2, %xmm3888; SSE-NEXT: movdqa %xmm0, %xmm4889; SSE-NEXT: psubw %xmm2, %xmm4890; SSE-NEXT: pcmpeqw %xmm2, %xmm1891; SSE-NEXT: por %xmm3, %xmm1892; SSE-NEXT: pcmpeqw %xmm2, %xmm0893; SSE-NEXT: por %xmm4, %xmm0894; SSE-NEXT: retq895;896; AVX1-LABEL: test25:897; AVX1: # %bb.0:898; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1899; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2900; AVX1-NEXT: vpsubw %xmm2, %xmm1, %xmm3901; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm4902; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3903; AVX1-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1904; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0905; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0906; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0907; AVX1-NEXT: retq908;909; AVX2-LABEL: test25:910; AVX2: # %bb.0:911; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1912; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm2913; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0914; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0915; AVX2-NEXT: retq916;917; AVX512-LABEL: test25:918; AVX512: # %bb.0:919; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2920; AVX512-NEXT: vpsubw %ymm2, %ymm0, %ymm1921; AVX512-NEXT: vpcmpeqw %ymm2, %ymm0, %k1922; AVX512-NEXT: vmovdqu16 %ymm2, %ymm1 {%k1}923; AVX512-NEXT: vmovdqa %ymm1, %ymm0924; AVX512-NEXT: retq925 %1 = add <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>926 %2 = icmp eq <16 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>927 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1928 ret <16 x i16> %3929}930 931define <16 x i16> @test26(<16 x i16> %x) {932; SSE-LABEL: test26:933; SSE: # %bb.0:934; SSE-NEXT: movdqa {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]935; SSE-NEXT: paddusw %xmm2, %xmm0936; SSE-NEXT: paddusw %xmm2, %xmm1937; SSE-NEXT: retq938;939; AVX1-LABEL: test26:940; AVX1: # %bb.0:941; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1942; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]943; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1944; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0945; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0946; AVX1-NEXT: retq947;948; AVX2-LABEL: test26:949; AVX2: # %bb.0:950; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0951; AVX2-NEXT: retq952;953; AVX512-LABEL: test26:954; AVX512: # %bb.0:955; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0956; AVX512-NEXT: retq957 %1 = add <16 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>958 %2 = icmp ugt <16 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>959 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1960 ret <16 x i16> %3961}962 963define <16 x i16> @test27(<16 x i16> %x) {964; SSE-LABEL: test27:965; SSE: # %bb.0:966; SSE-NEXT: movdqa {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]967; SSE-NEXT: paddusw %xmm2, %xmm0968; SSE-NEXT: paddusw %xmm2, %xmm1969; SSE-NEXT: retq970;971; AVX1-LABEL: test27:972; AVX1: # %bb.0:973; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1974; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]975; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1976; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0977; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0978; AVX1-NEXT: retq979;980; AVX2-LABEL: test27:981; AVX2: # %bb.0:982; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0983; AVX2-NEXT: retq984;985; AVX512-LABEL: test27:986; AVX512: # %bb.0:987; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0988; AVX512-NEXT: retq989 %1 = add <16 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>990 %2 = icmp ugt <16 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>991 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1992 ret <16 x i16> %3993}994 995define <16 x i16> @test28(<16 x i16> %x) {996; SSE2-LABEL: test28:997; SSE2: # %bb.0:998; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]999; SSE2-NEXT: paddusw %xmm2, %xmm01000; SSE2-NEXT: paddusw %xmm2, %xmm11001; SSE2-NEXT: retq1002;1003; SSSE3-LABEL: test28:1004; SSSE3: # %bb.0:1005; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]1006; SSSE3-NEXT: paddusw %xmm2, %xmm01007; SSSE3-NEXT: paddusw %xmm2, %xmm11008; SSSE3-NEXT: retq1009;1010; SSE41-LABEL: test28:1011; SSE41: # %bb.0:1012; SSE41-NEXT: pmovsxbw {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]1013; SSE41-NEXT: paddusw %xmm2, %xmm01014; SSE41-NEXT: paddusw %xmm2, %xmm11015; SSE41-NEXT: retq1016;1017; AVX1-LABEL: test28:1018; AVX1: # %bb.0:1019; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm11020; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]1021; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm11022; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm01023; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01024; AVX1-NEXT: retq1025;1026; AVX2-LABEL: test28:1027; AVX2: # %bb.0:1028; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01029; AVX2-NEXT: retq1030;1031; AVX512-LABEL: test28:1032; AVX512: # %bb.0:1033; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01034; AVX512-NEXT: retq1035 %1 = add <16 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>1036 %2 = icmp ugt <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1037 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %11038 ret <16 x i16> %31039}1040 1041define <16 x i16> @test29(<16 x i16> %x) {1042; SSE2-LABEL: test29:1043; SSE2: # %bb.0:1044; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]1045; SSE2-NEXT: movdqa %xmm0, %xmm41046; SSE2-NEXT: pxor %xmm3, %xmm41047; SSE2-NEXT: pxor %xmm1, %xmm31048; SSE2-NEXT: movdqa %xmm3, %xmm21049; SSE2-NEXT: pcmpgtw %xmm1, %xmm21050; SSE2-NEXT: movdqa %xmm4, %xmm11051; SSE2-NEXT: pcmpgtw %xmm0, %xmm11052; SSE2-NEXT: por %xmm4, %xmm11053; SSE2-NEXT: por %xmm3, %xmm21054; SSE2-NEXT: movdqa %xmm1, %xmm01055; SSE2-NEXT: movdqa %xmm2, %xmm11056; SSE2-NEXT: retq1057;1058; SSSE3-LABEL: test29:1059; SSSE3: # %bb.0:1060; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]1061; SSSE3-NEXT: movdqa %xmm0, %xmm41062; SSSE3-NEXT: pxor %xmm3, %xmm41063; SSSE3-NEXT: pxor %xmm1, %xmm31064; SSSE3-NEXT: movdqa %xmm3, %xmm21065; SSSE3-NEXT: pcmpgtw %xmm1, %xmm21066; SSSE3-NEXT: movdqa %xmm4, %xmm11067; SSSE3-NEXT: pcmpgtw %xmm0, %xmm11068; SSSE3-NEXT: por %xmm4, %xmm11069; SSSE3-NEXT: por %xmm3, %xmm21070; SSSE3-NEXT: movdqa %xmm1, %xmm01071; SSSE3-NEXT: movdqa %xmm2, %xmm11072; SSSE3-NEXT: retq1073;1074; SSE41-LABEL: test29:1075; SSE41: # %bb.0:1076; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]1077; SSE41-NEXT: movdqa %xmm0, %xmm31078; SSE41-NEXT: pxor %xmm2, %xmm31079; SSE41-NEXT: pxor %xmm1, %xmm21080; SSE41-NEXT: pmaxuw %xmm2, %xmm11081; SSE41-NEXT: pcmpeqw %xmm2, %xmm11082; SSE41-NEXT: pcmpeqd %xmm4, %xmm41083; SSE41-NEXT: pxor %xmm4, %xmm11084; SSE41-NEXT: pmaxuw %xmm3, %xmm01085; SSE41-NEXT: pcmpeqw %xmm3, %xmm01086; SSE41-NEXT: pxor %xmm4, %xmm01087; SSE41-NEXT: por %xmm3, %xmm01088; SSE41-NEXT: por %xmm2, %xmm11089; SSE41-NEXT: retq1090;1091; AVX1-LABEL: test29:1092; AVX1: # %bb.0:1093; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11094; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21095; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm31096; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm21097; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm21098; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31099; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm21100; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm01101; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm01102; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm01103; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01104; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm01105; AVX1-NEXT: retq1106;1107; AVX2-LABEL: test29:1108; AVX2: # %bb.0:1109; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11110; AVX2-NEXT: vpmaxuw %ymm0, %ymm1, %ymm01111; AVX2-NEXT: vpcmpeqw %ymm0, %ymm1, %ymm01112; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm21113; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm01114; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm01115; AVX2-NEXT: retq1116;1117; AVX512-LABEL: test29:1118; AVX512: # %bb.0:1119; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm11120; AVX512-NEXT: vpcmpltuw %ymm0, %ymm1, %k11121; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm01122; AVX512-NEXT: vmovdqu16 %ymm0, %ymm1 {%k1}1123; AVX512-NEXT: vmovdqa %ymm1, %ymm01124; AVX512-NEXT: retq1125 %1 = xor <16 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>1126 %2 = icmp ult <16 x i16> %1, %x1127 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %11128 ret <16 x i16> %31129}1130 1131define <16 x i16> @test30(<16 x i16> %x) {1132; SSE2-LABEL: test30:1133; SSE2: # %bb.0:1134; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]1135; SSE2-NEXT: paddusw %xmm2, %xmm01136; SSE2-NEXT: paddusw %xmm2, %xmm11137; SSE2-NEXT: retq1138;1139; SSSE3-LABEL: test30:1140; SSSE3: # %bb.0:1141; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]1142; SSSE3-NEXT: paddusw %xmm2, %xmm01143; SSSE3-NEXT: paddusw %xmm2, %xmm11144; SSSE3-NEXT: retq1145;1146; SSE41-LABEL: test30:1147; SSE41: # %bb.0:1148; SSE41-NEXT: pmovsxbw {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]1149; SSE41-NEXT: paddusw %xmm2, %xmm01150; SSE41-NEXT: paddusw %xmm2, %xmm11151; SSE41-NEXT: retq1152;1153; AVX1-LABEL: test30:1154; AVX1: # %bb.0:1155; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm11156; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]1157; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm11158; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm01159; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01160; AVX1-NEXT: retq1161;1162; AVX2-LABEL: test30:1163; AVX2: # %bb.0:1164; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01165; AVX2-NEXT: retq1166;1167; AVX512-LABEL: test30:1168; AVX512: # %bb.0:1169; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01170; AVX512-NEXT: retq1171 %1 = add <16 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>1172 %2 = icmp ugt <16 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>1173 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %11174 ret <16 x i16> %31175}1176 1177define <32 x i16> @test31(<32 x i16> %x) {1178; SSE-LABEL: test31:1179; SSE: # %bb.0:1180; SSE-NEXT: pcmpeqd %xmm4, %xmm41181; SSE-NEXT: movdqa %xmm3, %xmm51182; SSE-NEXT: psubw %xmm4, %xmm51183; SSE-NEXT: movdqa %xmm2, %xmm61184; SSE-NEXT: psubw %xmm4, %xmm61185; SSE-NEXT: movdqa %xmm1, %xmm71186; SSE-NEXT: psubw %xmm4, %xmm71187; SSE-NEXT: movdqa %xmm0, %xmm81188; SSE-NEXT: psubw %xmm4, %xmm81189; SSE-NEXT: pcmpeqw %xmm4, %xmm31190; SSE-NEXT: por %xmm5, %xmm31191; SSE-NEXT: pcmpeqw %xmm4, %xmm21192; SSE-NEXT: por %xmm6, %xmm21193; SSE-NEXT: pcmpeqw %xmm4, %xmm11194; SSE-NEXT: por %xmm7, %xmm11195; SSE-NEXT: pcmpeqw %xmm4, %xmm01196; SSE-NEXT: por %xmm8, %xmm01197; SSE-NEXT: retq1198;1199; AVX1-LABEL: test31:1200; AVX1: # %bb.0:1201; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21202; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm31203; AVX1-NEXT: vpsubw %xmm3, %xmm2, %xmm41204; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm51205; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm41206; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm51207; AVX1-NEXT: vpsubw %xmm3, %xmm5, %xmm61208; AVX1-NEXT: vpsubw %xmm3, %xmm0, %xmm71209; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm61210; AVX1-NEXT: vpcmpeqw %xmm3, %xmm2, %xmm21211; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm11212; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11213; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm11214; AVX1-NEXT: vpcmpeqw %xmm3, %xmm5, %xmm21215; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm01216; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01217; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm01218; AVX1-NEXT: retq1219;1220; AVX2-LABEL: test31:1221; AVX2: # %bb.0:1222; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm21223; AVX2-NEXT: vpsubw %ymm2, %ymm1, %ymm31224; AVX2-NEXT: vpsubw %ymm2, %ymm0, %ymm41225; AVX2-NEXT: vpcmpeqw %ymm2, %ymm1, %ymm11226; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm11227; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm01228; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm01229; AVX2-NEXT: retq1230;1231; AVX512-LABEL: test31:1232; AVX512: # %bb.0:1233; AVX512-NEXT: vpternlogd {{.*#+}} zmm1 = -11234; AVX512-NEXT: vpcmpneqw %zmm1, %zmm0, %k11235; AVX512-NEXT: vpsubw %zmm1, %zmm0, %zmm1 {%k1}1236; AVX512-NEXT: vmovdqa64 %zmm1, %zmm01237; AVX512-NEXT: retq1238 %1 = add <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1239 %2 = icmp eq <32 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>1240 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11241 ret <32 x i16> %31242}1243 1244define <32 x i16> @test32(<32 x i16> %x) {1245; SSE-LABEL: test32:1246; SSE: # %bb.0:1247; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]1248; SSE-NEXT: paddusw %xmm4, %xmm01249; SSE-NEXT: paddusw %xmm4, %xmm11250; SSE-NEXT: paddusw %xmm4, %xmm21251; SSE-NEXT: paddusw %xmm4, %xmm31252; SSE-NEXT: retq1253;1254; AVX1-LABEL: test32:1255; AVX1: # %bb.0:1256; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21257; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]1258; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21259; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm01260; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01261; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21262; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21263; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm11264; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11265; AVX1-NEXT: retq1266;1267; AVX2-LABEL: test32:1268; AVX2: # %bb.0:1269; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]1270; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm01271; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm11272; AVX2-NEXT: retq1273;1274; AVX512-LABEL: test32:1275; AVX512: # %bb.0:1276; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01277; AVX512-NEXT: retq1278 %1 = add <32 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>1279 %2 = icmp ugt <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>1280 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11281 ret <32 x i16> %31282}1283 1284define <32 x i16> @test33(<32 x i16> %x) {1285; SSE-LABEL: test33:1286; SSE: # %bb.0:1287; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]1288; SSE-NEXT: paddusw %xmm4, %xmm01289; SSE-NEXT: paddusw %xmm4, %xmm11290; SSE-NEXT: paddusw %xmm4, %xmm21291; SSE-NEXT: paddusw %xmm4, %xmm31292; SSE-NEXT: retq1293;1294; AVX1-LABEL: test33:1295; AVX1: # %bb.0:1296; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21297; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]1298; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21299; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm01300; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01301; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21302; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21303; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm11304; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11305; AVX1-NEXT: retq1306;1307; AVX2-LABEL: test33:1308; AVX2: # %bb.0:1309; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]1310; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm01311; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm11312; AVX2-NEXT: retq1313;1314; AVX512-LABEL: test33:1315; AVX512: # %bb.0:1316; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01317; AVX512-NEXT: retq1318 %1 = add <32 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>1319 %2 = icmp ugt <32 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>1320 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11321 ret <32 x i16> %31322}1323 1324define <32 x i16> @test34(<32 x i16> %x) {1325; SSE2-LABEL: test34:1326; SSE2: # %bb.0:1327; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]1328; SSE2-NEXT: paddusw %xmm4, %xmm01329; SSE2-NEXT: paddusw %xmm4, %xmm11330; SSE2-NEXT: paddusw %xmm4, %xmm21331; SSE2-NEXT: paddusw %xmm4, %xmm31332; SSE2-NEXT: retq1333;1334; SSSE3-LABEL: test34:1335; SSSE3: # %bb.0:1336; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]1337; SSSE3-NEXT: paddusw %xmm4, %xmm01338; SSSE3-NEXT: paddusw %xmm4, %xmm11339; SSSE3-NEXT: paddusw %xmm4, %xmm21340; SSSE3-NEXT: paddusw %xmm4, %xmm31341; SSSE3-NEXT: retq1342;1343; SSE41-LABEL: test34:1344; SSE41: # %bb.0:1345; SSE41-NEXT: pmovsxbw {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]1346; SSE41-NEXT: paddusw %xmm4, %xmm01347; SSE41-NEXT: paddusw %xmm4, %xmm11348; SSE41-NEXT: paddusw %xmm4, %xmm21349; SSE41-NEXT: paddusw %xmm4, %xmm31350; SSE41-NEXT: retq1351;1352; AVX1-LABEL: test34:1353; AVX1: # %bb.0:1354; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21355; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]1356; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21357; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm01358; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01359; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21360; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21361; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm11362; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11363; AVX1-NEXT: retq1364;1365; AVX2-LABEL: test34:1366; AVX2: # %bb.0:1367; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]1368; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm01369; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm11370; AVX2-NEXT: retq1371;1372; AVX512-LABEL: test34:1373; AVX512: # %bb.0:1374; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01375; AVX512-NEXT: retq1376 %1 = add <32 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>1377 %2 = icmp ugt <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>1378 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11379 ret <32 x i16> %31380}1381 1382define <32 x i16> @test35(<32 x i16> %x) {1383; SSE2-LABEL: test35:1384; SSE2: # %bb.0:1385; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]1386; SSE2-NEXT: movdqa %xmm0, %xmm61387; SSE2-NEXT: pxor %xmm5, %xmm61388; SSE2-NEXT: movdqa %xmm1, %xmm71389; SSE2-NEXT: pxor %xmm5, %xmm71390; SSE2-NEXT: movdqa %xmm2, %xmm81391; SSE2-NEXT: pxor %xmm5, %xmm81392; SSE2-NEXT: pxor %xmm3, %xmm51393; SSE2-NEXT: movdqa %xmm5, %xmm41394; SSE2-NEXT: pcmpgtw %xmm3, %xmm41395; SSE2-NEXT: movdqa %xmm8, %xmm31396; SSE2-NEXT: pcmpgtw %xmm2, %xmm31397; SSE2-NEXT: movdqa %xmm7, %xmm21398; SSE2-NEXT: pcmpgtw %xmm1, %xmm21399; SSE2-NEXT: movdqa %xmm6, %xmm11400; SSE2-NEXT: pcmpgtw %xmm0, %xmm11401; SSE2-NEXT: por %xmm6, %xmm11402; SSE2-NEXT: por %xmm7, %xmm21403; SSE2-NEXT: por %xmm8, %xmm31404; SSE2-NEXT: por %xmm5, %xmm41405; SSE2-NEXT: movdqa %xmm1, %xmm01406; SSE2-NEXT: movdqa %xmm2, %xmm11407; SSE2-NEXT: movdqa %xmm3, %xmm21408; SSE2-NEXT: movdqa %xmm4, %xmm31409; SSE2-NEXT: retq1410;1411; SSSE3-LABEL: test35:1412; SSSE3: # %bb.0:1413; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]1414; SSSE3-NEXT: movdqa %xmm0, %xmm61415; SSSE3-NEXT: pxor %xmm5, %xmm61416; SSSE3-NEXT: movdqa %xmm1, %xmm71417; SSSE3-NEXT: pxor %xmm5, %xmm71418; SSSE3-NEXT: movdqa %xmm2, %xmm81419; SSSE3-NEXT: pxor %xmm5, %xmm81420; SSSE3-NEXT: pxor %xmm3, %xmm51421; SSSE3-NEXT: movdqa %xmm5, %xmm41422; SSSE3-NEXT: pcmpgtw %xmm3, %xmm41423; SSSE3-NEXT: movdqa %xmm8, %xmm31424; SSSE3-NEXT: pcmpgtw %xmm2, %xmm31425; SSSE3-NEXT: movdqa %xmm7, %xmm21426; SSSE3-NEXT: pcmpgtw %xmm1, %xmm21427; SSSE3-NEXT: movdqa %xmm6, %xmm11428; SSSE3-NEXT: pcmpgtw %xmm0, %xmm11429; SSSE3-NEXT: por %xmm6, %xmm11430; SSSE3-NEXT: por %xmm7, %xmm21431; SSSE3-NEXT: por %xmm8, %xmm31432; SSSE3-NEXT: por %xmm5, %xmm41433; SSSE3-NEXT: movdqa %xmm1, %xmm01434; SSSE3-NEXT: movdqa %xmm2, %xmm11435; SSSE3-NEXT: movdqa %xmm3, %xmm21436; SSSE3-NEXT: movdqa %xmm4, %xmm31437; SSSE3-NEXT: retq1438;1439; SSE41-LABEL: test35:1440; SSE41: # %bb.0:1441; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]1442; SSE41-NEXT: movdqa %xmm0, %xmm51443; SSE41-NEXT: pxor %xmm4, %xmm51444; SSE41-NEXT: movdqa %xmm1, %xmm61445; SSE41-NEXT: pxor %xmm4, %xmm61446; SSE41-NEXT: movdqa %xmm2, %xmm71447; SSE41-NEXT: pxor %xmm4, %xmm71448; SSE41-NEXT: pxor %xmm3, %xmm41449; SSE41-NEXT: pmaxuw %xmm4, %xmm31450; SSE41-NEXT: pcmpeqw %xmm4, %xmm31451; SSE41-NEXT: pcmpeqd %xmm8, %xmm81452; SSE41-NEXT: pxor %xmm8, %xmm31453; SSE41-NEXT: pmaxuw %xmm7, %xmm21454; SSE41-NEXT: pcmpeqw %xmm7, %xmm21455; SSE41-NEXT: pxor %xmm8, %xmm21456; SSE41-NEXT: pmaxuw %xmm6, %xmm11457; SSE41-NEXT: pcmpeqw %xmm6, %xmm11458; SSE41-NEXT: pxor %xmm8, %xmm11459; SSE41-NEXT: pmaxuw %xmm5, %xmm01460; SSE41-NEXT: pcmpeqw %xmm5, %xmm01461; SSE41-NEXT: pxor %xmm8, %xmm01462; SSE41-NEXT: por %xmm5, %xmm01463; SSE41-NEXT: por %xmm6, %xmm11464; SSE41-NEXT: por %xmm7, %xmm21465; SSE41-NEXT: por %xmm4, %xmm31466; SSE41-NEXT: retq1467;1468; AVX1-LABEL: test35:1469; AVX1: # %bb.0:1470; AVX1-NEXT: vbroadcastss {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]1471; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm31472; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm21473; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm41474; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm51475; AVX1-NEXT: vpmaxuw %xmm5, %xmm4, %xmm51476; AVX1-NEXT: vpcmpeqw %xmm5, %xmm4, %xmm41477; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm51478; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm41479; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm11480; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm11481; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm11482; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm11483; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm41484; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm61485; AVX1-NEXT: vpmaxuw %xmm6, %xmm4, %xmm61486; AVX1-NEXT: vpcmpeqw %xmm6, %xmm4, %xmm41487; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm41488; AVX1-NEXT: vpmaxuw %xmm0, %xmm3, %xmm01489; AVX1-NEXT: vpcmpeqw %xmm0, %xmm3, %xmm01490; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm01491; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm01492; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm01493; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm11494; AVX1-NEXT: retq1495;1496; AVX2-LABEL: test35:1497; AVX2: # %bb.0:1498; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]1499; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm31500; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm21501; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm11502; AVX2-NEXT: vpcmpeqw %ymm1, %ymm2, %ymm11503; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm41504; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm11505; AVX2-NEXT: vpmaxuw %ymm0, %ymm3, %ymm01506; AVX2-NEXT: vpcmpeqw %ymm0, %ymm3, %ymm01507; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm01508; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm01509; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm11510; AVX2-NEXT: retq1511;1512; AVX512-LABEL: test35:1513; AVX512: # %bb.0:1514; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm11515; AVX512-NEXT: vpcmpltuw %zmm0, %zmm1, %k11516; AVX512-NEXT: vpternlogd {{.*#+}} zmm0 = -11517; AVX512-NEXT: vmovdqu16 %zmm0, %zmm1 {%k1}1518; AVX512-NEXT: vmovdqa64 %zmm1, %zmm01519; AVX512-NEXT: retq1520 %1 = xor <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>1521 %2 = icmp ult <32 x i16> %1, %x1522 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11523 ret <32 x i16> %31524}1525 1526define <32 x i16> @test36(<32 x i16> %x) {1527; SSE2-LABEL: test36:1528; SSE2: # %bb.0:1529; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]1530; SSE2-NEXT: paddusw %xmm4, %xmm01531; SSE2-NEXT: paddusw %xmm4, %xmm11532; SSE2-NEXT: paddusw %xmm4, %xmm21533; SSE2-NEXT: paddusw %xmm4, %xmm31534; SSE2-NEXT: retq1535;1536; SSSE3-LABEL: test36:1537; SSSE3: # %bb.0:1538; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]1539; SSSE3-NEXT: paddusw %xmm4, %xmm01540; SSSE3-NEXT: paddusw %xmm4, %xmm11541; SSSE3-NEXT: paddusw %xmm4, %xmm21542; SSSE3-NEXT: paddusw %xmm4, %xmm31543; SSSE3-NEXT: retq1544;1545; SSE41-LABEL: test36:1546; SSE41: # %bb.0:1547; SSE41-NEXT: pmovsxbw {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]1548; SSE41-NEXT: paddusw %xmm4, %xmm01549; SSE41-NEXT: paddusw %xmm4, %xmm11550; SSE41-NEXT: paddusw %xmm4, %xmm21551; SSE41-NEXT: paddusw %xmm4, %xmm31552; SSE41-NEXT: retq1553;1554; AVX1-LABEL: test36:1555; AVX1: # %bb.0:1556; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21557; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]1558; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21559; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm01560; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01561; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21562; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm21563; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm11564; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11565; AVX1-NEXT: retq1566;1567; AVX2-LABEL: test36:1568; AVX2: # %bb.0:1569; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]1570; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm01571; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm11572; AVX2-NEXT: retq1573;1574; AVX512-LABEL: test36:1575; AVX512: # %bb.0:1576; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01577; AVX512-NEXT: retq1578 %1 = add <32 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>1579 %2 = icmp ugt <32 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>1580 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %11581 ret <32 x i16> %31582}1583 1584define void @addus_v8i8(ptr %p1, ptr %p2) {1585; SSE-LABEL: addus_v8i8:1586; SSE: # %bb.0:1587; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero1588; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero1589; SSE-NEXT: paddusb %xmm0, %xmm11590; SSE-NEXT: movq %xmm1, (%rdi)1591; SSE-NEXT: retq1592;1593; AVX-LABEL: addus_v8i8:1594; AVX: # %bb.0:1595; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero1596; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero1597; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm01598; AVX-NEXT: vmovq %xmm0, (%rdi)1599; AVX-NEXT: retq1600 %ld1 = load <8 x i8>, ptr %p1, align 81601 %ld2 = load <8 x i8>, ptr %p2, align 81602 %1 = add <8 x i8> %ld2, %ld11603 %2 = icmp ugt <8 x i8> %ld1, %11604 %sh3 = select <8 x i1> %2, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i8> %11605 store <8 x i8> %sh3, ptr %p1, align 81606 ret void1607}1608 1609define void @addus_v4i8(ptr %p1, ptr %p2) {1610; SSE-LABEL: addus_v4i8:1611; SSE: # %bb.0:1612; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1613; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero1614; SSE-NEXT: paddusb %xmm0, %xmm11615; SSE-NEXT: movd %xmm1, (%rdi)1616; SSE-NEXT: retq1617;1618; AVX-LABEL: addus_v4i8:1619; AVX: # %bb.0:1620; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero1621; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero1622; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm01623; AVX-NEXT: vmovd %xmm0, (%rdi)1624; AVX-NEXT: retq1625 %ld1 = load <4 x i8>, ptr %p1, align 41626 %ld2 = load <4 x i8>, ptr %p2, align 41627 %1 = add <4 x i8> %ld2, %ld11628 %2 = icmp ugt <4 x i8> %ld1, %11629 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %11630 store <4 x i8> %sh3, ptr %p1, align 41631 ret void1632}1633 1634define void @addus_v2i8(ptr %p1, ptr %p2) {1635; SSE2-LABEL: addus_v2i8:1636; SSE2: # %bb.0:1637; SSE2-NEXT: movzwl (%rdi), %eax1638; SSE2-NEXT: movd %eax, %xmm01639; SSE2-NEXT: movzwl (%rsi), %eax1640; SSE2-NEXT: movd %eax, %xmm11641; SSE2-NEXT: paddusb %xmm0, %xmm11642; SSE2-NEXT: movd %xmm1, %eax1643; SSE2-NEXT: movw %ax, (%rdi)1644; SSE2-NEXT: retq1645;1646; SSSE3-LABEL: addus_v2i8:1647; SSSE3: # %bb.0:1648; SSSE3-NEXT: movzwl (%rdi), %eax1649; SSSE3-NEXT: movd %eax, %xmm01650; SSSE3-NEXT: movzwl (%rsi), %eax1651; SSSE3-NEXT: movd %eax, %xmm11652; SSSE3-NEXT: paddusb %xmm0, %xmm11653; SSSE3-NEXT: movd %xmm1, %eax1654; SSSE3-NEXT: movw %ax, (%rdi)1655; SSSE3-NEXT: retq1656;1657; SSE41-LABEL: addus_v2i8:1658; SSE41: # %bb.0:1659; SSE41-NEXT: movzwl (%rdi), %eax1660; SSE41-NEXT: movd %eax, %xmm01661; SSE41-NEXT: movzwl (%rsi), %eax1662; SSE41-NEXT: movd %eax, %xmm11663; SSE41-NEXT: paddusb %xmm0, %xmm11664; SSE41-NEXT: pextrw $0, %xmm1, (%rdi)1665; SSE41-NEXT: retq1666;1667; AVX-LABEL: addus_v2i8:1668; AVX: # %bb.0:1669; AVX-NEXT: movzwl (%rdi), %eax1670; AVX-NEXT: vmovd %eax, %xmm01671; AVX-NEXT: movzwl (%rsi), %eax1672; AVX-NEXT: vmovd %eax, %xmm11673; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm01674; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)1675; AVX-NEXT: retq1676 %ld1 = load <2 x i8>, ptr %p1, align 21677 %ld2 = load <2 x i8>, ptr %p2, align 21678 %1 = add <2 x i8> %ld2, %ld11679 %2 = icmp ugt <2 x i8> %ld1, %11680 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %11681 store <2 x i8> %sh3, ptr %p1, align 21682 ret void1683}1684 1685define void @addus_v4i16(ptr %p1, ptr %p2) {1686; SSE-LABEL: addus_v4i16:1687; SSE: # %bb.0:1688; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero1689; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero1690; SSE-NEXT: paddusw %xmm0, %xmm11691; SSE-NEXT: movq %xmm1, (%rdi)1692; SSE-NEXT: retq1693;1694; AVX-LABEL: addus_v4i16:1695; AVX: # %bb.0:1696; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero1697; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero1698; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm01699; AVX-NEXT: vmovq %xmm0, (%rdi)1700; AVX-NEXT: retq1701 %ld1 = load <4 x i16>, ptr %p1, align 41702 %ld2 = load <4 x i16>, ptr %p2, align 41703 %1 = add <4 x i16> %ld2, %ld11704 %2 = icmp ugt <4 x i16> %ld1, %11705 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %11706 store <4 x i16> %sh3, ptr %p1, align 41707 ret void1708}1709 1710define void @addus_v2i16(ptr %p1, ptr %p2) {1711; SSE-LABEL: addus_v2i16:1712; SSE: # %bb.0:1713; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1714; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero1715; SSE-NEXT: paddusw %xmm0, %xmm11716; SSE-NEXT: movd %xmm1, (%rdi)1717; SSE-NEXT: retq1718;1719; AVX-LABEL: addus_v2i16:1720; AVX: # %bb.0:1721; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero1722; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero1723; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm01724; AVX-NEXT: vmovd %xmm0, (%rdi)1725; AVX-NEXT: retq1726 %ld1 = load <2 x i16>, ptr %p1, align 21727 %ld2 = load <2 x i16>, ptr %p2, align 21728 %1 = add <2 x i16> %ld2, %ld11729 %2 = icmp ugt <2 x i16> %ld1, %11730 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %11731 store <2 x i16> %sh3, ptr %p1, align 21732 ret void1733}1734