419 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=CHECK,AVX5123; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=CHECK,AVX24; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s --check-prefixes=CHECK,SSE,SSE415; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,SSE,SSE26 7; Todo: Support logic for non-splat vectors8define <4 x i1> @andnot_eq_v4i32_todo_no_splat(<4 x i32> %x) nounwind {9; AVX512-LABEL: andnot_eq_v4i32_todo_no_splat:10; AVX512: # %bb.0:11; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm112; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %k013; AVX512-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k114; AVX512-NEXT: korw %k1, %k0, %k115; AVX512-NEXT: vmovdqa32 %xmm1, %xmm0 {%k1} {z}16; AVX512-NEXT: retq17;18; AVX2-LABEL: andnot_eq_v4i32_todo_no_splat:19; AVX2: # %bb.0:20; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm121; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm122; AVX2-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm023; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm024; AVX2-NEXT: retq25;26; SSE-LABEL: andnot_eq_v4i32_todo_no_splat:27; SSE: # %bb.0:28; SSE-NEXT: pcmpeqd %xmm1, %xmm129; SSE-NEXT: pcmpeqd %xmm0, %xmm130; SSE-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm031; SSE-NEXT: por %xmm1, %xmm032; SSE-NEXT: retq33 %cmp1 = icmp eq <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>34 %cmp2 = icmp eq <4 x i32> %x, <i32 -9, i32 -17, i32 -5, i32 -129>35 %r = or <4 x i1> %cmp1, %cmp236 ret <4 x i1> %r37}38 39define <4 x i1> @andnot_eq_v4i32(<4 x i32> %x) nounwind {40; AVX512-LABEL: andnot_eq_v4i32:41; AVX512: # %bb.0:42; AVX512-NEXT: vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm043; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm144; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm045; AVX512-NEXT: retq46;47; AVX2-LABEL: andnot_eq_v4i32:48; AVX2: # %bb.0:49; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm1 = [4294967287,4294967287,4294967287,4294967287]50; AVX2-NEXT: vpandn %xmm1, %xmm0, %xmm051; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm152; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm053; AVX2-NEXT: retq54;55; SSE-LABEL: andnot_eq_v4i32:56; SSE: # %bb.0:57; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm058; SSE-NEXT: pxor %xmm1, %xmm159; SSE-NEXT: pcmpeqd %xmm1, %xmm060; SSE-NEXT: retq61 %cmp1 = icmp eq <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>62 %cmp2 = icmp eq <4 x i32> %x, <i32 -9, i32 -9, i32 -9, i32 -9>63 %r = or <4 x i1> %cmp1, %cmp264 ret <4 x i1> %r65}66 67; Intentional negative test.68define <2 x i1> @andnot_eq_v2i64_fail_max_not_n1(<2 x i64> %x) nounwind {69; AVX512-LABEL: andnot_eq_v2i64_fail_max_not_n1:70; AVX512: # %bb.0:71; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm172; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %k073; AVX512-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k174; AVX512-NEXT: korw %k1, %k0, %k175; AVX512-NEXT: vmovdqa64 %xmm1, %xmm0 {%k1} {z}76; AVX512-NEXT: retq77;78; AVX2-LABEL: andnot_eq_v2i64_fail_max_not_n1:79; AVX2: # %bb.0:80; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm181; AVX2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm182; AVX2-NEXT: vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm083; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm084; AVX2-NEXT: retq85;86; SSE41-LABEL: andnot_eq_v2i64_fail_max_not_n1:87; SSE41: # %bb.0:88; SSE41-NEXT: pcmpeqd %xmm1, %xmm189; SSE41-NEXT: pcmpeqq %xmm0, %xmm190; SSE41-NEXT: pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm091; SSE41-NEXT: por %xmm1, %xmm092; SSE41-NEXT: retq93;94; SSE2-LABEL: andnot_eq_v2i64_fail_max_not_n1:95; SSE2: # %bb.0:96; SSE2-NEXT: pcmpeqd %xmm1, %xmm197; SSE2-NEXT: pcmpeqd %xmm0, %xmm198; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]99; SSE2-NEXT: pand %xmm1, %xmm2100; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0101; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]102; SSE2-NEXT: pand %xmm1, %xmm0103; SSE2-NEXT: por %xmm2, %xmm0104; SSE2-NEXT: retq105 %cmp1 = icmp eq <2 x i64> %x, <i64 -1, i64 -1>106 %cmp2 = icmp eq <2 x i64> %x, <i64 7, i64 7>107 %r = or <2 x i1> %cmp1, %cmp2108 ret <2 x i1> %r109}110 111define <2 x i1> @andnot_eq_v2i64(<2 x i64> %x) nounwind {112; AVX512-LABEL: andnot_eq_v2i64:113; AVX512: # %bb.0:114; AVX512-NEXT: vpandnq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0115; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1116; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0117; AVX512-NEXT: retq118;119; AVX2-LABEL: andnot_eq_v2i64:120; AVX2: # %bb.0:121; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0122; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1123; AVX2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0124; AVX2-NEXT: retq125;126; SSE41-LABEL: andnot_eq_v2i64:127; SSE41: # %bb.0:128; SSE41-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0129; SSE41-NEXT: pxor %xmm1, %xmm1130; SSE41-NEXT: pcmpeqq %xmm1, %xmm0131; SSE41-NEXT: retq132;133; SSE2-LABEL: andnot_eq_v2i64:134; SSE2: # %bb.0:135; SSE2-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0136; SSE2-NEXT: pxor %xmm1, %xmm1137; SSE2-NEXT: pcmpeqd %xmm1, %xmm0138; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]139; SSE2-NEXT: pand %xmm1, %xmm0140; SSE2-NEXT: retq141 %cmp1 = icmp eq <2 x i64> %x, <i64 -5, i64 -5>142 %cmp2 = icmp eq <2 x i64> %x, <i64 -1, i64 -1>143 %r = or <2 x i1> %cmp1, %cmp2144 ret <2 x i1> %r145}146 147; Todo: Support logic for non-splat vectors148define <8 x i1> @andnot_ne_v8i16_todo_no_splat(<8 x i16> %x) nounwind {149; AVX512-LABEL: andnot_ne_v8i16_todo_no_splat:150; AVX512: # %bb.0:151; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1152; AVX512-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm2153; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0154; AVX512-NEXT: vpternlogq $54, %xmm2, %xmm1, %xmm0155; AVX512-NEXT: retq156;157; AVX2-LABEL: andnot_ne_v8i16_todo_no_splat:158; AVX2: # %bb.0:159; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1160; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm2161; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0162; AVX2-NEXT: vpor %xmm0, %xmm2, %xmm0163; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0164; AVX2-NEXT: retq165;166; SSE-LABEL: andnot_ne_v8i16_todo_no_splat:167; SSE: # %bb.0:168; SSE-NEXT: pcmpeqd %xmm1, %xmm1169; SSE-NEXT: movdqa %xmm0, %xmm2170; SSE-NEXT: pcmpeqw %xmm1, %xmm2171; SSE-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0172; SSE-NEXT: por %xmm2, %xmm0173; SSE-NEXT: pxor %xmm1, %xmm0174; SSE-NEXT: retq175 %cmp1 = icmp ne <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>176 %cmp2 = icmp ne <8 x i16> %x, <i16 -16385, i16 -257, i16 -33, i16 -8193, i16 -16385, i16 -257, i16 -33, i16 -8193>177 %r = and <8 x i1> %cmp1, %cmp2178 ret <8 x i1> %r179}180 181define <8 x i1> @andnot_ne_v8i16(<8 x i16> %x) nounwind {182; AVX512-LABEL: andnot_ne_v8i16:183; AVX512: # %bb.0:184; AVX512-NEXT: vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0185; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1186; AVX512-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0187; AVX512-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm0188; AVX512-NEXT: retq189;190; AVX2-LABEL: andnot_ne_v8i16:191; AVX2: # %bb.0:192; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1193; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0194; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2195; AVX2-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0196; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0197; AVX2-NEXT: retq198;199; SSE-LABEL: andnot_ne_v8i16:200; SSE: # %bb.0:201; SSE-NEXT: pcmpeqd %xmm1, %xmm1202; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0203; SSE-NEXT: pxor %xmm2, %xmm2204; SSE-NEXT: pcmpeqw %xmm2, %xmm0205; SSE-NEXT: pxor %xmm1, %xmm0206; SSE-NEXT: retq207 %cmp1 = icmp ne <8 x i16> %x, <i16 -16385, i16 -16385, i16 -16385, i16 -16385, i16 -16385, i16 -16385, i16 -16385, i16 -16385>208 %cmp2 = icmp ne <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>209 %r = and <8 x i1> %cmp1, %cmp2210 ret <8 x i1> %r211}212 213; Intentional negative test.214define <16 x i1> @andnot_ne_v16i8_fail_max_not_n1(<16 x i8> %x) nounwind {215; AVX512-LABEL: andnot_ne_v16i8_fail_max_not_n1:216; AVX512: # %bb.0:217; AVX512-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1218; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm2219; AVX512-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0220; AVX512-NEXT: vpternlogq $54, %xmm2, %xmm1, %xmm0221; AVX512-NEXT: retq222;223; AVX2-LABEL: andnot_ne_v16i8_fail_max_not_n1:224; AVX2: # %bb.0:225; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1226; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm2227; AVX2-NEXT: vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0228; AVX2-NEXT: vpor %xmm0, %xmm2, %xmm0229; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0230; AVX2-NEXT: retq231;232; SSE-LABEL: andnot_ne_v16i8_fail_max_not_n1:233; SSE: # %bb.0:234; SSE-NEXT: pcmpeqd %xmm1, %xmm1235; SSE-NEXT: movdqa %xmm0, %xmm2236; SSE-NEXT: pcmpeqb %xmm1, %xmm2237; SSE-NEXT: pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0238; SSE-NEXT: por %xmm2, %xmm0239; SSE-NEXT: pxor %xmm1, %xmm0240; SSE-NEXT: retq241 %cmp1 = icmp ne <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>242 %cmp2 = icmp ne <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>243 %r = and <16 x i1> %cmp1, %cmp2244 ret <16 x i1> %r245}246 247define <16 x i1> @andnot_ne_v16i8(<16 x i8> %x) nounwind {248; AVX512-LABEL: andnot_ne_v16i8:249; AVX512: # %bb.0:250; AVX512-NEXT: vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0251; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1252; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0253; AVX512-NEXT: vpternlogq $15, %xmm0, %xmm0, %xmm0254; AVX512-NEXT: retq255;256; AVX2-LABEL: andnot_ne_v16i8:257; AVX2: # %bb.0:258; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1259; AVX2-NEXT: vpandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0260; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2261; AVX2-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0262; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0263; AVX2-NEXT: retq264;265; SSE-LABEL: andnot_ne_v16i8:266; SSE: # %bb.0:267; SSE-NEXT: pcmpeqd %xmm1, %xmm1268; SSE-NEXT: pandn {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0269; SSE-NEXT: pxor %xmm2, %xmm2270; SSE-NEXT: pcmpeqb %xmm2, %xmm0271; SSE-NEXT: pxor %xmm1, %xmm0272; SSE-NEXT: retq273 %cmp1 = icmp ne <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>274 %cmp2 = icmp ne <16 x i8> %x, <i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33, i8 -33>275 %r = and <16 x i1> %cmp1, %cmp2276 ret <16 x i1> %r277}278 279define i1 @andnot_ne_i32(i32 %x) nounwind {280; CHECK-LABEL: andnot_ne_i32:281; CHECK: # %bb.0:282; CHECK-NEXT: addl $1073741825, %edi # imm = 0x40000001283; CHECK-NEXT: testl $-1073741825, %edi # imm = 0xBFFFFFFF284; CHECK-NEXT: setne %al285; CHECK-NEXT: retq286 %cmp1 = icmp ne i32 %x, -1287 %cmp2 = icmp ne i32 %x, -1073741825288 %r = and i1 %cmp1, %cmp2289 ret i1 %r290}291 292define i1 @addand_ne_i16(i16 %x) nounwind {293; CHECK-LABEL: addand_ne_i16:294; CHECK: # %bb.0:295; CHECK-NEXT: addl $3, %edi296; CHECK-NEXT: testl $49151, %edi # imm = 0xBFFF297; CHECK-NEXT: setne %al298; CHECK-NEXT: retq299 %cmp1 = icmp ne i16 %x, -3300 %cmp2 = icmp ne i16 %x, 16381301 %r = and i1 %cmp1, %cmp2302 ret i1 %r303}304 305; Intentional negative test.306define <8 x i1> @addand_ne_v8i16_fail(<8 x i16> %x) nounwind {307; AVX512-LABEL: addand_ne_v8i16_fail:308; AVX512: # %bb.0:309; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1310; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2311; AVX512-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0312; AVX512-NEXT: vpternlogq $86, %xmm2, %xmm1, %xmm0313; AVX512-NEXT: retq314;315; AVX2-LABEL: addand_ne_v8i16_fail:316; AVX2: # %bb.0:317; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1318; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2319; AVX2-NEXT: vpcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0320; AVX2-NEXT: vpor %xmm0, %xmm1, %xmm0321; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0322; AVX2-NEXT: retq323;324; SSE41-LABEL: addand_ne_v8i16_fail:325; SSE41: # %bb.0:326; SSE41-NEXT: pmovsxbw {{.*#+}} xmm1 = [65533,65533,65533,65533,65533,65533,65533,65533]327; SSE41-NEXT: pcmpeqw %xmm0, %xmm1328; SSE41-NEXT: pcmpeqd %xmm2, %xmm2329; SSE41-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0330; SSE41-NEXT: por %xmm1, %xmm0331; SSE41-NEXT: pxor %xmm2, %xmm0332; SSE41-NEXT: retq333;334; SSE2-LABEL: addand_ne_v8i16_fail:335; SSE2: # %bb.0:336; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [65533,65533,65533,65533,65533,65533,65533,65533]337; SSE2-NEXT: pcmpeqw %xmm0, %xmm1338; SSE2-NEXT: pcmpeqd %xmm2, %xmm2339; SSE2-NEXT: pcmpeqw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0340; SSE2-NEXT: por %xmm1, %xmm0341; SSE2-NEXT: pxor %xmm2, %xmm0342; SSE2-NEXT: retq343 %cmp1 = icmp ne <8 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>344 %cmp2 = icmp ne <8 x i16> %x, <i16 16381, i16 16381, i16 16381, i16 16381, i16 16381, i16 16381, i16 16381, i16 16381>345 %r = and <8 x i1> %cmp1, %cmp2346 ret <8 x i1> %r347}348 349define i1 @addand_eq_i32(i32 %x) nounwind {350; CHECK-LABEL: addand_eq_i32:351; CHECK: # %bb.0:352; CHECK-NEXT: incl %edi353; CHECK-NEXT: testl $-9, %edi354; CHECK-NEXT: sete %al355; CHECK-NEXT: retq356 %cmp1 = icmp eq i32 %x, -1357 %cmp2 = icmp eq i32 %x, 7358 %r = or i1 %cmp1, %cmp2359 ret i1 %r360}361 362; Intentional negative test.363define i1 @addand_eq_i8_fail_abs_p2_minmax_not(i8 %x) nounwind {364; CHECK-LABEL: addand_eq_i8_fail_abs_p2_minmax_not:365; CHECK: # %bb.0:366; CHECK-NEXT: cmpb $124, %dil367; CHECK-NEXT: sete %cl368; CHECK-NEXT: cmpb $-8, %dil369; CHECK-NEXT: sete %al370; CHECK-NEXT: orb %cl, %al371; CHECK-NEXT: retq372 %cmp1 = icmp eq i8 %x, 124373 %cmp2 = icmp eq i8 %x, -8374 %r = or i1 %cmp1, %cmp2375 ret i1 %r376}377 378define i1 @addand_ne_i8(i8 %x) nounwind {379; CHECK-LABEL: addand_ne_i8:380; CHECK: # %bb.0:381; CHECK-NEXT: addb $5, %dil382; CHECK-NEXT: testb $-65, %dil383; CHECK-NEXT: setne %al384; CHECK-NEXT: retq385 %cmp1 = icmp ne i8 %x, 59386 %cmp2 = icmp ne i8 %x, -5387 %r = and i1 %cmp1, %cmp2388 ret i1 %r389}390 391; Intentional negative test.392define i1 @addand_eq_i64_fail_non_p2_dif(i64 %x) nounwind {393; CHECK-LABEL: addand_eq_i64_fail_non_p2_dif:394; CHECK: # %bb.0:395; CHECK-NEXT: cmpq $-8, %rdi396; CHECK-NEXT: setne %cl397; CHECK-NEXT: cmpq $-17, %rdi398; CHECK-NEXT: setne %al399; CHECK-NEXT: andb %cl, %al400; CHECK-NEXT: retq401 %cmp1 = icmp ne i64 %x, -8402 %cmp2 = icmp ne i64 %x, -17403 %r = and i1 %cmp1, %cmp2404 ret i1 %r405}406 407define i1 @addand_eq_i64(i64 %x) nounwind {408; CHECK-LABEL: addand_eq_i64:409; CHECK: # %bb.0:410; CHECK-NEXT: addq $256, %rdi # imm = 0x100411; CHECK-NEXT: testq $-1025, %rdi # imm = 0xFBFF412; CHECK-NEXT: setne %al413; CHECK-NEXT: retq414 %cmp1 = icmp ne i64 %x, 768415 %cmp2 = icmp ne i64 %x, -256416 %r = and i1 %cmp1, %cmp2417 ret i1 %r418}419