brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.8 KiB · dada172 Raw
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