1119 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX5123; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX24; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE415; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE26 7declare <4 x i64> @llvm.abs.v4i64(<4 x i64>, i1)8declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)9declare <4 x i16> @llvm.abs.v4i16(<4 x i16>, i1)10declare <4 x i8> @llvm.abs.v4i8(<4 x i8>, i1)11 12define <4 x i1> @illegal_abs_unchanged(<4 x i8> %x) {13; AVX512-LABEL: illegal_abs_unchanged:14; AVX512: # %bb.0:15; AVX512-NEXT: vpabsb %xmm0, %xmm016; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm017; AVX512-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero18; AVX512-NEXT: retq19;20; AVX2-LABEL: illegal_abs_unchanged:21; AVX2: # %bb.0:22; AVX2-NEXT: vpabsb %xmm0, %xmm023; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm024; AVX2-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero25; AVX2-NEXT: retq26;27; SSE41-LABEL: illegal_abs_unchanged:28; SSE41: # %bb.0:29; SSE41-NEXT: pabsb %xmm0, %xmm030; SSE41-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm031; SSE41-NEXT: pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero32; SSE41-NEXT: retq33;34; SSE2-LABEL: illegal_abs_unchanged:35; SSE2: # %bb.0:36; SSE2-NEXT: pxor %xmm1, %xmm137; SSE2-NEXT: psubb %xmm0, %xmm138; SSE2-NEXT: pminub %xmm1, %xmm039; SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm040; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]41; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]42; SSE2-NEXT: retq43 %abs = call <4 x i8> @llvm.abs.v4i8(<4 x i8> %x, i1 true)44 %cmp = icmp eq <4 x i8> %abs, <i8 129, i8 129, i8 129, i8 129>45 ret <4 x i1> %cmp46}47 48define <4 x i1> @illegal_abs_unchanged2(<4 x i8> %x) {49; AVX512-LABEL: illegal_abs_unchanged2:50; AVX512: # %bb.0:51; AVX512-NEXT: vpabsb %xmm0, %xmm052; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm053; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm054; AVX512-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero55; AVX512-NEXT: retq56;57; AVX2-LABEL: illegal_abs_unchanged2:58; AVX2: # %bb.0:59; AVX2-NEXT: vpabsb %xmm0, %xmm060; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm061; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm162; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm063; AVX2-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero64; AVX2-NEXT: retq65;66; SSE41-LABEL: illegal_abs_unchanged2:67; SSE41: # %bb.0:68; SSE41-NEXT: pabsb %xmm0, %xmm069; SSE41-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm070; SSE41-NEXT: pcmpeqd %xmm1, %xmm171; SSE41-NEXT: pxor %xmm0, %xmm172; SSE41-NEXT: pmovzxbd {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero73; SSE41-NEXT: retq74;75; SSE2-LABEL: illegal_abs_unchanged2:76; SSE2: # %bb.0:77; SSE2-NEXT: pxor %xmm1, %xmm178; SSE2-NEXT: psubb %xmm0, %xmm179; SSE2-NEXT: pminub %xmm1, %xmm080; SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm081; SSE2-NEXT: pcmpeqd %xmm1, %xmm182; SSE2-NEXT: pxor %xmm1, %xmm083; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]84; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]85; SSE2-NEXT: retq86 %abs = call <4 x i8> @llvm.abs.v4i8(<4 x i8> %x, i1 true)87 %cmp = icmp ne <4 x i8> %abs, <i8 129, i8 129, i8 129, i8 129>88 ret <4 x i1> %cmp89}90 91define <4 x i1> @illegal_abs_to_eq_or(<4 x i64> %x) {92; AVX512-LABEL: illegal_abs_to_eq_or:93; AVX512: # %bb.0:94; AVX512-NEXT: vpabsq %ymm0, %ymm095; AVX512-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k196; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm097; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}98; AVX512-NEXT: vzeroupper99; AVX512-NEXT: retq100;101; AVX2-LABEL: illegal_abs_to_eq_or:102; AVX2: # %bb.0:103; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1104; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm1105; AVX2-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0106; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]107; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0108; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1109; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0110; AVX2-NEXT: vzeroupper111; AVX2-NEXT: retq112;113; SSE41-LABEL: illegal_abs_to_eq_or:114; SSE41: # %bb.0:115; SSE41-NEXT: movdqa %xmm0, %xmm2116; SSE41-NEXT: pxor %xmm3, %xmm3117; SSE41-NEXT: pxor %xmm4, %xmm4118; SSE41-NEXT: psubq %xmm0, %xmm4119; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2120; SSE41-NEXT: psubq %xmm1, %xmm3121; SSE41-NEXT: movdqa %xmm1, %xmm0122; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm1123; SSE41-NEXT: pmovzxbq {{.*#+}} xmm0 = [129,129]124; SSE41-NEXT: pcmpeqq %xmm0, %xmm1125; SSE41-NEXT: pcmpeqq %xmm0, %xmm2126; SSE41-NEXT: packssdw %xmm1, %xmm2127; SSE41-NEXT: movdqa %xmm2, %xmm0128; SSE41-NEXT: retq129;130; SSE2-LABEL: illegal_abs_to_eq_or:131; SSE2: # %bb.0:132; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]133; SSE2-NEXT: psrad $31, %xmm2134; SSE2-NEXT: pxor %xmm2, %xmm0135; SSE2-NEXT: psubq %xmm2, %xmm0136; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]137; SSE2-NEXT: psrad $31, %xmm2138; SSE2-NEXT: pxor %xmm2, %xmm1139; SSE2-NEXT: psubq %xmm2, %xmm1140; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]141; SSE2-NEXT: pcmpeqd %xmm2, %xmm1142; SSE2-NEXT: pcmpeqd %xmm2, %xmm0143; SSE2-NEXT: movdqa %xmm0, %xmm2144; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[1,3],xmm1[1,3]145; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]146; SSE2-NEXT: andps %xmm2, %xmm0147; SSE2-NEXT: retq148 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %x, i1 true)149 %cmp = icmp eq <4 x i64> %abs, <i64 129, i64 129, i64 129, i64 129>150 ret <4 x i1> %cmp151}152 153define <4 x i64> @illegal_abs_to_eq_or_sext(<4 x i64> %x) {154; AVX512-LABEL: illegal_abs_to_eq_or_sext:155; AVX512: # %bb.0:156; AVX512-NEXT: vpabsq %ymm0, %ymm0157; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]158; AVX512-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0159; AVX512-NEXT: retq160;161; AVX2-LABEL: illegal_abs_to_eq_or_sext:162; AVX2: # %bb.0:163; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1164; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm1165; AVX2-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0166; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]167; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0168; AVX2-NEXT: retq169;170; SSE41-LABEL: illegal_abs_to_eq_or_sext:171; SSE41: # %bb.0:172; SSE41-NEXT: movdqa %xmm0, %xmm2173; SSE41-NEXT: pxor %xmm3, %xmm3174; SSE41-NEXT: pxor %xmm4, %xmm4175; SSE41-NEXT: psubq %xmm1, %xmm4176; SSE41-NEXT: movdqa %xmm1, %xmm0177; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1178; SSE41-NEXT: psubq %xmm2, %xmm3179; SSE41-NEXT: movdqa %xmm2, %xmm0180; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2181; SSE41-NEXT: pmovzxbq {{.*#+}} xmm0 = [129,129]182; SSE41-NEXT: pcmpeqq %xmm0, %xmm2183; SSE41-NEXT: pcmpeqq %xmm0, %xmm1184; SSE41-NEXT: movdqa %xmm2, %xmm0185; SSE41-NEXT: retq186;187; SSE2-LABEL: illegal_abs_to_eq_or_sext:188; SSE2: # %bb.0:189; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]190; SSE2-NEXT: psrad $31, %xmm2191; SSE2-NEXT: pxor %xmm2, %xmm1192; SSE2-NEXT: psubq %xmm2, %xmm1193; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]194; SSE2-NEXT: psrad $31, %xmm2195; SSE2-NEXT: pxor %xmm2, %xmm0196; SSE2-NEXT: psubq %xmm2, %xmm0197; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]198; SSE2-NEXT: pcmpeqd %xmm2, %xmm0199; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,0,3,2]200; SSE2-NEXT: pand %xmm3, %xmm0201; SSE2-NEXT: pcmpeqd %xmm2, %xmm1202; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]203; SSE2-NEXT: pand %xmm2, %xmm1204; SSE2-NEXT: retq205 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %x, i1 true)206 %cmp = icmp eq <4 x i64> %abs, <i64 129, i64 129, i64 129, i64 129>207 %r = sext <4 x i1> %cmp to <4 x i64>208 ret <4 x i64> %r209}210 211define <4 x i1> @illegal_abs_to_ne_and(<4 x i64> %x) {212; AVX512-LABEL: illegal_abs_to_ne_and:213; AVX512: # %bb.0:214; AVX512-NEXT: vpabsq %ymm0, %ymm0215; AVX512-NEXT: vpcmpneqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1216; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0217; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}218; AVX512-NEXT: vzeroupper219; AVX512-NEXT: retq220;221; AVX2-LABEL: illegal_abs_to_ne_and:222; AVX2: # %bb.0:223; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1224; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm1225; AVX2-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0226; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]227; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0228; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1229; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0230; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1231; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0232; AVX2-NEXT: vzeroupper233; AVX2-NEXT: retq234;235; SSE41-LABEL: illegal_abs_to_ne_and:236; SSE41: # %bb.0:237; SSE41-NEXT: movdqa %xmm0, %xmm2238; SSE41-NEXT: pxor %xmm3, %xmm3239; SSE41-NEXT: pxor %xmm4, %xmm4240; SSE41-NEXT: psubq %xmm0, %xmm4241; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2242; SSE41-NEXT: psubq %xmm1, %xmm3243; SSE41-NEXT: movdqa %xmm1, %xmm0244; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm1245; SSE41-NEXT: pmovzxbq {{.*#+}} xmm0 = [129,129]246; SSE41-NEXT: pcmpeqq %xmm0, %xmm1247; SSE41-NEXT: pcmpeqq %xmm0, %xmm2248; SSE41-NEXT: packssdw %xmm1, %xmm2249; SSE41-NEXT: pcmpeqd %xmm0, %xmm0250; SSE41-NEXT: pxor %xmm2, %xmm0251; SSE41-NEXT: retq252;253; SSE2-LABEL: illegal_abs_to_ne_and:254; SSE2: # %bb.0:255; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]256; SSE2-NEXT: psrad $31, %xmm2257; SSE2-NEXT: pxor %xmm2, %xmm0258; SSE2-NEXT: psubq %xmm2, %xmm0259; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]260; SSE2-NEXT: psrad $31, %xmm2261; SSE2-NEXT: pxor %xmm2, %xmm1262; SSE2-NEXT: psubq %xmm2, %xmm1263; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]264; SSE2-NEXT: pcmpeqd %xmm2, %xmm1265; SSE2-NEXT: pcmpeqd %xmm2, %xmm0266; SSE2-NEXT: movdqa %xmm0, %xmm2267; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[1,3],xmm1[1,3]268; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]269; SSE2-NEXT: andps %xmm2, %xmm0270; SSE2-NEXT: pcmpeqd %xmm1, %xmm1271; SSE2-NEXT: xorps %xmm1, %xmm0272; SSE2-NEXT: retq273 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %x, i1 true)274 %cmp = icmp ne <4 x i64> %abs, <i64 129, i64 129, i64 129, i64 129>275 ret <4 x i1> %cmp276}277 278define <4 x i64> @illegal_abs_to_ne_and_sext(<4 x i64> %x) {279; AVX512-LABEL: illegal_abs_to_ne_and_sext:280; AVX512: # %bb.0:281; AVX512-NEXT: vpabsq %ymm0, %ymm0282; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]283; AVX512-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0284; AVX512-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm0285; AVX512-NEXT: retq286;287; AVX2-LABEL: illegal_abs_to_ne_and_sext:288; AVX2: # %bb.0:289; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1290; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm1291; AVX2-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0292; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]293; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0294; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1295; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0296; AVX2-NEXT: retq297;298; SSE41-LABEL: illegal_abs_to_ne_and_sext:299; SSE41: # %bb.0:300; SSE41-NEXT: movdqa %xmm0, %xmm2301; SSE41-NEXT: pxor %xmm3, %xmm3302; SSE41-NEXT: pxor %xmm4, %xmm4303; SSE41-NEXT: psubq %xmm1, %xmm4304; SSE41-NEXT: movdqa %xmm1, %xmm0305; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1306; SSE41-NEXT: psubq %xmm2, %xmm3307; SSE41-NEXT: movdqa %xmm2, %xmm0308; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2309; SSE41-NEXT: pmovzxbq {{.*#+}} xmm0 = [129,129]310; SSE41-NEXT: pcmpeqq %xmm0, %xmm2311; SSE41-NEXT: pcmpeqd %xmm3, %xmm3312; SSE41-NEXT: pxor %xmm3, %xmm2313; SSE41-NEXT: pcmpeqq %xmm0, %xmm1314; SSE41-NEXT: pxor %xmm3, %xmm1315; SSE41-NEXT: movdqa %xmm2, %xmm0316; SSE41-NEXT: retq317;318; SSE2-LABEL: illegal_abs_to_ne_and_sext:319; SSE2: # %bb.0:320; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]321; SSE2-NEXT: psrad $31, %xmm2322; SSE2-NEXT: pxor %xmm2, %xmm1323; SSE2-NEXT: psubq %xmm2, %xmm1324; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]325; SSE2-NEXT: psrad $31, %xmm2326; SSE2-NEXT: pxor %xmm2, %xmm0327; SSE2-NEXT: psubq %xmm2, %xmm0328; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]329; SSE2-NEXT: pcmpeqd %xmm2, %xmm0330; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,0,3,2]331; SSE2-NEXT: pand %xmm3, %xmm0332; SSE2-NEXT: pcmpeqd %xmm3, %xmm3333; SSE2-NEXT: pxor %xmm3, %xmm0334; SSE2-NEXT: pcmpeqd %xmm2, %xmm1335; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]336; SSE2-NEXT: pand %xmm2, %xmm1337; SSE2-NEXT: pxor %xmm3, %xmm1338; SSE2-NEXT: retq339 %abs = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %x, i1 true)340 %cmp = icmp ne <4 x i64> %abs, <i64 129, i64 129, i64 129, i64 129>341 %r = sext <4 x i1> %cmp to <4 x i64>342 ret <4 x i64> %r343}344 345define <4 x i1> @legal_abs_eq_unchanged(<4 x i32> %x) {346; AVX512-LABEL: legal_abs_eq_unchanged:347; AVX512: # %bb.0:348; AVX512-NEXT: vpabsd %xmm0, %xmm0349; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]350; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0351; AVX512-NEXT: retq352;353; AVX2-LABEL: legal_abs_eq_unchanged:354; AVX2: # %bb.0:355; AVX2-NEXT: vpabsd %xmm0, %xmm0356; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]357; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0358; AVX2-NEXT: retq359;360; SSE41-LABEL: legal_abs_eq_unchanged:361; SSE41: # %bb.0:362; SSE41-NEXT: pabsd %xmm0, %xmm0363; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0364; SSE41-NEXT: retq365;366; SSE2-LABEL: legal_abs_eq_unchanged:367; SSE2: # %bb.0:368; SSE2-NEXT: movdqa %xmm0, %xmm1369; SSE2-NEXT: psrad $31, %xmm1370; SSE2-NEXT: pxor %xmm1, %xmm0371; SSE2-NEXT: psubd %xmm1, %xmm0372; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0373; SSE2-NEXT: retq374 %abs = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %x, i1 true)375 %cmp = icmp eq <4 x i32> %abs, <i32 129, i32 129, i32 129, i32 129>376 ret <4 x i1> %cmp377}378 379define <4 x i32> @legal_abs_eq_unchanged_sext(<4 x i32> %x) {380; AVX512-LABEL: legal_abs_eq_unchanged_sext:381; AVX512: # %bb.0:382; AVX512-NEXT: vpabsd %xmm0, %xmm0383; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]384; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0385; AVX512-NEXT: retq386;387; AVX2-LABEL: legal_abs_eq_unchanged_sext:388; AVX2: # %bb.0:389; AVX2-NEXT: vpabsd %xmm0, %xmm0390; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]391; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0392; AVX2-NEXT: retq393;394; SSE41-LABEL: legal_abs_eq_unchanged_sext:395; SSE41: # %bb.0:396; SSE41-NEXT: pabsd %xmm0, %xmm0397; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0398; SSE41-NEXT: retq399;400; SSE2-LABEL: legal_abs_eq_unchanged_sext:401; SSE2: # %bb.0:402; SSE2-NEXT: movdqa %xmm0, %xmm1403; SSE2-NEXT: psrad $31, %xmm1404; SSE2-NEXT: pxor %xmm1, %xmm0405; SSE2-NEXT: psubd %xmm1, %xmm0406; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0407; SSE2-NEXT: retq408 %abs = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %x, i1 true)409 %cmp = icmp eq <4 x i32> %abs, <i32 129, i32 129, i32 129, i32 129>410 %r = sext <4 x i1> %cmp to <4 x i32>411 ret <4 x i32> %r412}413 414define <4 x i1> @legal_abs_ne_unchangedd(<4 x i32> %x) {415; AVX512-LABEL: legal_abs_ne_unchangedd:416; AVX512: # %bb.0:417; AVX512-NEXT: vpabsd %xmm0, %xmm0418; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]419; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0420; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm0421; AVX512-NEXT: retq422;423; AVX2-LABEL: legal_abs_ne_unchangedd:424; AVX2: # %bb.0:425; AVX2-NEXT: vpabsd %xmm0, %xmm0426; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]427; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0428; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1429; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0430; AVX2-NEXT: retq431;432; SSE41-LABEL: legal_abs_ne_unchangedd:433; SSE41: # %bb.0:434; SSE41-NEXT: pabsd %xmm0, %xmm1435; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1436; SSE41-NEXT: pcmpeqd %xmm0, %xmm0437; SSE41-NEXT: pxor %xmm1, %xmm0438; SSE41-NEXT: retq439;440; SSE2-LABEL: legal_abs_ne_unchangedd:441; SSE2: # %bb.0:442; SSE2-NEXT: movdqa %xmm0, %xmm1443; SSE2-NEXT: psrad $31, %xmm1444; SSE2-NEXT: pxor %xmm1, %xmm0445; SSE2-NEXT: psubd %xmm1, %xmm0446; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0447; SSE2-NEXT: pcmpeqd %xmm1, %xmm1448; SSE2-NEXT: pxor %xmm1, %xmm0449; SSE2-NEXT: retq450 %abs = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %x, i1 true)451 %cmp = icmp ne <4 x i32> %abs, <i32 129, i32 129, i32 129, i32 129>452 ret <4 x i1> %cmp453}454 455define <4 x i32> @legal_abs_ne_unchangedd_sext(<4 x i32> %x) {456; AVX512-LABEL: legal_abs_ne_unchangedd_sext:457; AVX512: # %bb.0:458; AVX512-NEXT: vpabsd %xmm0, %xmm0459; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]460; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0461; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm0462; AVX512-NEXT: retq463;464; AVX2-LABEL: legal_abs_ne_unchangedd_sext:465; AVX2: # %bb.0:466; AVX2-NEXT: vpabsd %xmm0, %xmm0467; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [129,129,129,129]468; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0469; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1470; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0471; AVX2-NEXT: retq472;473; SSE41-LABEL: legal_abs_ne_unchangedd_sext:474; SSE41: # %bb.0:475; SSE41-NEXT: pabsd %xmm0, %xmm1476; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1477; SSE41-NEXT: pcmpeqd %xmm0, %xmm0478; SSE41-NEXT: pxor %xmm1, %xmm0479; SSE41-NEXT: retq480;481; SSE2-LABEL: legal_abs_ne_unchangedd_sext:482; SSE2: # %bb.0:483; SSE2-NEXT: movdqa %xmm0, %xmm1484; SSE2-NEXT: psrad $31, %xmm1485; SSE2-NEXT: pxor %xmm1, %xmm0486; SSE2-NEXT: psubd %xmm1, %xmm0487; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0488; SSE2-NEXT: pcmpeqd %xmm1, %xmm1489; SSE2-NEXT: pxor %xmm1, %xmm0490; SSE2-NEXT: retq491 %abs = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %x, i1 true)492 %cmp = icmp ne <4 x i32> %abs, <i32 129, i32 129, i32 129, i32 129>493 %r = sext <4 x i1> %cmp to <4 x i32>494 ret <4 x i32> %r495}496 497define <4 x i1> @eq_or_to_abs_vec4x64(<4 x i64> %x) {498; AVX512-LABEL: eq_or_to_abs_vec4x64:499; AVX512: # %bb.0:500; AVX512-NEXT: vpabsq %ymm0, %ymm0501; AVX512-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1502; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0503; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}504; AVX512-NEXT: vzeroupper505; AVX512-NEXT: retq506;507; AVX2-LABEL: eq_or_to_abs_vec4x64:508; AVX2: # %bb.0:509; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]510; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm1511; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551487,18446744073709551487,18446744073709551487,18446744073709551487]512; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm0513; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0514; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1515; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0516; AVX2-NEXT: vzeroupper517; AVX2-NEXT: retq518;519; SSE41-LABEL: eq_or_to_abs_vec4x64:520; SSE41: # %bb.0:521; SSE41-NEXT: pmovzxbq {{.*#+}} xmm2 = [129,129]522; SSE41-NEXT: movdqa %xmm0, %xmm3523; SSE41-NEXT: pcmpeqq %xmm2, %xmm3524; SSE41-NEXT: pcmpeqq %xmm1, %xmm2525; SSE41-NEXT: pmovsxwq {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]526; SSE41-NEXT: pcmpeqq %xmm4, %xmm0527; SSE41-NEXT: por %xmm3, %xmm0528; SSE41-NEXT: pcmpeqq %xmm4, %xmm1529; SSE41-NEXT: por %xmm2, %xmm1530; SSE41-NEXT: packssdw %xmm1, %xmm0531; SSE41-NEXT: retq532;533; SSE2-LABEL: eq_or_to_abs_vec4x64:534; SSE2: # %bb.0:535; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]536; SSE2-NEXT: movdqa %xmm1, %xmm3537; SSE2-NEXT: pcmpeqd %xmm2, %xmm3538; SSE2-NEXT: pcmpeqd %xmm0, %xmm2539; SSE2-NEXT: movdqa %xmm2, %xmm4540; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm3[1,3]541; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]542; SSE2-NEXT: andps %xmm4, %xmm2543; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [18446744073709551487,18446744073709551487]544; SSE2-NEXT: pcmpeqd %xmm3, %xmm1545; SSE2-NEXT: pcmpeqd %xmm3, %xmm0546; SSE2-NEXT: movdqa %xmm0, %xmm3547; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,3],xmm1[1,3]548; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]549; SSE2-NEXT: andps %xmm3, %xmm0550; SSE2-NEXT: orps %xmm2, %xmm0551; SSE2-NEXT: retq552 %cmp1 = icmp eq <4 x i64> %x, <i64 129, i64 129, i64 129, i64 129>553 %cmp2 = icmp eq <4 x i64> %x, <i64 -129, i64 -129, i64 -129, i64 -129>554 %cmp = or <4 x i1> %cmp1, %cmp2555 ret <4 x i1> %cmp556}557 558define <4 x i64> @eq_or_to_abs_vec4x64_sext(<4 x i64> %x) {559; AVX512-LABEL: eq_or_to_abs_vec4x64_sext:560; AVX512: # %bb.0:561; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]562; AVX512-NEXT: vpabsq %ymm0, %ymm0563; AVX512-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0564; AVX512-NEXT: retq565;566; AVX2-LABEL: eq_or_to_abs_vec4x64_sext:567; AVX2: # %bb.0:568; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]569; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm1570; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551487,18446744073709551487,18446744073709551487,18446744073709551487]571; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm0572; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0573; AVX2-NEXT: retq574;575; SSE41-LABEL: eq_or_to_abs_vec4x64_sext:576; SSE41: # %bb.0:577; SSE41-NEXT: pmovzxbq {{.*#+}} xmm2 = [129,129]578; SSE41-NEXT: movdqa %xmm0, %xmm3579; SSE41-NEXT: pcmpeqq %xmm2, %xmm3580; SSE41-NEXT: pcmpeqq %xmm1, %xmm2581; SSE41-NEXT: pmovsxwq {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]582; SSE41-NEXT: pcmpeqq %xmm4, %xmm0583; SSE41-NEXT: por %xmm3, %xmm0584; SSE41-NEXT: pcmpeqq %xmm4, %xmm1585; SSE41-NEXT: por %xmm2, %xmm1586; SSE41-NEXT: packssdw %xmm1, %xmm0587; SSE41-NEXT: pmovsxdq %xmm0, %xmm2588; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]589; SSE41-NEXT: pslld $31, %xmm1590; SSE41-NEXT: psrad $31, %xmm1591; SSE41-NEXT: movdqa %xmm2, %xmm0592; SSE41-NEXT: retq593;594; SSE2-LABEL: eq_or_to_abs_vec4x64_sext:595; SSE2: # %bb.0:596; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]597; SSE2-NEXT: movdqa %xmm1, %xmm3598; SSE2-NEXT: pcmpeqd %xmm2, %xmm3599; SSE2-NEXT: pcmpeqd %xmm0, %xmm2600; SSE2-NEXT: movdqa %xmm2, %xmm4601; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm3[1,3]602; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]603; SSE2-NEXT: andps %xmm4, %xmm2604; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [18446744073709551487,18446744073709551487]605; SSE2-NEXT: pcmpeqd %xmm3, %xmm1606; SSE2-NEXT: pcmpeqd %xmm3, %xmm0607; SSE2-NEXT: movdqa %xmm0, %xmm3608; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,3],xmm1[1,3]609; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]610; SSE2-NEXT: andps %xmm3, %xmm0611; SSE2-NEXT: orps %xmm2, %xmm0612; SSE2-NEXT: xorps %xmm2, %xmm2613; SSE2-NEXT: pcmpgtd %xmm0, %xmm2614; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]615; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]616; SSE2-NEXT: pslld $31, %xmm1617; SSE2-NEXT: psrad $31, %xmm1618; SSE2-NEXT: retq619 %cmp1 = icmp eq <4 x i64> %x, <i64 129, i64 129, i64 129, i64 129>620 %cmp2 = icmp eq <4 x i64> %x, <i64 -129, i64 -129, i64 -129, i64 -129>621 %cmp = or <4 x i1> %cmp1, %cmp2622 %r = sext <4 x i1> %cmp to <4 x i64>623 ret <4 x i64> %r624}625 626define <4 x i1> @ne_and_to_abs_vec4x64(<4 x i64> %x) {627; AVX512-LABEL: ne_and_to_abs_vec4x64:628; AVX512: # %bb.0:629; AVX512-NEXT: vpabsq %ymm0, %ymm0630; AVX512-NEXT: vpcmpneqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1631; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0632; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}633; AVX512-NEXT: vzeroupper634; AVX512-NEXT: retq635;636; AVX2-LABEL: ne_and_to_abs_vec4x64:637; AVX2: # %bb.0:638; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]639; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm1640; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2641; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [18446744073709551487,18446744073709551487,18446744073709551487,18446744073709551487]642; AVX2-NEXT: vpcmpeqq %ymm3, %ymm0, %ymm0643; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0644; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0645; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1646; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0647; AVX2-NEXT: vzeroupper648; AVX2-NEXT: retq649;650; SSE41-LABEL: ne_and_to_abs_vec4x64:651; SSE41: # %bb.0:652; SSE41-NEXT: pmovzxbq {{.*#+}} xmm2 = [129,129]653; SSE41-NEXT: movdqa %xmm0, %xmm3654; SSE41-NEXT: pcmpeqq %xmm2, %xmm3655; SSE41-NEXT: pcmpeqq %xmm1, %xmm2656; SSE41-NEXT: pcmpeqd %xmm4, %xmm4657; SSE41-NEXT: pmovsxwq {{.*#+}} xmm5 = [18446744073709551487,18446744073709551487]658; SSE41-NEXT: pcmpeqq %xmm5, %xmm0659; SSE41-NEXT: por %xmm3, %xmm0660; SSE41-NEXT: pcmpeqq %xmm5, %xmm1661; SSE41-NEXT: por %xmm2, %xmm1662; SSE41-NEXT: packssdw %xmm1, %xmm0663; SSE41-NEXT: pxor %xmm4, %xmm0664; SSE41-NEXT: retq665;666; SSE2-LABEL: ne_and_to_abs_vec4x64:667; SSE2: # %bb.0:668; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]669; SSE2-NEXT: movdqa %xmm1, %xmm3670; SSE2-NEXT: pcmpeqd %xmm2, %xmm3671; SSE2-NEXT: pcmpeqd %xmm0, %xmm2672; SSE2-NEXT: movdqa %xmm2, %xmm4673; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm3[1,3]674; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]675; SSE2-NEXT: andps %xmm4, %xmm2676; SSE2-NEXT: pcmpeqd %xmm3, %xmm3677; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]678; SSE2-NEXT: pcmpeqd %xmm4, %xmm1679; SSE2-NEXT: pcmpeqd %xmm4, %xmm0680; SSE2-NEXT: movdqa %xmm0, %xmm4681; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm1[1,3]682; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]683; SSE2-NEXT: andps %xmm4, %xmm0684; SSE2-NEXT: orps %xmm2, %xmm0685; SSE2-NEXT: xorps %xmm3, %xmm0686; SSE2-NEXT: retq687 %cmp1 = icmp ne <4 x i64> %x, <i64 129, i64 129, i64 129, i64 129>688 %cmp2 = icmp ne <4 x i64> %x, <i64 -129, i64 -129, i64 -129, i64 -129>689 %cmp = and <4 x i1> %cmp1, %cmp2690 ret <4 x i1> %cmp691}692 693define <4 x i64> @ne_and_to_abs_vec4x64_sext(<4 x i64> %x) {694; AVX512-LABEL: ne_and_to_abs_vec4x64_sext:695; AVX512: # %bb.0:696; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]697; AVX512-NEXT: vpabsq %ymm0, %ymm0698; AVX512-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm0699; AVX512-NEXT: vpternlogq {{.*#+}} ymm0 = ~ymm0700; AVX512-NEXT: retq701;702; AVX2-LABEL: ne_and_to_abs_vec4x64_sext:703; AVX2: # %bb.0:704; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [129,129,129,129]705; AVX2-NEXT: vpcmpeqq %ymm1, %ymm0, %ymm1706; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2707; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [18446744073709551487,18446744073709551487,18446744073709551487,18446744073709551487]708; AVX2-NEXT: vpcmpeqq %ymm3, %ymm0, %ymm0709; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0710; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0711; AVX2-NEXT: retq712;713; SSE41-LABEL: ne_and_to_abs_vec4x64_sext:714; SSE41: # %bb.0:715; SSE41-NEXT: pmovzxbq {{.*#+}} xmm2 = [129,129]716; SSE41-NEXT: movdqa %xmm0, %xmm3717; SSE41-NEXT: pcmpeqq %xmm2, %xmm3718; SSE41-NEXT: pcmpeqq %xmm1, %xmm2719; SSE41-NEXT: pcmpeqd %xmm4, %xmm4720; SSE41-NEXT: pmovsxwq {{.*#+}} xmm5 = [18446744073709551487,18446744073709551487]721; SSE41-NEXT: pcmpeqq %xmm5, %xmm0722; SSE41-NEXT: por %xmm3, %xmm0723; SSE41-NEXT: pcmpeqq %xmm5, %xmm1724; SSE41-NEXT: por %xmm2, %xmm1725; SSE41-NEXT: packssdw %xmm1, %xmm0726; SSE41-NEXT: pxor %xmm4, %xmm0727; SSE41-NEXT: pmovsxdq %xmm0, %xmm2728; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]729; SSE41-NEXT: pslld $31, %xmm1730; SSE41-NEXT: psrad $31, %xmm1731; SSE41-NEXT: movdqa %xmm2, %xmm0732; SSE41-NEXT: retq733;734; SSE2-LABEL: ne_and_to_abs_vec4x64_sext:735; SSE2: # %bb.0:736; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [129,129]737; SSE2-NEXT: movdqa %xmm1, %xmm3738; SSE2-NEXT: pcmpeqd %xmm2, %xmm3739; SSE2-NEXT: pcmpeqd %xmm0, %xmm2740; SSE2-NEXT: movdqa %xmm2, %xmm4741; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm3[1,3]742; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]743; SSE2-NEXT: andps %xmm4, %xmm2744; SSE2-NEXT: pcmpeqd %xmm3, %xmm3745; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [18446744073709551487,18446744073709551487]746; SSE2-NEXT: pcmpeqd %xmm4, %xmm1747; SSE2-NEXT: pcmpeqd %xmm4, %xmm0748; SSE2-NEXT: movdqa %xmm0, %xmm4749; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm1[1,3]750; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]751; SSE2-NEXT: andps %xmm4, %xmm0752; SSE2-NEXT: orps %xmm2, %xmm0753; SSE2-NEXT: xorps %xmm3, %xmm0754; SSE2-NEXT: xorps %xmm2, %xmm2755; SSE2-NEXT: pcmpgtd %xmm0, %xmm2756; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,2,3,3]757; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]758; SSE2-NEXT: pslld $31, %xmm1759; SSE2-NEXT: psrad $31, %xmm1760; SSE2-NEXT: retq761 %cmp1 = icmp ne <4 x i64> %x, <i64 129, i64 129, i64 129, i64 129>762 %cmp2 = icmp ne <4 x i64> %x, <i64 -129, i64 -129, i64 -129, i64 -129>763 %cmp = and <4 x i1> %cmp1, %cmp2764 %r = sext <4 x i1> %cmp to <4 x i64>765 ret <4 x i64> %r766}767 768define <4 x i1> @eq_or_to_abs_vec4x32(<4 x i32> %x) {769; AVX512-LABEL: eq_or_to_abs_vec4x32:770; AVX512: # %bb.0:771; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]772; AVX512-NEXT: vpabsd %xmm0, %xmm0773; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0774; AVX512-NEXT: retq775;776; AVX2-LABEL: eq_or_to_abs_vec4x32:777; AVX2: # %bb.0:778; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]779; AVX2-NEXT: vpabsd %xmm0, %xmm0780; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0781; AVX2-NEXT: retq782;783; SSE41-LABEL: eq_or_to_abs_vec4x32:784; SSE41: # %bb.0:785; SSE41-NEXT: pabsd %xmm0, %xmm0786; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0787; SSE41-NEXT: retq788;789; SSE2-LABEL: eq_or_to_abs_vec4x32:790; SSE2: # %bb.0:791; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1]792; SSE2-NEXT: pcmpeqd %xmm0, %xmm1793; SSE2-NEXT: pcmpeqd %xmm2, %xmm2794; SSE2-NEXT: pcmpeqd %xmm2, %xmm0795; SSE2-NEXT: por %xmm1, %xmm0796; SSE2-NEXT: retq797 %cmp1 = icmp eq <4 x i32> %x, <i32 1, i32 1, i32 1, i32 1>798 %cmp2 = icmp eq <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>799 %cmp = or <4 x i1> %cmp1, %cmp2800 ret <4 x i1> %cmp801}802 803define <4 x i32> @eq_or_to_abs_vec4x32_sext(<4 x i32> %x) {804; AVX512-LABEL: eq_or_to_abs_vec4x32_sext:805; AVX512: # %bb.0:806; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]807; AVX512-NEXT: vpabsd %xmm0, %xmm0808; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0809; AVX512-NEXT: retq810;811; AVX2-LABEL: eq_or_to_abs_vec4x32_sext:812; AVX2: # %bb.0:813; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]814; AVX2-NEXT: vpabsd %xmm0, %xmm0815; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0816; AVX2-NEXT: retq817;818; SSE41-LABEL: eq_or_to_abs_vec4x32_sext:819; SSE41: # %bb.0:820; SSE41-NEXT: pabsd %xmm0, %xmm0821; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0822; SSE41-NEXT: retq823;824; SSE2-LABEL: eq_or_to_abs_vec4x32_sext:825; SSE2: # %bb.0:826; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1]827; SSE2-NEXT: pcmpeqd %xmm0, %xmm1828; SSE2-NEXT: pcmpeqd %xmm2, %xmm2829; SSE2-NEXT: pcmpeqd %xmm2, %xmm0830; SSE2-NEXT: por %xmm1, %xmm0831; SSE2-NEXT: retq832 %cmp1 = icmp eq <4 x i32> %x, <i32 1, i32 1, i32 1, i32 1>833 %cmp2 = icmp eq <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>834 %cmp = or <4 x i1> %cmp1, %cmp2835 %r = sext <4 x i1> %cmp to <4 x i32>836 ret <4 x i32> %r837}838 839define <4 x i1> @ne_and_to_abs_vec4x32(<4 x i32> %x) {840; AVX512-LABEL: ne_and_to_abs_vec4x32:841; AVX512: # %bb.0:842; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]843; AVX512-NEXT: vpabsd %xmm0, %xmm0844; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0845; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm0846; AVX512-NEXT: retq847;848; AVX2-LABEL: ne_and_to_abs_vec4x32:849; AVX2: # %bb.0:850; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]851; AVX2-NEXT: vpabsd %xmm0, %xmm0852; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0853; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1854; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0855; AVX2-NEXT: retq856;857; SSE41-LABEL: ne_and_to_abs_vec4x32:858; SSE41: # %bb.0:859; SSE41-NEXT: pabsd %xmm0, %xmm1860; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1861; SSE41-NEXT: pcmpeqd %xmm0, %xmm0862; SSE41-NEXT: pxor %xmm1, %xmm0863; SSE41-NEXT: retq864;865; SSE2-LABEL: ne_and_to_abs_vec4x32:866; SSE2: # %bb.0:867; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1]868; SSE2-NEXT: pcmpeqd %xmm0, %xmm1869; SSE2-NEXT: pcmpeqd %xmm2, %xmm2870; SSE2-NEXT: pcmpeqd %xmm2, %xmm0871; SSE2-NEXT: por %xmm1, %xmm0872; SSE2-NEXT: pxor %xmm2, %xmm0873; SSE2-NEXT: retq874 %cmp1 = icmp ne <4 x i32> %x, <i32 1, i32 1, i32 1, i32 1>875 %cmp2 = icmp ne <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>876 %cmp = and <4 x i1> %cmp1, %cmp2877 ret <4 x i1> %cmp878}879 880define <4 x i32> @ne_and_to_abs_vec4x32_sext(<4 x i32> %x) {881; AVX512-LABEL: ne_and_to_abs_vec4x32_sext:882; AVX512: # %bb.0:883; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]884; AVX512-NEXT: vpabsd %xmm0, %xmm0885; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0886; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm0887; AVX512-NEXT: retq888;889; AVX2-LABEL: ne_and_to_abs_vec4x32_sext:890; AVX2: # %bb.0:891; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]892; AVX2-NEXT: vpabsd %xmm0, %xmm0893; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0894; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1895; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0896; AVX2-NEXT: retq897;898; SSE41-LABEL: ne_and_to_abs_vec4x32_sext:899; SSE41: # %bb.0:900; SSE41-NEXT: pabsd %xmm0, %xmm1901; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1902; SSE41-NEXT: pcmpeqd %xmm0, %xmm0903; SSE41-NEXT: pxor %xmm1, %xmm0904; SSE41-NEXT: retq905;906; SSE2-LABEL: ne_and_to_abs_vec4x32_sext:907; SSE2: # %bb.0:908; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1]909; SSE2-NEXT: pcmpeqd %xmm0, %xmm1910; SSE2-NEXT: pcmpeqd %xmm2, %xmm2911; SSE2-NEXT: pcmpeqd %xmm2, %xmm0912; SSE2-NEXT: por %xmm1, %xmm0913; SSE2-NEXT: pxor %xmm2, %xmm0914; SSE2-NEXT: retq915 %cmp1 = icmp ne <4 x i32> %x, <i32 1, i32 1, i32 1, i32 1>916 %cmp2 = icmp ne <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>917 %cmp = and <4 x i1> %cmp1, %cmp2918 %r = sext <4 x i1> %cmp to <4 x i32>919 ret <4 x i32> %r920}921 922define <4 x i1> @eq_or_to_abs_vec4x16(<4 x i16> %x) {923; AVX512-LABEL: eq_or_to_abs_vec4x16:924; AVX512: # %bb.0:925; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1926; AVX512-NEXT: vpmovsxwd %xmm1, %ymm1927; AVX512-NEXT: vptestmd %ymm1, %ymm1, %k0928; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0929; AVX512-NEXT: vpmovsxwd %xmm0, %ymm0930; AVX512-NEXT: vptestmd %ymm0, %ymm0, %k1931; AVX512-NEXT: korw %k1, %k0, %k1932; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0933; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}934; AVX512-NEXT: vzeroupper935; AVX512-NEXT: retq936;937; AVX2-LABEL: eq_or_to_abs_vec4x16:938; AVX2: # %bb.0:939; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1940; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0941; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm0942; AVX2-NEXT: vpmovsxwd %xmm0, %xmm0943; AVX2-NEXT: retq944;945; SSE41-LABEL: eq_or_to_abs_vec4x16:946; SSE41: # %bb.0:947; SSE41-NEXT: pmovsxbw {{.*#+}} xmm1 = [88,88,88,88,88,88,88,88]948; SSE41-NEXT: pcmpeqw %xmm0, %xmm1949; SSE41-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0950; SSE41-NEXT: por %xmm1, %xmm0951; SSE41-NEXT: pmovsxwd %xmm0, %xmm0952; SSE41-NEXT: retq953;954; SSE2-LABEL: eq_or_to_abs_vec4x16:955; SSE2: # %bb.0:956; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u]957; SSE2-NEXT: pcmpeqw %xmm0, %xmm1958; SSE2-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0959; SSE2-NEXT: por %xmm1, %xmm0960; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]961; SSE2-NEXT: retq962 %cmp1 = icmp eq <4 x i16> %x, <i16 88, i16 88, i16 88, i16 88>963 %cmp2 = icmp eq <4 x i16> %x, <i16 -88, i16 -88, i16 -88, i16 -88>964 %cmp = or <4 x i1> %cmp1, %cmp2965 ret <4 x i1> %cmp966}967 968define <4 x i8> @eq_or_to_abs_vec4x8_sext(<4 x i8> %x) {969; AVX512-LABEL: eq_or_to_abs_vec4x8_sext:970; AVX512: # %bb.0:971; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1972; AVX512-NEXT: vpmovsxbd %xmm1, %zmm1973; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k0974; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0975; AVX512-NEXT: vpmovsxbd %xmm0, %zmm0976; AVX512-NEXT: vptestmd %zmm0, %zmm0, %k1977; AVX512-NEXT: korw %k1, %k0, %k1978; AVX512-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1979; AVX512-NEXT: vpmovdb %zmm0, %xmm0980; AVX512-NEXT: vzeroupper981; AVX512-NEXT: retq982;983; AVX2-LABEL: eq_or_to_abs_vec4x8_sext:984; AVX2: # %bb.0:985; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1986; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0987; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm0988; AVX2-NEXT: retq989;990; SSE41-LABEL: eq_or_to_abs_vec4x8_sext:991; SSE41: # %bb.0:992; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u,u,u,u,u,u,u,u,u]993; SSE41-NEXT: pcmpeqb %xmm0, %xmm1994; SSE41-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0995; SSE41-NEXT: por %xmm1, %xmm0996; SSE41-NEXT: retq997;998; SSE2-LABEL: eq_or_to_abs_vec4x8_sext:999; SSE2: # %bb.0:1000; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u,u,u,u,u,u,u,u,u]1001; SSE2-NEXT: pcmpeqb %xmm0, %xmm11002; SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01003; SSE2-NEXT: por %xmm1, %xmm01004; SSE2-NEXT: retq1005 %cmp1 = icmp eq <4 x i8> %x, <i8 88, i8 88, i8 88, i8 88>1006 %cmp2 = icmp eq <4 x i8> %x, <i8 -88, i8 -88, i8 -88, i8 -88>1007 %cmp = or <4 x i1> %cmp1, %cmp21008 %r = sext <4 x i1> %cmp to <4 x i8>1009 ret <4 x i8> %r1010}1011 1012define <4 x i1> @ne_and_to_abs_vec4x8(<4 x i8> %x) {1013; AVX512-LABEL: ne_and_to_abs_vec4x8:1014; AVX512: # %bb.0:1015; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11016; AVX512-NEXT: vpternlogq {{.*#+}} xmm1 = ~xmm11017; AVX512-NEXT: vpmovsxbd %xmm1, %zmm11018; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k01019; AVX512-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01020; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm01021; AVX512-NEXT: vpmovsxbd %xmm0, %zmm01022; AVX512-NEXT: vptestmd %zmm0, %zmm0, %k11023; AVX512-NEXT: kandw %k1, %k0, %k11024; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm01025; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z}1026; AVX512-NEXT: vzeroupper1027; AVX512-NEXT: retq1028;1029; AVX2-LABEL: ne_and_to_abs_vec4x8:1030; AVX2: # %bb.0:1031; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11032; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21033; AVX2-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01034; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm01035; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm01036; AVX2-NEXT: vpmovsxbd %xmm0, %xmm01037; AVX2-NEXT: retq1038;1039; SSE41-LABEL: ne_and_to_abs_vec4x8:1040; SSE41: # %bb.0:1041; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u,u,u,u,u,u,u,u,u]1042; SSE41-NEXT: pcmpeqb %xmm0, %xmm11043; SSE41-NEXT: pcmpeqd %xmm2, %xmm21044; SSE41-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01045; SSE41-NEXT: por %xmm1, %xmm01046; SSE41-NEXT: pxor %xmm2, %xmm01047; SSE41-NEXT: pmovsxbd %xmm0, %xmm01048; SSE41-NEXT: retq1049;1050; SSE2-LABEL: ne_and_to_abs_vec4x8:1051; SSE2: # %bb.0:1052; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u,u,u,u,u,u,u,u,u]1053; SSE2-NEXT: pcmpeqb %xmm0, %xmm11054; SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01055; SSE2-NEXT: por %xmm1, %xmm01056; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1057; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1058; SSE2-NEXT: pcmpeqd %xmm1, %xmm11059; SSE2-NEXT: pxor %xmm1, %xmm01060; SSE2-NEXT: retq1061 %cmp1 = icmp ne <4 x i8> %x, <i8 88, i8 88, i8 88, i8 88>1062 %cmp2 = icmp ne <4 x i8> %x, <i8 -88, i8 -88, i8 -88, i8 -88>1063 %cmp = and <4 x i1> %cmp1, %cmp21064 ret <4 x i1> %cmp1065}1066 1067define <4 x i16> @ne_and_to_abs_vec4x16_sext(<4 x i16> %x) {1068; AVX512-LABEL: ne_and_to_abs_vec4x16_sext:1069; AVX512: # %bb.0:1070; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11071; AVX512-NEXT: vpternlogq {{.*#+}} xmm1 = ~xmm11072; AVX512-NEXT: vpmovsxwd %xmm1, %ymm11073; AVX512-NEXT: vptestmd %ymm1, %ymm1, %k01074; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01075; AVX512-NEXT: vpternlogq {{.*#+}} xmm0 = ~xmm01076; AVX512-NEXT: vpmovsxwd %xmm0, %ymm01077; AVX512-NEXT: vptestmd %ymm0, %ymm0, %k11078; AVX512-NEXT: kandw %k1, %k0, %k11079; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm01080; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z}1081; AVX512-NEXT: vpmovdw %ymm0, %xmm01082; AVX512-NEXT: vzeroupper1083; AVX512-NEXT: retq1084;1085; AVX2-LABEL: ne_and_to_abs_vec4x16_sext:1086; AVX2: # %bb.0:1087; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11088; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm21089; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01090; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm01091; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm01092; AVX2-NEXT: retq1093;1094; SSE41-LABEL: ne_and_to_abs_vec4x16_sext:1095; SSE41: # %bb.0:1096; SSE41-NEXT: pmovsxbw {{.*#+}} xmm1 = [88,88,88,88,88,88,88,88]1097; SSE41-NEXT: pcmpeqw %xmm0, %xmm11098; SSE41-NEXT: pcmpeqd %xmm2, %xmm21099; SSE41-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01100; SSE41-NEXT: por %xmm1, %xmm01101; SSE41-NEXT: pxor %xmm2, %xmm01102; SSE41-NEXT: retq1103;1104; SSE2-LABEL: ne_and_to_abs_vec4x16_sext:1105; SSE2: # %bb.0:1106; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [88,88,88,88,u,u,u,u]1107; SSE2-NEXT: pcmpeqw %xmm0, %xmm11108; SSE2-NEXT: pcmpeqd %xmm2, %xmm21109; SSE2-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01110; SSE2-NEXT: por %xmm1, %xmm01111; SSE2-NEXT: pxor %xmm2, %xmm01112; SSE2-NEXT: retq1113 %cmp1 = icmp ne <4 x i16> %x, <i16 88, i16 88, i16 88, i16 88>1114 %cmp2 = icmp ne <4 x i16> %x, <i16 -88, i16 -88, i16 -88, i16 -88>1115 %cmp = and <4 x i1> %cmp1, %cmp21116 %r = sext <4 x i1> %cmp to <4 x i16>1117 ret <4 x i16> %r1118}1119