1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512 8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512 9 10; FIXME: should be paddusb 11define <16 x i8> @test1(<16 x i8> %x) { 12; SSE-LABEL: test1: 13; SSE: # %bb.0: 14; SSE-NEXT: pcmpeqd %xmm1, %xmm1 15; SSE-NEXT: movdqa %xmm0, %xmm2 16; SSE-NEXT: psubb %xmm1, %xmm2 17; SSE-NEXT: pcmpeqb %xmm1, %xmm0 18; SSE-NEXT: por %xmm2, %xmm0 19; SSE-NEXT: retq 20; 21; AVX1-LABEL: test1: 22; AVX1: # %bb.0: 23; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 24; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm2 25; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 26; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0 27; AVX1-NEXT: retq 28; 29; AVX2-LABEL: test1: 30; AVX2: # %bb.0: 31; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 32; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm2 33; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 34; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0 35; AVX2-NEXT: retq 36; 37; AVX512-LABEL: test1: 38; AVX512: # %bb.0: 39; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 40; AVX512-NEXT: vpsubb %xmm2, %xmm0, %xmm1 41; AVX512-NEXT: vpcmpeqb %xmm2, %xmm0, %k1 42; AVX512-NEXT: vmovdqu8 %xmm2, %xmm1 {%k1} 43; AVX512-NEXT: vmovdqa %xmm1, %xmm0 44; AVX512-NEXT: retq 45 %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> %1 48 ret <16 x i8> %3 49} 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), %xmm0 55; SSE-NEXT: retq 56; 57; AVX-LABEL: test2: 58; AVX: # %bb.0: 59; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 60; AVX-NEXT: retq 61 %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> %1 64 ret <16 x i8> %3 65} 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), %xmm0 71; SSE-NEXT: retq 72; 73; AVX-LABEL: test3: 74; AVX: # %bb.0: 75; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 76; AVX-NEXT: retq 77 %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> %1 80 ret <16 x i8> %3 81} 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), %xmm0 87; SSE-NEXT: retq 88; 89; AVX-LABEL: test4: 90; AVX: # %bb.0: 91; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 92; AVX-NEXT: retq 93 %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> %1 96 ret <16 x i8> %3 97} 98 99; FIXME: should be paddusb 100define <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, %xmm1 105; SSE-NEXT: pmaxub %xmm1, %xmm0 106; SSE-NEXT: pcmpeqb %xmm1, %xmm0 107; SSE-NEXT: pcmpeqd %xmm2, %xmm2 108; SSE-NEXT: pxor %xmm2, %xmm0 109; SSE-NEXT: por %xmm1, %xmm0 110; SSE-NEXT: retq 111; 112; AVX1-LABEL: test5: 113; AVX1: # %bb.0: 114; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 115; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0 116; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0 117; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 118; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 119; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 120; AVX1-NEXT: retq 121; 122; AVX2-LABEL: test5: 123; AVX2: # %bb.0: 124; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 125; AVX2-NEXT: vpmaxub %xmm0, %xmm1, %xmm0 126; AVX2-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0 127; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 128; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0 129; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0 130; AVX2-NEXT: retq 131; 132; AVX512-LABEL: test5: 133; AVX512: # %bb.0: 134; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1 135; AVX512-NEXT: vpcmpltub %xmm0, %xmm1, %k1 136; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 137; AVX512-NEXT: vmovdqu8 %xmm0, %xmm1 {%k1} 138; AVX512-NEXT: vmovdqa %xmm1, %xmm0 139; AVX512-NEXT: retq 140 %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, %x 142 %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> %1 143 ret <16 x i8> %3 144} 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), %xmm0 150; SSE-NEXT: retq 151; 152; AVX-LABEL: test6: 153; AVX: # %bb.0: 154; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 155; AVX-NEXT: retq 156 %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> %1 159 ret <16 x i8> %3 160} 161 162define <32 x i8> @test7(<32 x i8> %x) { 163; SSE-LABEL: test7: 164; SSE: # %bb.0: 165; SSE-NEXT: pcmpeqd %xmm2, %xmm2 166; SSE-NEXT: movdqa %xmm1, %xmm3 167; SSE-NEXT: psubb %xmm2, %xmm3 168; SSE-NEXT: movdqa %xmm0, %xmm4 169; SSE-NEXT: psubb %xmm2, %xmm4 170; SSE-NEXT: pcmpeqb %xmm2, %xmm1 171; SSE-NEXT: por %xmm3, %xmm1 172; SSE-NEXT: pcmpeqb %xmm2, %xmm0 173; SSE-NEXT: por %xmm4, %xmm0 174; SSE-NEXT: retq 175; 176; AVX1-LABEL: test7: 177; AVX1: # %bb.0: 178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 179; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 180; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm3 181; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm4 182; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 183; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1 184; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0 185; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 186; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0 187; AVX1-NEXT: retq 188; 189; AVX2-LABEL: test7: 190; AVX2: # %bb.0: 191; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 192; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm2 193; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 194; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0 195; AVX2-NEXT: retq 196; 197; AVX512-LABEL: test7: 198; AVX512: # %bb.0: 199; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 200; AVX512-NEXT: vpsubb %ymm2, %ymm0, %ymm1 201; AVX512-NEXT: vpcmpeqb %ymm2, %ymm0, %k1 202; AVX512-NEXT: vmovdqu8 %ymm2, %ymm1 {%k1} 203; AVX512-NEXT: vmovdqa %ymm1, %ymm0 204; AVX512-NEXT: retq 205 %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> %1 208 ret <32 x i8> %3 209} 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, %xmm0 216; SSE-NEXT: paddusb %xmm2, %xmm1 217; SSE-NEXT: retq 218; 219; AVX1-LABEL: test8: 220; AVX1: # %bb.0: 221; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 222; 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, %xmm1 224; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0 225; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 226; AVX1-NEXT: retq 227; 228; AVX2-LABEL: test8: 229; AVX2: # %bb.0: 230; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 231; AVX2-NEXT: retq 232; 233; AVX512-LABEL: test8: 234; AVX512: # %bb.0: 235; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 236; AVX512-NEXT: retq 237 %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> %1 240 ret <32 x i8> %3 241} 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, %xmm0 248; SSE-NEXT: paddusb %xmm2, %xmm1 249; SSE-NEXT: retq 250; 251; AVX1-LABEL: test9: 252; AVX1: # %bb.0: 253; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 254; 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, %xmm1 256; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0 257; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 258; AVX1-NEXT: retq 259; 260; AVX2-LABEL: test9: 261; AVX2: # %bb.0: 262; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 263; AVX2-NEXT: retq 264; 265; AVX512-LABEL: test9: 266; AVX512: # %bb.0: 267; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 268; AVX512-NEXT: retq 269 %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> %1 272 ret <32 x i8> %3 273} 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, %xmm0 280; SSE-NEXT: paddusb %xmm2, %xmm1 281; SSE-NEXT: retq 282; 283; AVX1-LABEL: test10: 284; AVX1: # %bb.0: 285; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 286; 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, %xmm1 288; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0 289; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 290; AVX1-NEXT: retq 291; 292; AVX2-LABEL: test10: 293; AVX2: # %bb.0: 294; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 295; AVX2-NEXT: retq 296; 297; AVX512-LABEL: test10: 298; AVX512: # %bb.0: 299; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 300; AVX512-NEXT: retq 301 %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> %1 304 ret <32 x i8> %3 305} 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, %xmm3 312; SSE-NEXT: pxor %xmm2, %xmm3 313; SSE-NEXT: pxor %xmm1, %xmm2 314; SSE-NEXT: pmaxub %xmm2, %xmm1 315; SSE-NEXT: pcmpeqb %xmm2, %xmm1 316; SSE-NEXT: pcmpeqd %xmm4, %xmm4 317; SSE-NEXT: pxor %xmm4, %xmm1 318; SSE-NEXT: pmaxub %xmm3, %xmm0 319; SSE-NEXT: pcmpeqb %xmm3, %xmm0 320; SSE-NEXT: pxor %xmm4, %xmm0 321; SSE-NEXT: por %xmm3, %xmm0 322; SSE-NEXT: por %xmm2, %xmm1 323; SSE-NEXT: retq 324; 325; AVX1-LABEL: test11: 326; AVX1: # %bb.0: 327; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 328; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 329; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 330; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 331; AVX1-NEXT: vpcmpeqb %xmm2, %xmm3, %xmm2 332; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 333; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 334; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0 335; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0 336; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0 337; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 338; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 339; AVX1-NEXT: retq 340; 341; AVX2-LABEL: test11: 342; AVX2: # %bb.0: 343; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 344; AVX2-NEXT: vpmaxub %ymm0, %ymm1, %ymm0 345; AVX2-NEXT: vpcmpeqb %ymm0, %ymm1, %ymm0 346; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 347; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 348; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 349; AVX2-NEXT: retq 350; 351; AVX512-LABEL: test11: 352; AVX512: # %bb.0: 353; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1 354; AVX512-NEXT: vpcmpltub %ymm0, %ymm1, %k1 355; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 356; AVX512-NEXT: vmovdqu8 %ymm0, %ymm1 {%k1} 357; AVX512-NEXT: vmovdqa %ymm1, %ymm0 358; AVX512-NEXT: retq 359 %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, %x 361 %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> %1 362 ret <32 x i8> %3 363} 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, %xmm0 370; SSE-NEXT: paddusb %xmm2, %xmm1 371; SSE-NEXT: retq 372; 373; AVX1-LABEL: test12: 374; AVX1: # %bb.0: 375; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 376; 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, %xmm1 378; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0 379; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 380; AVX1-NEXT: retq 381; 382; AVX2-LABEL: test12: 383; AVX2: # %bb.0: 384; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 385; AVX2-NEXT: retq 386; 387; AVX512-LABEL: test12: 388; AVX512: # %bb.0: 389; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 390; AVX512-NEXT: retq 391 %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> %1 394 ret <32 x i8> %3 395} 396 397define <64 x i8> @test13(<64 x i8> %x) { 398; SSE-LABEL: test13: 399; SSE: # %bb.0: 400; SSE-NEXT: pcmpeqd %xmm4, %xmm4 401; SSE-NEXT: movdqa %xmm3, %xmm5 402; SSE-NEXT: psubb %xmm4, %xmm5 403; SSE-NEXT: movdqa %xmm2, %xmm6 404; SSE-NEXT: psubb %xmm4, %xmm6 405; SSE-NEXT: movdqa %xmm1, %xmm7 406; SSE-NEXT: psubb %xmm4, %xmm7 407; SSE-NEXT: movdqa %xmm0, %xmm8 408; SSE-NEXT: psubb %xmm4, %xmm8 409; SSE-NEXT: pcmpeqb %xmm4, %xmm3 410; SSE-NEXT: por %xmm5, %xmm3 411; SSE-NEXT: pcmpeqb %xmm4, %xmm2 412; SSE-NEXT: por %xmm6, %xmm2 413; SSE-NEXT: pcmpeqb %xmm4, %xmm1 414; SSE-NEXT: por %xmm7, %xmm1 415; SSE-NEXT: pcmpeqb %xmm4, %xmm0 416; SSE-NEXT: por %xmm8, %xmm0 417; SSE-NEXT: retq 418; 419; AVX1-LABEL: test13: 420; AVX1: # %bb.0: 421; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 422; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 423; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm4 424; AVX1-NEXT: vpsubb %xmm3, %xmm1, %xmm5 425; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 426; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 427; AVX1-NEXT: vpsubb %xmm3, %xmm5, %xmm6 428; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm7 429; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6 430; AVX1-NEXT: vpcmpeqb %xmm3, %xmm2, %xmm2 431; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1 432; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 433; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1 434; AVX1-NEXT: vpcmpeqb %xmm3, %xmm5, %xmm2 435; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 436; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 437; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0 438; AVX1-NEXT: retq 439; 440; AVX2-LABEL: test13: 441; AVX2: # %bb.0: 442; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 443; AVX2-NEXT: vpsubb %ymm2, %ymm1, %ymm3 444; AVX2-NEXT: vpsubb %ymm2, %ymm0, %ymm4 445; AVX2-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm1 446; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1 447; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0 448; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0 449; AVX2-NEXT: retq 450; 451; AVX512-LABEL: test13: 452; AVX512: # %bb.0: 453; AVX512-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 454; AVX512-NEXT: vpcmpneqb %zmm1, %zmm0, %k1 455; AVX512-NEXT: vpsubb %zmm1, %zmm0, %zmm1 {%k1} 456; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0 457; AVX512-NEXT: retq 458 %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> %1 461 ret <64 x i8> %3 462} 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, %xmm0 469; SSE-NEXT: paddusb %xmm4, %xmm1 470; SSE-NEXT: paddusb %xmm4, %xmm2 471; SSE-NEXT: paddusb %xmm4, %xmm3 472; SSE-NEXT: retq 473; 474; AVX1-LABEL: test14: 475; AVX1: # %bb.0: 476; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 477; 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, %xmm2 479; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0 480; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 481; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 482; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2 483; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1 484; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 485; AVX1-NEXT: retq 486; 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, %ymm0 491; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1 492; AVX2-NEXT: retq 493; 494; AVX512-LABEL: test14: 495; AVX512: # %bb.0: 496; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 497; AVX512-NEXT: retq 498 %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> %1 501 ret <64 x i8> %3 502} 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, %xmm0 509; SSE-NEXT: paddusb %xmm4, %xmm1 510; SSE-NEXT: paddusb %xmm4, %xmm2 511; SSE-NEXT: paddusb %xmm4, %xmm3 512; SSE-NEXT: retq 513; 514; AVX1-LABEL: test15: 515; AVX1: # %bb.0: 516; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 517; 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, %xmm2 519; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0 520; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 521; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 522; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2 523; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1 524; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 525; AVX1-NEXT: retq 526; 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, %ymm0 531; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1 532; AVX2-NEXT: retq 533; 534; AVX512-LABEL: test15: 535; AVX512: # %bb.0: 536; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 537; AVX512-NEXT: retq 538 %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> %1 541 ret <64 x i8> %3 542} 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, %xmm0 549; SSE-NEXT: paddusb %xmm4, %xmm1 550; SSE-NEXT: paddusb %xmm4, %xmm2 551; SSE-NEXT: paddusb %xmm4, %xmm3 552; SSE-NEXT: retq 553; 554; AVX1-LABEL: test16: 555; AVX1: # %bb.0: 556; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 557; 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, %xmm2 559; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0 560; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 561; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 562; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2 563; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1 564; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 565; AVX1-NEXT: retq 566; 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, %ymm0 571; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1 572; AVX2-NEXT: retq 573; 574; AVX512-LABEL: test16: 575; AVX512: # %bb.0: 576; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 577; AVX512-NEXT: retq 578 %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> %1 581 ret <64 x i8> %3 582} 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, %xmm5 589; SSE-NEXT: pxor %xmm4, %xmm5 590; SSE-NEXT: movdqa %xmm1, %xmm6 591; SSE-NEXT: pxor %xmm4, %xmm6 592; SSE-NEXT: movdqa %xmm2, %xmm7 593; SSE-NEXT: pxor %xmm4, %xmm7 594; SSE-NEXT: pxor %xmm3, %xmm4 595; SSE-NEXT: pmaxub %xmm4, %xmm3 596; SSE-NEXT: pcmpeqb %xmm4, %xmm3 597; SSE-NEXT: pcmpeqd %xmm8, %xmm8 598; SSE-NEXT: pxor %xmm8, %xmm3 599; SSE-NEXT: pmaxub %xmm7, %xmm2 600; SSE-NEXT: pcmpeqb %xmm7, %xmm2 601; SSE-NEXT: pxor %xmm8, %xmm2 602; SSE-NEXT: pmaxub %xmm6, %xmm1 603; SSE-NEXT: pcmpeqb %xmm6, %xmm1 604; SSE-NEXT: pxor %xmm8, %xmm1 605; SSE-NEXT: pmaxub %xmm5, %xmm0 606; SSE-NEXT: pcmpeqb %xmm5, %xmm0 607; SSE-NEXT: pxor %xmm8, %xmm0 608; SSE-NEXT: por %xmm5, %xmm0 609; SSE-NEXT: por %xmm6, %xmm1 610; SSE-NEXT: por %xmm7, %xmm2 611; SSE-NEXT: por %xmm4, %xmm3 612; SSE-NEXT: retq 613; 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, %ymm3 618; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2 619; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 620; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 621; AVX1-NEXT: vpmaxub %xmm5, %xmm4, %xmm5 622; AVX1-NEXT: vpcmpeqb %xmm5, %xmm4, %xmm4 623; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 624; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 625; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1 626; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 627; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1 628; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 629; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 630; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 631; AVX1-NEXT: vpmaxub %xmm6, %xmm4, %xmm6 632; AVX1-NEXT: vpcmpeqb %xmm6, %xmm4, %xmm4 633; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 634; AVX1-NEXT: vpmaxub %xmm0, %xmm3, %xmm0 635; AVX1-NEXT: vpcmpeqb %xmm0, %xmm3, %xmm0 636; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0 637; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 638; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0 639; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 640; AVX1-NEXT: retq 641; 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, %ymm3 646; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 647; AVX2-NEXT: vpmaxub %ymm1, %ymm2, %ymm1 648; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1 649; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4 650; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1 651; AVX2-NEXT: vpmaxub %ymm0, %ymm3, %ymm0 652; AVX2-NEXT: vpcmpeqb %ymm0, %ymm3, %ymm0 653; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0 654; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0 655; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1 656; AVX2-NEXT: retq 657; 658; AVX512-LABEL: test17: 659; AVX512: # %bb.0: 660; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1 661; AVX512-NEXT: vpcmpltub %zmm0, %zmm1, %k1 662; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 663; AVX512-NEXT: vmovdqu8 %zmm0, %zmm1 {%k1} 664; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0 665; AVX512-NEXT: retq 666 %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, %x 668 %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> %1 669 ret <64 x i8> %3 670} 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, %xmm0 677; SSE-NEXT: paddusb %xmm4, %xmm1 678; SSE-NEXT: paddusb %xmm4, %xmm2 679; SSE-NEXT: paddusb %xmm4, %xmm3 680; SSE-NEXT: retq 681; 682; AVX1-LABEL: test18: 683; AVX1: # %bb.0: 684; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 685; 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, %xmm2 687; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0 688; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 689; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 690; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2 691; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1 692; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 693; AVX1-NEXT: retq 694; 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, %ymm0 699; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1 700; AVX2-NEXT: retq 701; 702; AVX512-LABEL: test18: 703; AVX512: # %bb.0: 704; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 705; AVX512-NEXT: retq 706 %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> %1 709 ret <64 x i8> %3 710} 711 712define <8 x i16> @test19(<8 x i16> %x) { 713; SSE-LABEL: test19: 714; SSE: # %bb.0: 715; SSE-NEXT: pcmpeqd %xmm1, %xmm1 716; SSE-NEXT: movdqa %xmm0, %xmm2 717; SSE-NEXT: psubw %xmm1, %xmm2 718; SSE-NEXT: pcmpeqw %xmm1, %xmm0 719; SSE-NEXT: por %xmm2, %xmm0 720; SSE-NEXT: retq 721; 722; AVX1-LABEL: test19: 723; AVX1: # %bb.0: 724; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 725; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2 726; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0 727; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0 728; AVX1-NEXT: retq 729; 730; AVX2-LABEL: test19: 731; AVX2: # %bb.0: 732; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 733; AVX2-NEXT: vpsubw %xmm1, %xmm0, %xmm2 734; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0 735; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0 736; AVX2-NEXT: retq 737; 738; AVX512-LABEL: test19: 739; AVX512: # %bb.0: 740; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 741; AVX512-NEXT: vpsubw %xmm2, %xmm0, %xmm1 742; AVX512-NEXT: vpcmpeqw %xmm2, %xmm0, %k1 743; AVX512-NEXT: vmovdqu16 %xmm2, %xmm1 {%k1} 744; AVX512-NEXT: vmovdqa %xmm1, %xmm0 745; AVX512-NEXT: retq 746 %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> %1 749 ret <8 x i16> %3 750} 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), %xmm0 756; SSE-NEXT: retq 757; 758; AVX-LABEL: test20: 759; AVX: # %bb.0: 760; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 761; AVX-NEXT: retq 762 %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> %1 765 ret <8 x i16> %3 766} 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), %xmm0 772; SSE-NEXT: retq 773; 774; AVX-LABEL: test21: 775; AVX: # %bb.0: 776; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 777; AVX-NEXT: retq 778 %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> %1 781 ret <8 x i16> %3 782} 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), %xmm0 788; SSE-NEXT: retq 789; 790; AVX-LABEL: test22: 791; AVX: # %bb.0: 792; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 793; AVX-NEXT: retq 794 %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> %1 797 ret <8 x i16> %3 798} 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, %xmm2 805; SSE2-NEXT: movdqa %xmm2, %xmm1 806; SSE2-NEXT: pcmpgtw %xmm0, %xmm1 807; SSE2-NEXT: por %xmm2, %xmm1 808; SSE2-NEXT: movdqa %xmm1, %xmm0 809; SSE2-NEXT: retq 810; 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, %xmm2 815; SSSE3-NEXT: movdqa %xmm2, %xmm1 816; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1 817; SSSE3-NEXT: por %xmm2, %xmm1 818; SSSE3-NEXT: movdqa %xmm1, %xmm0 819; SSSE3-NEXT: retq 820; 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, %xmm1 825; SSE41-NEXT: pmaxuw %xmm1, %xmm0 826; SSE41-NEXT: pcmpeqw %xmm1, %xmm0 827; SSE41-NEXT: pcmpeqd %xmm2, %xmm2 828; SSE41-NEXT: pxor %xmm2, %xmm0 829; SSE41-NEXT: por %xmm1, %xmm0 830; SSE41-NEXT: retq 831; 832; AVX1-LABEL: test23: 833; AVX1: # %bb.0: 834; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 835; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0 836; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0 837; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 838; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0 839; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 840; AVX1-NEXT: retq 841; 842; AVX2-LABEL: test23: 843; AVX2: # %bb.0: 844; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 845; AVX2-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0 846; AVX2-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0 847; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 848; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0 849; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0 850; AVX2-NEXT: retq 851; 852; AVX512-LABEL: test23: 853; AVX512: # %bb.0: 854; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1 855; AVX512-NEXT: vpcmpltuw %xmm0, %xmm1, %k1 856; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 857; AVX512-NEXT: vmovdqu16 %xmm0, %xmm1 {%k1} 858; AVX512-NEXT: vmovdqa %xmm1, %xmm0 859; AVX512-NEXT: retq 860 %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, %x 862 %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> %1 863 ret <8 x i16> %3 864} 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), %xmm0 870; SSE-NEXT: retq 871; 872; AVX-LABEL: test24: 873; AVX: # %bb.0: 874; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 875; AVX-NEXT: retq 876 %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> %1 879 ret <8 x i16> %3 880} 881 882define <16 x i16> @test25(<16 x i16> %x) { 883; SSE-LABEL: test25: 884; SSE: # %bb.0: 885; SSE-NEXT: pcmpeqd %xmm2, %xmm2 886; SSE-NEXT: movdqa %xmm1, %xmm3 887; SSE-NEXT: psubw %xmm2, %xmm3 888; SSE-NEXT: movdqa %xmm0, %xmm4 889; SSE-NEXT: psubw %xmm2, %xmm4 890; SSE-NEXT: pcmpeqw %xmm2, %xmm1 891; SSE-NEXT: por %xmm3, %xmm1 892; SSE-NEXT: pcmpeqw %xmm2, %xmm0 893; SSE-NEXT: por %xmm4, %xmm0 894; SSE-NEXT: retq 895; 896; AVX1-LABEL: test25: 897; AVX1: # %bb.0: 898; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 899; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2 900; AVX1-NEXT: vpsubw %xmm2, %xmm1, %xmm3 901; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm4 902; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 903; AVX1-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1 904; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0 905; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 906; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0 907; AVX1-NEXT: retq 908; 909; AVX2-LABEL: test25: 910; AVX2: # %bb.0: 911; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 912; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm2 913; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0 914; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0 915; AVX2-NEXT: retq 916; 917; AVX512-LABEL: test25: 918; AVX512: # %bb.0: 919; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 920; AVX512-NEXT: vpsubw %ymm2, %ymm0, %ymm1 921; AVX512-NEXT: vpcmpeqw %ymm2, %ymm0, %k1 922; AVX512-NEXT: vmovdqu16 %ymm2, %ymm1 {%k1} 923; AVX512-NEXT: vmovdqa %ymm1, %ymm0 924; AVX512-NEXT: retq 925 %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> %1 928 ret <16 x i16> %3 929} 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, %xmm0 936; SSE-NEXT: paddusw %xmm2, %xmm1 937; SSE-NEXT: retq 938; 939; AVX1-LABEL: test26: 940; AVX1: # %bb.0: 941; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 942; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767] 943; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1 944; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0 945; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 946; AVX1-NEXT: retq 947; 948; AVX2-LABEL: test26: 949; AVX2: # %bb.0: 950; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 951; AVX2-NEXT: retq 952; 953; AVX512-LABEL: test26: 954; AVX512: # %bb.0: 955; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 956; AVX512-NEXT: retq 957 %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> %1 960 ret <16 x i16> %3 961} 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, %xmm0 968; SSE-NEXT: paddusw %xmm2, %xmm1 969; SSE-NEXT: retq 970; 971; AVX1-LABEL: test27: 972; AVX1: # %bb.0: 973; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 974; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769] 975; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1 976; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0 977; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 978; AVX1-NEXT: retq 979; 980; AVX2-LABEL: test27: 981; AVX2: # %bb.0: 982; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 983; AVX2-NEXT: retq 984; 985; AVX512-LABEL: test27: 986; AVX512: # %bb.0: 987; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 988; AVX512-NEXT: retq 989 %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> %1 992 ret <16 x i16> %3 993} 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, %xmm0 1000; SSE2-NEXT: paddusw %xmm2, %xmm1 1001; SSE2-NEXT: retq 1002; 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, %xmm0 1007; SSSE3-NEXT: paddusw %xmm2, %xmm1 1008; SSSE3-NEXT: retq 1009; 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, %xmm0 1014; SSE41-NEXT: paddusw %xmm2, %xmm1 1015; SSE41-NEXT: retq 1016; 1017; AVX1-LABEL: test28: 1018; AVX1: # %bb.0: 1019; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1020; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534] 1021; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1 1022; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0 1023; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1024; AVX1-NEXT: retq 1025; 1026; AVX2-LABEL: test28: 1027; AVX2: # %bb.0: 1028; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1029; AVX2-NEXT: retq 1030; 1031; AVX512-LABEL: test28: 1032; AVX512: # %bb.0: 1033; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1034; AVX512-NEXT: retq 1035 %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> %1 1038 ret <16 x i16> %3 1039} 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, %xmm4 1046; SSE2-NEXT: pxor %xmm3, %xmm4 1047; SSE2-NEXT: pxor %xmm1, %xmm3 1048; SSE2-NEXT: movdqa %xmm3, %xmm2 1049; SSE2-NEXT: pcmpgtw %xmm1, %xmm2 1050; SSE2-NEXT: movdqa %xmm4, %xmm1 1051; SSE2-NEXT: pcmpgtw %xmm0, %xmm1 1052; SSE2-NEXT: por %xmm4, %xmm1 1053; SSE2-NEXT: por %xmm3, %xmm2 1054; SSE2-NEXT: movdqa %xmm1, %xmm0 1055; SSE2-NEXT: movdqa %xmm2, %xmm1 1056; SSE2-NEXT: retq 1057; 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, %xmm4 1062; SSSE3-NEXT: pxor %xmm3, %xmm4 1063; SSSE3-NEXT: pxor %xmm1, %xmm3 1064; SSSE3-NEXT: movdqa %xmm3, %xmm2 1065; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2 1066; SSSE3-NEXT: movdqa %xmm4, %xmm1 1067; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1 1068; SSSE3-NEXT: por %xmm4, %xmm1 1069; SSSE3-NEXT: por %xmm3, %xmm2 1070; SSSE3-NEXT: movdqa %xmm1, %xmm0 1071; SSSE3-NEXT: movdqa %xmm2, %xmm1 1072; SSSE3-NEXT: retq 1073; 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, %xmm3 1078; SSE41-NEXT: pxor %xmm2, %xmm3 1079; SSE41-NEXT: pxor %xmm1, %xmm2 1080; SSE41-NEXT: pmaxuw %xmm2, %xmm1 1081; SSE41-NEXT: pcmpeqw %xmm2, %xmm1 1082; SSE41-NEXT: pcmpeqd %xmm4, %xmm4 1083; SSE41-NEXT: pxor %xmm4, %xmm1 1084; SSE41-NEXT: pmaxuw %xmm3, %xmm0 1085; SSE41-NEXT: pcmpeqw %xmm3, %xmm0 1086; SSE41-NEXT: pxor %xmm4, %xmm0 1087; SSE41-NEXT: por %xmm3, %xmm0 1088; SSE41-NEXT: por %xmm2, %xmm1 1089; SSE41-NEXT: retq 1090; 1091; AVX1-LABEL: test29: 1092; AVX1: # %bb.0: 1093; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 1094; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1095; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1096; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 1097; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm2 1098; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 1099; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2 1100; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0 1101; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0 1102; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0 1103; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1104; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 1105; AVX1-NEXT: retq 1106; 1107; AVX2-LABEL: test29: 1108; AVX2: # %bb.0: 1109; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 1110; AVX2-NEXT: vpmaxuw %ymm0, %ymm1, %ymm0 1111; AVX2-NEXT: vpcmpeqw %ymm0, %ymm1, %ymm0 1112; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 1113; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 1114; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 1115; AVX2-NEXT: retq 1116; 1117; AVX512-LABEL: test29: 1118; AVX512: # %bb.0: 1119; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1 1120; AVX512-NEXT: vpcmpltuw %ymm0, %ymm1, %k1 1121; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 1122; AVX512-NEXT: vmovdqu16 %ymm0, %ymm1 {%k1} 1123; AVX512-NEXT: vmovdqa %ymm1, %ymm0 1124; AVX512-NEXT: retq 1125 %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, %x 1127 %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> %1 1128 ret <16 x i16> %3 1129} 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, %xmm0 1136; SSE2-NEXT: paddusw %xmm2, %xmm1 1137; SSE2-NEXT: retq 1138; 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, %xmm0 1143; SSSE3-NEXT: paddusw %xmm2, %xmm1 1144; SSSE3-NEXT: retq 1145; 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, %xmm0 1150; SSE41-NEXT: paddusw %xmm2, %xmm1 1151; SSE41-NEXT: retq 1152; 1153; AVX1-LABEL: test30: 1154; AVX1: # %bb.0: 1155; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1156; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2] 1157; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1 1158; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0 1159; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1160; AVX1-NEXT: retq 1161; 1162; AVX2-LABEL: test30: 1163; AVX2: # %bb.0: 1164; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1165; AVX2-NEXT: retq 1166; 1167; AVX512-LABEL: test30: 1168; AVX512: # %bb.0: 1169; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 1170; AVX512-NEXT: retq 1171 %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> %1 1174 ret <16 x i16> %3 1175} 1176 1177define <32 x i16> @test31(<32 x i16> %x) { 1178; SSE-LABEL: test31: 1179; SSE: # %bb.0: 1180; SSE-NEXT: pcmpeqd %xmm4, %xmm4 1181; SSE-NEXT: movdqa %xmm3, %xmm5 1182; SSE-NEXT: psubw %xmm4, %xmm5 1183; SSE-NEXT: movdqa %xmm2, %xmm6 1184; SSE-NEXT: psubw %xmm4, %xmm6 1185; SSE-NEXT: movdqa %xmm1, %xmm7 1186; SSE-NEXT: psubw %xmm4, %xmm7 1187; SSE-NEXT: movdqa %xmm0, %xmm8 1188; SSE-NEXT: psubw %xmm4, %xmm8 1189; SSE-NEXT: pcmpeqw %xmm4, %xmm3 1190; SSE-NEXT: por %xmm5, %xmm3 1191; SSE-NEXT: pcmpeqw %xmm4, %xmm2 1192; SSE-NEXT: por %xmm6, %xmm2 1193; SSE-NEXT: pcmpeqw %xmm4, %xmm1 1194; SSE-NEXT: por %xmm7, %xmm1 1195; SSE-NEXT: pcmpeqw %xmm4, %xmm0 1196; SSE-NEXT: por %xmm8, %xmm0 1197; SSE-NEXT: retq 1198; 1199; AVX1-LABEL: test31: 1200; AVX1: # %bb.0: 1201; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1202; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 1203; AVX1-NEXT: vpsubw %xmm3, %xmm2, %xmm4 1204; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm5 1205; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4 1206; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 1207; AVX1-NEXT: vpsubw %xmm3, %xmm5, %xmm6 1208; AVX1-NEXT: vpsubw %xmm3, %xmm0, %xmm7 1209; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6 1210; AVX1-NEXT: vpcmpeqw %xmm3, %xmm2, %xmm2 1211; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm1 1212; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 1213; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1 1214; AVX1-NEXT: vpcmpeqw %xmm3, %xmm5, %xmm2 1215; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0 1216; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1217; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0 1218; AVX1-NEXT: retq 1219; 1220; AVX2-LABEL: test31: 1221; AVX2: # %bb.0: 1222; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 1223; AVX2-NEXT: vpsubw %ymm2, %ymm1, %ymm3 1224; AVX2-NEXT: vpsubw %ymm2, %ymm0, %ymm4 1225; AVX2-NEXT: vpcmpeqw %ymm2, %ymm1, %ymm1 1226; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1 1227; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0 1228; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0 1229; AVX2-NEXT: retq 1230; 1231; AVX512-LABEL: test31: 1232; AVX512: # %bb.0: 1233; AVX512-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 1234; AVX512-NEXT: vpcmpneqw %zmm1, %zmm0, %k1 1235; AVX512-NEXT: vpsubw %zmm1, %zmm0, %zmm1 {%k1} 1236; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0 1237; AVX512-NEXT: retq 1238 %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> %1 1241 ret <32 x i16> %3 1242} 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, %xmm0 1249; SSE-NEXT: paddusw %xmm4, %xmm1 1250; SSE-NEXT: paddusw %xmm4, %xmm2 1251; SSE-NEXT: paddusw %xmm4, %xmm3 1252; SSE-NEXT: retq 1253; 1254; AVX1-LABEL: test32: 1255; AVX1: # %bb.0: 1256; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1257; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767] 1258; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1259; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0 1260; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1261; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1262; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1263; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1 1264; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 1265; AVX1-NEXT: retq 1266; 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, %ymm0 1271; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1 1272; AVX2-NEXT: retq 1273; 1274; AVX512-LABEL: test32: 1275; AVX512: # %bb.0: 1276; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 1277; AVX512-NEXT: retq 1278 %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> %1 1281 ret <32 x i16> %3 1282} 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, %xmm0 1289; SSE-NEXT: paddusw %xmm4, %xmm1 1290; SSE-NEXT: paddusw %xmm4, %xmm2 1291; SSE-NEXT: paddusw %xmm4, %xmm3 1292; SSE-NEXT: retq 1293; 1294; AVX1-LABEL: test33: 1295; AVX1: # %bb.0: 1296; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1297; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769] 1298; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1299; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0 1300; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1301; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1302; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1303; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1 1304; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 1305; AVX1-NEXT: retq 1306; 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, %ymm0 1311; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1 1312; AVX2-NEXT: retq 1313; 1314; AVX512-LABEL: test33: 1315; AVX512: # %bb.0: 1316; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 1317; AVX512-NEXT: retq 1318 %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> %1 1321 ret <32 x i16> %3 1322} 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, %xmm0 1329; SSE2-NEXT: paddusw %xmm4, %xmm1 1330; SSE2-NEXT: paddusw %xmm4, %xmm2 1331; SSE2-NEXT: paddusw %xmm4, %xmm3 1332; SSE2-NEXT: retq 1333; 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, %xmm0 1338; SSSE3-NEXT: paddusw %xmm4, %xmm1 1339; SSSE3-NEXT: paddusw %xmm4, %xmm2 1340; SSSE3-NEXT: paddusw %xmm4, %xmm3 1341; SSSE3-NEXT: retq 1342; 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, %xmm0 1347; SSE41-NEXT: paddusw %xmm4, %xmm1 1348; SSE41-NEXT: paddusw %xmm4, %xmm2 1349; SSE41-NEXT: paddusw %xmm4, %xmm3 1350; SSE41-NEXT: retq 1351; 1352; AVX1-LABEL: test34: 1353; AVX1: # %bb.0: 1354; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1355; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534] 1356; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1357; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0 1358; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1359; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1360; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1361; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1 1362; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 1363; AVX1-NEXT: retq 1364; 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, %ymm0 1369; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1 1370; AVX2-NEXT: retq 1371; 1372; AVX512-LABEL: test34: 1373; AVX512: # %bb.0: 1374; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 1375; AVX512-NEXT: retq 1376 %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> %1 1379 ret <32 x i16> %3 1380} 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, %xmm6 1387; SSE2-NEXT: pxor %xmm5, %xmm6 1388; SSE2-NEXT: movdqa %xmm1, %xmm7 1389; SSE2-NEXT: pxor %xmm5, %xmm7 1390; SSE2-NEXT: movdqa %xmm2, %xmm8 1391; SSE2-NEXT: pxor %xmm5, %xmm8 1392; SSE2-NEXT: pxor %xmm3, %xmm5 1393; SSE2-NEXT: movdqa %xmm5, %xmm4 1394; SSE2-NEXT: pcmpgtw %xmm3, %xmm4 1395; SSE2-NEXT: movdqa %xmm8, %xmm3 1396; SSE2-NEXT: pcmpgtw %xmm2, %xmm3 1397; SSE2-NEXT: movdqa %xmm7, %xmm2 1398; SSE2-NEXT: pcmpgtw %xmm1, %xmm2 1399; SSE2-NEXT: movdqa %xmm6, %xmm1 1400; SSE2-NEXT: pcmpgtw %xmm0, %xmm1 1401; SSE2-NEXT: por %xmm6, %xmm1 1402; SSE2-NEXT: por %xmm7, %xmm2 1403; SSE2-NEXT: por %xmm8, %xmm3 1404; SSE2-NEXT: por %xmm5, %xmm4 1405; SSE2-NEXT: movdqa %xmm1, %xmm0 1406; SSE2-NEXT: movdqa %xmm2, %xmm1 1407; SSE2-NEXT: movdqa %xmm3, %xmm2 1408; SSE2-NEXT: movdqa %xmm4, %xmm3 1409; SSE2-NEXT: retq 1410; 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, %xmm6 1415; SSSE3-NEXT: pxor %xmm5, %xmm6 1416; SSSE3-NEXT: movdqa %xmm1, %xmm7 1417; SSSE3-NEXT: pxor %xmm5, %xmm7 1418; SSSE3-NEXT: movdqa %xmm2, %xmm8 1419; SSSE3-NEXT: pxor %xmm5, %xmm8 1420; SSSE3-NEXT: pxor %xmm3, %xmm5 1421; SSSE3-NEXT: movdqa %xmm5, %xmm4 1422; SSSE3-NEXT: pcmpgtw %xmm3, %xmm4 1423; SSSE3-NEXT: movdqa %xmm8, %xmm3 1424; SSSE3-NEXT: pcmpgtw %xmm2, %xmm3 1425; SSSE3-NEXT: movdqa %xmm7, %xmm2 1426; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2 1427; SSSE3-NEXT: movdqa %xmm6, %xmm1 1428; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1 1429; SSSE3-NEXT: por %xmm6, %xmm1 1430; SSSE3-NEXT: por %xmm7, %xmm2 1431; SSSE3-NEXT: por %xmm8, %xmm3 1432; SSSE3-NEXT: por %xmm5, %xmm4 1433; SSSE3-NEXT: movdqa %xmm1, %xmm0 1434; SSSE3-NEXT: movdqa %xmm2, %xmm1 1435; SSSE3-NEXT: movdqa %xmm3, %xmm2 1436; SSSE3-NEXT: movdqa %xmm4, %xmm3 1437; SSSE3-NEXT: retq 1438; 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, %xmm5 1443; SSE41-NEXT: pxor %xmm4, %xmm5 1444; SSE41-NEXT: movdqa %xmm1, %xmm6 1445; SSE41-NEXT: pxor %xmm4, %xmm6 1446; SSE41-NEXT: movdqa %xmm2, %xmm7 1447; SSE41-NEXT: pxor %xmm4, %xmm7 1448; SSE41-NEXT: pxor %xmm3, %xmm4 1449; SSE41-NEXT: pmaxuw %xmm4, %xmm3 1450; SSE41-NEXT: pcmpeqw %xmm4, %xmm3 1451; SSE41-NEXT: pcmpeqd %xmm8, %xmm8 1452; SSE41-NEXT: pxor %xmm8, %xmm3 1453; SSE41-NEXT: pmaxuw %xmm7, %xmm2 1454; SSE41-NEXT: pcmpeqw %xmm7, %xmm2 1455; SSE41-NEXT: pxor %xmm8, %xmm2 1456; SSE41-NEXT: pmaxuw %xmm6, %xmm1 1457; SSE41-NEXT: pcmpeqw %xmm6, %xmm1 1458; SSE41-NEXT: pxor %xmm8, %xmm1 1459; SSE41-NEXT: pmaxuw %xmm5, %xmm0 1460; SSE41-NEXT: pcmpeqw %xmm5, %xmm0 1461; SSE41-NEXT: pxor %xmm8, %xmm0 1462; SSE41-NEXT: por %xmm5, %xmm0 1463; SSE41-NEXT: por %xmm6, %xmm1 1464; SSE41-NEXT: por %xmm7, %xmm2 1465; SSE41-NEXT: por %xmm4, %xmm3 1466; SSE41-NEXT: retq 1467; 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, %ymm3 1472; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2 1473; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 1474; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 1475; AVX1-NEXT: vpmaxuw %xmm5, %xmm4, %xmm5 1476; AVX1-NEXT: vpcmpeqw %xmm5, %xmm4, %xmm4 1477; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5 1478; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 1479; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1 1480; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1 1481; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1 1482; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 1483; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 1484; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 1485; AVX1-NEXT: vpmaxuw %xmm6, %xmm4, %xmm6 1486; AVX1-NEXT: vpcmpeqw %xmm6, %xmm4, %xmm4 1487; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4 1488; AVX1-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0 1489; AVX1-NEXT: vpcmpeqw %xmm0, %xmm3, %xmm0 1490; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0 1491; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 1492; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0 1493; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1 1494; AVX1-NEXT: retq 1495; 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, %ymm3 1500; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 1501; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1 1502; AVX2-NEXT: vpcmpeqw %ymm1, %ymm2, %ymm1 1503; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4 1504; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1 1505; AVX2-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0 1506; AVX2-NEXT: vpcmpeqw %ymm0, %ymm3, %ymm0 1507; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0 1508; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0 1509; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1 1510; AVX2-NEXT: retq 1511; 1512; AVX512-LABEL: test35: 1513; AVX512: # %bb.0: 1514; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1 1515; AVX512-NEXT: vpcmpltuw %zmm0, %zmm1, %k1 1516; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 1517; AVX512-NEXT: vmovdqu16 %zmm0, %zmm1 {%k1} 1518; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0 1519; AVX512-NEXT: retq 1520 %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, %x 1522 %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> %1 1523 ret <32 x i16> %3 1524} 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, %xmm0 1531; SSE2-NEXT: paddusw %xmm4, %xmm1 1532; SSE2-NEXT: paddusw %xmm4, %xmm2 1533; SSE2-NEXT: paddusw %xmm4, %xmm3 1534; SSE2-NEXT: retq 1535; 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, %xmm0 1540; SSSE3-NEXT: paddusw %xmm4, %xmm1 1541; SSSE3-NEXT: paddusw %xmm4, %xmm2 1542; SSSE3-NEXT: paddusw %xmm4, %xmm3 1543; SSSE3-NEXT: retq 1544; 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, %xmm0 1549; SSE41-NEXT: paddusw %xmm4, %xmm1 1550; SSE41-NEXT: paddusw %xmm4, %xmm2 1551; SSE41-NEXT: paddusw %xmm4, %xmm3 1552; SSE41-NEXT: retq 1553; 1554; AVX1-LABEL: test36: 1555; AVX1: # %bb.0: 1556; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1557; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2] 1558; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1559; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0 1560; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1561; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1562; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2 1563; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1 1564; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 1565; AVX1-NEXT: retq 1566; 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, %ymm0 1571; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1 1572; AVX2-NEXT: retq 1573; 1574; AVX512-LABEL: test36: 1575; AVX512: # %bb.0: 1576; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 1577; AVX512-NEXT: retq 1578 %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> %1 1581 ret <32 x i16> %3 1582} 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],zero 1588; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 1589; SSE-NEXT: paddusb %xmm0, %xmm1 1590; SSE-NEXT: movq %xmm1, (%rdi) 1591; SSE-NEXT: retq 1592; 1593; AVX-LABEL: addus_v8i8: 1594; AVX: # %bb.0: 1595; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero 1596; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero 1597; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0 1598; AVX-NEXT: vmovq %xmm0, (%rdi) 1599; AVX-NEXT: retq 1600 %ld1 = load <8 x i8>, ptr %p1, align 8 1601 %ld2 = load <8 x i8>, ptr %p2, align 8 1602 %1 = add <8 x i8> %ld2, %ld1 1603 %2 = icmp ugt <8 x i8> %ld1, %1 1604 %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> %1 1605 store <8 x i8> %sh3, ptr %p1, align 8 1606 ret void 1607} 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,zero 1613; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1614; SSE-NEXT: paddusb %xmm0, %xmm1 1615; SSE-NEXT: movd %xmm1, (%rdi) 1616; SSE-NEXT: retq 1617; 1618; AVX-LABEL: addus_v4i8: 1619; AVX: # %bb.0: 1620; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1621; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1622; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0 1623; AVX-NEXT: vmovd %xmm0, (%rdi) 1624; AVX-NEXT: retq 1625 %ld1 = load <4 x i8>, ptr %p1, align 4 1626 %ld2 = load <4 x i8>, ptr %p2, align 4 1627 %1 = add <4 x i8> %ld2, %ld1 1628 %2 = icmp ugt <4 x i8> %ld1, %1 1629 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1 1630 store <4 x i8> %sh3, ptr %p1, align 4 1631 ret void 1632} 1633 1634define void @addus_v2i8(ptr %p1, ptr %p2) { 1635; SSE2-LABEL: addus_v2i8: 1636; SSE2: # %bb.0: 1637; SSE2-NEXT: movzwl (%rdi), %eax 1638; SSE2-NEXT: movd %eax, %xmm0 1639; SSE2-NEXT: movzwl (%rsi), %eax 1640; SSE2-NEXT: movd %eax, %xmm1 1641; SSE2-NEXT: paddusb %xmm0, %xmm1 1642; SSE2-NEXT: movd %xmm1, %eax 1643; SSE2-NEXT: movw %ax, (%rdi) 1644; SSE2-NEXT: retq 1645; 1646; SSSE3-LABEL: addus_v2i8: 1647; SSSE3: # %bb.0: 1648; SSSE3-NEXT: movzwl (%rdi), %eax 1649; SSSE3-NEXT: movd %eax, %xmm0 1650; SSSE3-NEXT: movzwl (%rsi), %eax 1651; SSSE3-NEXT: movd %eax, %xmm1 1652; SSSE3-NEXT: paddusb %xmm0, %xmm1 1653; SSSE3-NEXT: movd %xmm1, %eax 1654; SSSE3-NEXT: movw %ax, (%rdi) 1655; SSSE3-NEXT: retq 1656; 1657; SSE41-LABEL: addus_v2i8: 1658; SSE41: # %bb.0: 1659; SSE41-NEXT: movzwl (%rdi), %eax 1660; SSE41-NEXT: movd %eax, %xmm0 1661; SSE41-NEXT: movzwl (%rsi), %eax 1662; SSE41-NEXT: movd %eax, %xmm1 1663; SSE41-NEXT: paddusb %xmm0, %xmm1 1664; SSE41-NEXT: pextrw $0, %xmm1, (%rdi) 1665; SSE41-NEXT: retq 1666; 1667; AVX-LABEL: addus_v2i8: 1668; AVX: # %bb.0: 1669; AVX-NEXT: movzwl (%rdi), %eax 1670; AVX-NEXT: vmovd %eax, %xmm0 1671; AVX-NEXT: movzwl (%rsi), %eax 1672; AVX-NEXT: vmovd %eax, %xmm1 1673; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0 1674; AVX-NEXT: vpextrw $0, %xmm0, (%rdi) 1675; AVX-NEXT: retq 1676 %ld1 = load <2 x i8>, ptr %p1, align 2 1677 %ld2 = load <2 x i8>, ptr %p2, align 2 1678 %1 = add <2 x i8> %ld2, %ld1 1679 %2 = icmp ugt <2 x i8> %ld1, %1 1680 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1 1681 store <2 x i8> %sh3, ptr %p1, align 2 1682 ret void 1683} 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],zero 1689; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 1690; SSE-NEXT: paddusw %xmm0, %xmm1 1691; SSE-NEXT: movq %xmm1, (%rdi) 1692; SSE-NEXT: retq 1693; 1694; AVX-LABEL: addus_v4i16: 1695; AVX: # %bb.0: 1696; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero 1697; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero 1698; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0 1699; AVX-NEXT: vmovq %xmm0, (%rdi) 1700; AVX-NEXT: retq 1701 %ld1 = load <4 x i16>, ptr %p1, align 4 1702 %ld2 = load <4 x i16>, ptr %p2, align 4 1703 %1 = add <4 x i16> %ld2, %ld1 1704 %2 = icmp ugt <4 x i16> %ld1, %1 1705 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1 1706 store <4 x i16> %sh3, ptr %p1, align 4 1707 ret void 1708} 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,zero 1714; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1715; SSE-NEXT: paddusw %xmm0, %xmm1 1716; SSE-NEXT: movd %xmm1, (%rdi) 1717; SSE-NEXT: retq 1718; 1719; AVX-LABEL: addus_v2i16: 1720; AVX: # %bb.0: 1721; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1722; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1723; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0 1724; AVX-NEXT: vmovd %xmm0, (%rdi) 1725; AVX-NEXT: retq 1726 %ld1 = load <2 x i16>, ptr %p1, align 2 1727 %ld2 = load <2 x i16>, ptr %p2, align 2 1728 %1 = add <2 x i16> %ld2, %ld1 1729 %2 = icmp ugt <2 x i16> %ld1, %1 1730 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1 1731 store <2 x i16> %sh3, ptr %p1, align 2 1732 ret void 1733} 1734