1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512 3; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1 4; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2 5; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE41 6; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2 7 8declare void @use.v4.i32(<4 x i32>) 9 10define <4 x i32> @eq_or_eq_ult_2(<4 x i32> %x) { 11; AVX512-LABEL: eq_or_eq_ult_2: 12; AVX512: # %bb.0: 13; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0 14; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 15; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 16; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} 17; AVX512-NEXT: retq 18; 19; AVX1-LABEL: eq_or_eq_ult_2: 20; AVX1: # %bb.0: 21; AVX1-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 22; AVX1-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 23; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0 24; AVX1-NEXT: retq 25; 26; AVX2-LABEL: eq_or_eq_ult_2: 27; AVX2: # %bb.0: 28; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6] 29; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1 30; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm2 = [5,5,5,5] 31; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0 32; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0 33; AVX2-NEXT: retq 34; 35; SSE41-LABEL: eq_or_eq_ult_2: 36; SSE41: # %bb.0: 37; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [6,6,6,6] 38; SSE41-NEXT: pcmpeqd %xmm0, %xmm1 39; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 40; SSE41-NEXT: por %xmm1, %xmm0 41; SSE41-NEXT: retq 42; 43; SSE2-LABEL: eq_or_eq_ult_2: 44; SSE2: # %bb.0: 45; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [6,6,6,6] 46; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 47; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 48; SSE2-NEXT: por %xmm1, %xmm0 49; SSE2-NEXT: retq 50 %x_adj = add <4 x i32> %x, <i32 -5, i32 -5, i32 -5, i32 -5> 51 %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2> 52 %r = sext <4 x i1> %cmp to <4 x i32> 53 ret <4 x i32> %r 54} 55 56define <4 x i32> @eq_or_eq_ult_2_only_transform_sse2(<4 x i32> %x) { 57; AVX512-LABEL: eq_or_eq_ult_2_only_transform_sse2: 58; AVX512: # %bb.0: 59; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 60; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0 61; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 62; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1} {z} 63; AVX512-NEXT: retq 64; 65; AVX1-LABEL: eq_or_eq_ult_2_only_transform_sse2: 66; AVX1: # %bb.0: 67; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 68; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 69; AVX1-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 70; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 71; AVX1-NEXT: retq 72; 73; AVX2-LABEL: eq_or_eq_ult_2_only_transform_sse2: 74; AVX2: # %bb.0: 75; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 76; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0 77; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1] 78; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm1 79; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 80; AVX2-NEXT: retq 81; 82; SSE41-LABEL: eq_or_eq_ult_2_only_transform_sse2: 83; SSE41: # %bb.0: 84; SSE41-NEXT: pcmpeqd %xmm1, %xmm1 85; SSE41-NEXT: paddd %xmm1, %xmm0 86; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [1,1,1,1] 87; SSE41-NEXT: pminud %xmm0, %xmm1 88; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 89; SSE41-NEXT: retq 90; 91; SSE2-LABEL: eq_or_eq_ult_2_only_transform_sse2: 92; SSE2: # %bb.0: 93; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [2,2,2,2] 94; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 95; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 96; SSE2-NEXT: por %xmm1, %xmm0 97; SSE2-NEXT: retq 98 %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1> 99 %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2> 100 %r = sext <4 x i1> %cmp to <4 x i32> 101 ret <4 x i32> %r 102} 103 104define <4 x i32> @eq_or_eq_ult_2_fail_multiuse(<4 x i32> %x) { 105; AVX512-LABEL: eq_or_eq_ult_2_fail_multiuse: 106; AVX512: # %bb.0: 107; AVX512-NEXT: subq $24, %rsp 108; AVX512-NEXT: .cfi_def_cfa_offset 32 109; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 110; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0 111; AVX512-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill 112; AVX512-NEXT: callq use.v4.i32@PLT 113; AVX512-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload 114; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 115; AVX512-NEXT: vmovdqa32 {{.*#+}} xmm0 {%k1} {z} = [4294967295,4294967295,4294967295,4294967295] 116; AVX512-NEXT: addq $24, %rsp 117; AVX512-NEXT: .cfi_def_cfa_offset 8 118; AVX512-NEXT: retq 119; 120; AVX1-LABEL: eq_or_eq_ult_2_fail_multiuse: 121; AVX1: # %bb.0: 122; AVX1-NEXT: subq $24, %rsp 123; AVX1-NEXT: .cfi_def_cfa_offset 32 124; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 125; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 126; AVX1-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill 127; AVX1-NEXT: callq use.v4.i32@PLT 128; AVX1-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload 129; AVX1-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0 130; AVX1-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm0 131; AVX1-NEXT: addq $24, %rsp 132; AVX1-NEXT: .cfi_def_cfa_offset 8 133; AVX1-NEXT: retq 134; 135; AVX2-LABEL: eq_or_eq_ult_2_fail_multiuse: 136; AVX2: # %bb.0: 137; AVX2-NEXT: subq $24, %rsp 138; AVX2-NEXT: .cfi_def_cfa_offset 32 139; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 140; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0 141; AVX2-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill 142; AVX2-NEXT: callq use.v4.i32@PLT 143; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm0 = [1,1,1,1] 144; AVX2-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload 145; AVX2-NEXT: vpminud %xmm0, %xmm1, %xmm0 146; AVX2-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm0 147; AVX2-NEXT: addq $24, %rsp 148; AVX2-NEXT: .cfi_def_cfa_offset 8 149; AVX2-NEXT: retq 150; 151; SSE41-LABEL: eq_or_eq_ult_2_fail_multiuse: 152; SSE41: # %bb.0: 153; SSE41-NEXT: subq $24, %rsp 154; SSE41-NEXT: .cfi_def_cfa_offset 32 155; SSE41-NEXT: pcmpeqd %xmm1, %xmm1 156; SSE41-NEXT: paddd %xmm1, %xmm0 157; SSE41-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill 158; SSE41-NEXT: callq use.v4.i32@PLT 159; SSE41-NEXT: pmovsxbd {{.*#+}} xmm0 = [1,1,1,1] 160; SSE41-NEXT: movdqa (%rsp), %xmm1 # 16-byte Reload 161; SSE41-NEXT: pminud %xmm1, %xmm0 162; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 163; SSE41-NEXT: addq $24, %rsp 164; SSE41-NEXT: .cfi_def_cfa_offset 8 165; SSE41-NEXT: retq 166; 167; SSE2-LABEL: eq_or_eq_ult_2_fail_multiuse: 168; SSE2: # %bb.0: 169; SSE2-NEXT: subq $24, %rsp 170; SSE2-NEXT: .cfi_def_cfa_offset 32 171; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 172; SSE2-NEXT: paddd %xmm0, %xmm1 173; SSE2-NEXT: movdqa %xmm1, (%rsp) # 16-byte Spill 174; SSE2-NEXT: movdqa %xmm1, %xmm0 175; SSE2-NEXT: callq use.v4.i32@PLT 176; SSE2-NEXT: movdqa (%rsp), %xmm1 # 16-byte Reload 177; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 178; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483650,2147483650,2147483650,2147483650] 179; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 180; SSE2-NEXT: addq $24, %rsp 181; SSE2-NEXT: .cfi_def_cfa_offset 8 182; SSE2-NEXT: retq 183 %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1> 184 call void @use.v4.i32(<4 x i32> %x_adj) 185 %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2> 186 %r = sext <4 x i1> %cmp to <4 x i32> 187 ret <4 x i32> %r 188} 189 190define <4 x i32> @eq_or_eq_ult_3_fail(<4 x i32> %x) { 191; AVX512-LABEL: eq_or_eq_ult_3_fail: 192; AVX512: # %bb.0: 193; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 194; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0 195; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 196; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1} {z} 197; AVX512-NEXT: retq 198; 199; AVX1-LABEL: eq_or_eq_ult_3_fail: 200; AVX1: # %bb.0: 201; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 202; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 203; AVX1-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 204; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 205; AVX1-NEXT: retq 206; 207; AVX2-LABEL: eq_or_eq_ult_3_fail: 208; AVX2: # %bb.0: 209; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 210; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0 211; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2] 212; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm1 213; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 214; AVX2-NEXT: retq 215; 216; SSE41-LABEL: eq_or_eq_ult_3_fail: 217; SSE41: # %bb.0: 218; SSE41-NEXT: pcmpeqd %xmm1, %xmm1 219; SSE41-NEXT: paddd %xmm1, %xmm0 220; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [2,2,2,2] 221; SSE41-NEXT: pminud %xmm0, %xmm1 222; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 223; SSE41-NEXT: retq 224; 225; SSE2-LABEL: eq_or_eq_ult_3_fail: 226; SSE2: # %bb.0: 227; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 228; SSE2-NEXT: paddd %xmm0, %xmm1 229; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 230; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651] 231; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 232; SSE2-NEXT: retq 233 %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1> 234 %cmp = icmp ult <4 x i32> %x_adj, <i32 3, i32 3, i32 3, i32 3> 235 %r = sext <4 x i1> %cmp to <4 x i32> 236 ret <4 x i32> %r 237} 238 239define <4 x i32> @eq_or_eq_ugt_m3(<4 x i32> %x) { 240; AVX512-LABEL: eq_or_eq_ugt_m3: 241; AVX512: # %bb.0: 242; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 243; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 244; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 245; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} 246; AVX512-NEXT: retq 247; 248; AVX-LABEL: eq_or_eq_ugt_m3: 249; AVX: # %bb.0: 250; AVX-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 251; AVX-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 252; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0 253; AVX-NEXT: retq 254; 255; SSE41-LABEL: eq_or_eq_ugt_m3: 256; SSE41: # %bb.0: 257; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [9,12,9,9] 258; SSE41-NEXT: pcmpeqd %xmm0, %xmm1 259; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 260; SSE41-NEXT: por %xmm1, %xmm0 261; SSE41-NEXT: retq 262; 263; SSE2-LABEL: eq_or_eq_ugt_m3: 264; SSE2: # %bb.0: 265; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [9,12,9,9] 266; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 267; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 268; SSE2-NEXT: por %xmm1, %xmm0 269; SSE2-NEXT: retq 270 %x_adj = add <4 x i32> %x, <i32 -11, i32 -14, i32 -11, i32 -11> 271 %cmp = icmp ugt <4 x i32> %x_adj, <i32 -3, i32 -3, i32 -3, i32 -3> 272 %r = sext <4 x i1> %cmp to <4 x i32> 273 ret <4 x i32> %r 274} 275 276define <4 x i32> @eq_or_eq_ule_1(<4 x i32> %x) { 277; AVX512-LABEL: eq_or_eq_ule_1: 278; AVX512: # %bb.0: 279; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 280; AVX512-NEXT: vpcmpleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 281; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 282; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} 283; AVX512-NEXT: retq 284; 285; AVX-LABEL: eq_or_eq_ule_1: 286; AVX: # %bb.0: 287; AVX-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 288; AVX-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 289; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0 290; AVX-NEXT: retq 291; 292; SSE41-LABEL: eq_or_eq_ule_1: 293; SSE41: # %bb.0: 294; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [0,4294967295,4294967294,4294967293] 295; SSE41-NEXT: pcmpeqd %xmm0, %xmm1 296; SSE41-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 297; SSE41-NEXT: por %xmm1, %xmm0 298; SSE41-NEXT: retq 299; 300; SSE2-LABEL: eq_or_eq_ule_1: 301; SSE2: # %bb.0: 302; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [0,4294967295,4294967294,4294967293] 303; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 304; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 305; SSE2-NEXT: por %xmm1, %xmm0 306; SSE2-NEXT: retq 307 %x_adj = add <4 x i32> %x, <i32 1, i32 2, i32 3, i32 4> 308 %cmp = icmp ule <4 x i32> %x_adj, <i32 1, i32 1, i32 1, i32 1> 309 %r = sext <4 x i1> %cmp to <4 x i32> 310 ret <4 x i32> %r 311} 312 313define <2 x i64> @eq_or_eq_uge_m2_i64(<2 x i64> %x) { 314; AVX512-LABEL: eq_or_eq_uge_m2_i64: 315; AVX512: # %bb.0: 316; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 317; AVX512-NEXT: vpcmpnltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k1 318; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 319; AVX512-NEXT: vmovdqa64 %xmm0, %xmm0 {%k1} {z} 320; AVX512-NEXT: retq 321; 322; AVX-LABEL: eq_or_eq_uge_m2_i64: 323; AVX: # %bb.0: 324; AVX-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 325; AVX-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 326; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0 327; AVX-NEXT: retq 328; 329; SSE41-LABEL: eq_or_eq_uge_m2_i64: 330; SSE41: # %bb.0: 331; SSE41-NEXT: pmovsxbq {{.*#+}} xmm1 = [18446744073709551613,18446744073709551612] 332; SSE41-NEXT: pcmpeqq %xmm0, %xmm1 333; SSE41-NEXT: pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 334; SSE41-NEXT: por %xmm1, %xmm0 335; SSE41-NEXT: retq 336; 337; SSE2-LABEL: eq_or_eq_uge_m2_i64: 338; SSE2: # %bb.0: 339; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [18446744073709551613,18446744073709551612] 340; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 341; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2] 342; SSE2-NEXT: pand %xmm1, %xmm2 343; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 344; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2] 345; SSE2-NEXT: pand %xmm1, %xmm0 346; SSE2-NEXT: por %xmm2, %xmm0 347; SSE2-NEXT: retq 348 %x_adj = add <2 x i64> %x, <i64 1, i64 2> 349 %cmp = icmp uge <2 x i64> %x_adj, <i64 -2, i64 -2> 350 %r = sext <2 x i1> %cmp to <2 x i64> 351 ret <2 x i64> %r 352} 353 354 355define <2 x i64> @eq_or_eq_uge_m2_i64_m1(<2 x i64> %x) { 356; AVX512-LABEL: eq_or_eq_uge_m2_i64_m1: 357; AVX512: # %bb.0: 358; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 359; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0 360; AVX512-NEXT: vpcmpnltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k1 361; AVX512-NEXT: vmovdqa64 %xmm1, %xmm0 {%k1} {z} 362; AVX512-NEXT: retq 363; 364; AVX-LABEL: eq_or_eq_uge_m2_i64_m1: 365; AVX: # %bb.0: 366; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 367; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm1 368; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm2 369; AVX-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm0 370; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0 371; AVX-NEXT: retq 372; 373; SSE41-LABEL: eq_or_eq_uge_m2_i64_m1: 374; SSE41: # %bb.0: 375; SSE41-NEXT: pcmpeqd %xmm1, %xmm1 376; SSE41-NEXT: pcmpeqq %xmm0, %xmm1 377; SSE41-NEXT: pxor %xmm2, %xmm2 378; SSE41-NEXT: pcmpeqq %xmm2, %xmm0 379; SSE41-NEXT: por %xmm1, %xmm0 380; SSE41-NEXT: retq 381; 382; SSE2-LABEL: eq_or_eq_uge_m2_i64_m1: 383; SSE2: # %bb.0: 384; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 385; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 386; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2] 387; SSE2-NEXT: pand %xmm1, %xmm2 388; SSE2-NEXT: pxor %xmm1, %xmm1 389; SSE2-NEXT: pcmpeqd %xmm1, %xmm0 390; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2] 391; SSE2-NEXT: pand %xmm1, %xmm0 392; SSE2-NEXT: por %xmm2, %xmm0 393; SSE2-NEXT: retq 394 %x_adj = add <2 x i64> %x, <i64 -1, i64 -1> 395 %cmp = icmp uge <2 x i64> %x_adj, <i64 -2, i64 -2> 396 %r = sext <2 x i1> %cmp to <2 x i64> 397 ret <2 x i64> %r 398} 399 400define <4 x i32> @eq_or_eq_uge_2_fail_(<4 x i32> %x) { 401; AVX512-LABEL: eq_or_eq_uge_2_fail_: 402; AVX512: # %bb.0: 403; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 404; AVX512-NEXT: vpcmpnltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1 405; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 406; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1} {z} 407; AVX512-NEXT: retq 408; 409; AVX1-LABEL: eq_or_eq_uge_2_fail_: 410; AVX1: # %bb.0: 411; AVX1-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 412; AVX1-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 413; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 414; AVX1-NEXT: retq 415; 416; AVX2-LABEL: eq_or_eq_uge_2_fail_: 417; AVX2: # %bb.0: 418; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 419; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2] 420; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm1 421; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0 422; AVX2-NEXT: retq 423; 424; SSE41-LABEL: eq_or_eq_uge_2_fail_: 425; SSE41: # %bb.0: 426; SSE41-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 427; SSE41-NEXT: pmovsxbd {{.*#+}} xmm1 = [2,2,2,2] 428; SSE41-NEXT: pmaxud %xmm0, %xmm1 429; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 430; SSE41-NEXT: retq 431; 432; SSE2-LABEL: eq_or_eq_uge_2_fail_: 433; SSE2: # %bb.0: 434; SSE2-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 435; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 436; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [2147483650,2147483650,2147483650,2147483650] 437; SSE2-NEXT: pcmpgtd %xmm0, %xmm1 438; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 439; SSE2-NEXT: pxor %xmm1, %xmm0 440; SSE2-NEXT: retq 441 %x_adj = add <4 x i32> %x, <i32 1, i32 2, i32 3, i32 4> 442 %cmp = icmp uge <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2> 443 %r = sext <4 x i1> %cmp to <4 x i32> 444 ret <4 x i32> %r 445} 446 447 448define <8 x i32> @eq_or_eq_ult_2_256(<8 x i32> %x) { 449; AVX512-LABEL: eq_or_eq_ult_2_256: 450; AVX512: # %bb.0: 451; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0 452; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 453; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0 454; AVX512-NEXT: vmovdqa32 %ymm0, %ymm0 {%k1} {z} 455; AVX512-NEXT: retq 456; 457; AVX1-LABEL: eq_or_eq_ult_2_256: 458; AVX1: # %bb.0: 459; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [4294967291,4294967291,4294967291,4294967291] 460; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm2 461; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 462; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 463; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] 464; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm3 465; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0 466; AVX1-NEXT: vpminud %xmm1, %xmm2, %xmm1 467; AVX1-NEXT: vpcmpeqd %xmm1, %xmm2, %xmm1 468; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 469; AVX1-NEXT: retq 470; 471; AVX2-LABEL: eq_or_eq_ult_2_256: 472; AVX2: # %bb.0: 473; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6] 474; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm1 475; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [5,5,5,5,5,5,5,5] 476; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm0 477; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 478; AVX2-NEXT: retq 479; 480; SSE41-LABEL: eq_or_eq_ult_2_256: 481; SSE41: # %bb.0: 482; SSE41-NEXT: pmovsxbd {{.*#+}} xmm2 = [6,6,6,6] 483; SSE41-NEXT: movdqa %xmm0, %xmm3 484; SSE41-NEXT: pcmpeqd %xmm2, %xmm3 485; SSE41-NEXT: pmovsxbd {{.*#+}} xmm4 = [5,5,5,5] 486; SSE41-NEXT: pcmpeqd %xmm4, %xmm0 487; SSE41-NEXT: por %xmm3, %xmm0 488; SSE41-NEXT: pcmpeqd %xmm1, %xmm2 489; SSE41-NEXT: pcmpeqd %xmm4, %xmm1 490; SSE41-NEXT: por %xmm2, %xmm1 491; SSE41-NEXT: retq 492; 493; SSE2-LABEL: eq_or_eq_ult_2_256: 494; SSE2: # %bb.0: 495; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [6,6,6,6] 496; SSE2-NEXT: movdqa %xmm0, %xmm3 497; SSE2-NEXT: pcmpeqd %xmm2, %xmm3 498; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [5,5,5,5] 499; SSE2-NEXT: pcmpeqd %xmm4, %xmm0 500; SSE2-NEXT: por %xmm3, %xmm0 501; SSE2-NEXT: pcmpeqd %xmm1, %xmm2 502; SSE2-NEXT: pcmpeqd %xmm4, %xmm1 503; SSE2-NEXT: por %xmm2, %xmm1 504; SSE2-NEXT: retq 505 %x_adj = add <8 x i32> %x, <i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5> 506 %cmp = icmp ult <8 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 507 %r = sext <8 x i1> %cmp to <8 x i32> 508 ret <8 x i32> %r 509} 510 511 512define <8 x i32> @eq_or_eq_ult_2_256_m1(<8 x i32> %x) { 513; AVX512-LABEL: eq_or_eq_ult_2_256_m1: 514; AVX512: # %bb.0: 515; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 516; AVX512-NEXT: vpaddd %ymm1, %ymm0, %ymm0 517; AVX512-NEXT: vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1 518; AVX512-NEXT: vmovdqa32 %ymm1, %ymm0 {%k1} {z} 519; AVX512-NEXT: retq 520; 521; AVX1-LABEL: eq_or_eq_ult_2_256_m1: 522; AVX1: # %bb.0: 523; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 524; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm2 525; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 526; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 527; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] 528; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm3 529; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0 530; AVX1-NEXT: vpminud %xmm1, %xmm2, %xmm1 531; AVX1-NEXT: vpcmpeqd %xmm1, %xmm2, %xmm1 532; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 533; AVX1-NEXT: retq 534; 535; AVX2-LABEL: eq_or_eq_ult_2_256_m1: 536; AVX2: # %bb.0: 537; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 538; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0 539; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] 540; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm1 541; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0 542; AVX2-NEXT: retq 543; 544; SSE41-LABEL: eq_or_eq_ult_2_256_m1: 545; SSE41: # %bb.0: 546; SSE41-NEXT: pmovsxbd {{.*#+}} xmm2 = [2,2,2,2] 547; SSE41-NEXT: movdqa %xmm0, %xmm3 548; SSE41-NEXT: pcmpeqd %xmm2, %xmm3 549; SSE41-NEXT: pmovsxbd {{.*#+}} xmm4 = [1,1,1,1] 550; SSE41-NEXT: pcmpeqd %xmm4, %xmm0 551; SSE41-NEXT: por %xmm3, %xmm0 552; SSE41-NEXT: pcmpeqd %xmm1, %xmm2 553; SSE41-NEXT: pcmpeqd %xmm4, %xmm1 554; SSE41-NEXT: por %xmm2, %xmm1 555; SSE41-NEXT: retq 556; 557; SSE2-LABEL: eq_or_eq_ult_2_256_m1: 558; SSE2: # %bb.0: 559; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2] 560; SSE2-NEXT: movdqa %xmm0, %xmm3 561; SSE2-NEXT: pcmpeqd %xmm2, %xmm3 562; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [1,1,1,1] 563; SSE2-NEXT: pcmpeqd %xmm4, %xmm0 564; SSE2-NEXT: por %xmm3, %xmm0 565; SSE2-NEXT: pcmpeqd %xmm1, %xmm2 566; SSE2-NEXT: pcmpeqd %xmm4, %xmm1 567; SSE2-NEXT: por %xmm2, %xmm1 568; SSE2-NEXT: retq 569 %x_adj = add <8 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 570 %cmp = icmp ult <8 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 571 %r = sext <8 x i1> %cmp to <8 x i32> 572 ret <8 x i32> %r 573} 574 575 576define <32 x i8> @eq_or_eq_ult_2_256_i8_m1(<32 x i8> %x) { 577; AVX512-LABEL: eq_or_eq_ult_2_256_i8_m1: 578; AVX512: # %bb.0: 579; AVX512-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 580; AVX512-NEXT: vpaddb %ymm1, %ymm0, %ymm0 581; AVX512-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 582; AVX512-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 583; AVX512-NEXT: retq 584; 585; AVX1-LABEL: eq_or_eq_ult_2_256_i8_m1: 586; AVX1: # %bb.0: 587; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 588; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm2 589; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 590; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0 591; AVX1-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 592; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm3 593; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0 594; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1 595; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1 596; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 597; AVX1-NEXT: retq 598; 599; AVX2-LABEL: eq_or_eq_ult_2_256_i8_m1: 600; AVX2: # %bb.0: 601; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 602; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm0 603; AVX2-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1 604; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0 605; AVX2-NEXT: retq 606; 607; SSE41-LABEL: eq_or_eq_ult_2_256_i8_m1: 608; SSE41: # %bb.0: 609; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] 610; SSE41-NEXT: movdqa %xmm0, %xmm3 611; SSE41-NEXT: pcmpeqb %xmm2, %xmm3 612; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 613; SSE41-NEXT: pcmpeqb %xmm4, %xmm0 614; SSE41-NEXT: por %xmm3, %xmm0 615; SSE41-NEXT: pcmpeqb %xmm1, %xmm2 616; SSE41-NEXT: pcmpeqb %xmm4, %xmm1 617; SSE41-NEXT: por %xmm2, %xmm1 618; SSE41-NEXT: retq 619; 620; SSE2-LABEL: eq_or_eq_ult_2_256_i8_m1: 621; SSE2: # %bb.0: 622; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] 623; SSE2-NEXT: movdqa %xmm0, %xmm3 624; SSE2-NEXT: pcmpeqb %xmm2, %xmm3 625; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 626; SSE2-NEXT: pcmpeqb %xmm4, %xmm0 627; SSE2-NEXT: por %xmm3, %xmm0 628; SSE2-NEXT: pcmpeqb %xmm1, %xmm2 629; SSE2-NEXT: pcmpeqb %xmm4, %xmm1 630; SSE2-NEXT: por %xmm2, %xmm1 631; SSE2-NEXT: retq 632 %x_adj = 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> 633 %cmp = icmp ult <32 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 634 %r = sext <32 x i1> %cmp to <32 x i8> 635 ret <32 x i8> %r 636} 637 638 639define <16 x i8> @eq_or_eq_ult_2_128_i8_m1(<16 x i8> %x) { 640; AVX512-LABEL: eq_or_eq_ult_2_128_i8_m1: 641; AVX512: # %bb.0: 642; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 643; AVX512-NEXT: vpaddb %xmm1, %xmm0, %xmm0 644; AVX512-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 645; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 646; AVX512-NEXT: retq 647; 648; AVX-LABEL: eq_or_eq_ult_2_128_i8_m1: 649; AVX: # %bb.0: 650; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 651; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0 652; AVX-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 653; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 654; AVX-NEXT: retq 655; 656; SSE41-LABEL: eq_or_eq_ult_2_128_i8_m1: 657; SSE41: # %bb.0: 658; SSE41-NEXT: pcmpeqd %xmm1, %xmm1 659; SSE41-NEXT: paddb %xmm1, %xmm0 660; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 661; SSE41-NEXT: pminub %xmm0, %xmm1 662; SSE41-NEXT: pcmpeqb %xmm1, %xmm0 663; SSE41-NEXT: retq 664; 665; SSE2-LABEL: eq_or_eq_ult_2_128_i8_m1: 666; SSE2: # %bb.0: 667; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 668; SSE2-NEXT: paddb %xmm1, %xmm0 669; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 670; SSE2-NEXT: pminub %xmm0, %xmm1 671; SSE2-NEXT: pcmpeqb %xmm1, %xmm0 672; SSE2-NEXT: retq 673 %x_adj = 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> 674 %cmp = icmp ult <16 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 675 %r = sext <16 x i1> %cmp to <16 x i8> 676 ret <16 x i8> %r 677} 678 679 680define <16 x i8> @eq_or_eq_ult_2_128_i8(<16 x i8> %x) { 681; AVX512-LABEL: eq_or_eq_ult_2_128_i8: 682; AVX512: # %bb.0: 683; AVX512-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 684; AVX512-NEXT: vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 685; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 686; AVX512-NEXT: retq 687; 688; AVX-LABEL: eq_or_eq_ult_2_128_i8: 689; AVX: # %bb.0: 690; AVX-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1 691; AVX-NEXT: vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 692; AVX-NEXT: vpor %xmm1, %xmm0, %xmm0 693; AVX-NEXT: retq 694; 695; SSE41-LABEL: eq_or_eq_ult_2_128_i8: 696; SSE41: # %bb.0: 697; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232] 698; SSE41-NEXT: pcmpeqb %xmm0, %xmm1 699; SSE41-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 700; SSE41-NEXT: por %xmm1, %xmm0 701; SSE41-NEXT: retq 702; 703; SSE2-LABEL: eq_or_eq_ult_2_128_i8: 704; SSE2: # %bb.0: 705; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232] 706; SSE2-NEXT: pcmpeqb %xmm0, %xmm1 707; SSE2-NEXT: pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 708; SSE2-NEXT: por %xmm1, %xmm0 709; SSE2-NEXT: retq 710 %x_adj = add <16 x i8> %x, <i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25> 711 %cmp = icmp ult <16 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 712 %r = sext <16 x i1> %cmp to <16 x i8> 713 ret <16 x i8> %r 714} 715