brintos

brintos / llvm-project-archived public Read only

0
0
Text · 45.5 KiB · 10a17f7 Raw
693 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -S < %s -mtriple=aarch64 | FileCheck %s3 4; This test is two versions of the IR extracted from a DSP routine performing5; boolean distance. The first involves a mixture of vector intrinsics and6; scalar code, the second is just scalar. They should both ideally not be7; vectorized any more than the input (unless the codegen has improved8; significantly).9 10define void @dist_vec(ptr nocapture noundef readonly %pA, ptr nocapture noundef readonly %pB, i32 noundef %numberOfBools, ptr nocapture noundef writeonly %cTT, ptr nocapture noundef writeonly %cFF, ptr nocapture noundef writeonly %cTF, ptr nocapture noundef writeonly %cFT) {11; CHECK-LABEL: @dist_vec(12; CHECK-NEXT:  entry:13; CHECK-NEXT:    [[CMP_NOT264:%.*]] = icmp ult i32 [[NUMBEROFBOOLS:%.*]], 12814; CHECK-NEXT:    br i1 [[CMP_NOT264]], label [[WHILE_END:%.*]], label [[WHILE_BODY_PREHEADER:%.*]]15; CHECK:       while.body.preheader:16; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 [[NUMBEROFBOOLS]], 717; CHECK-NEXT:    [[TMP0:%.*]] = add nsw i32 [[SHR]], -118; CHECK-NEXT:    [[TMP1:%.*]] = zext i32 [[TMP0]] to i6419; CHECK-NEXT:    [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 420; CHECK-NEXT:    [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 1621; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[PA:%.*]], i64 [[TMP3]]22; CHECK-NEXT:    br label [[WHILE_BODY:%.*]]23; CHECK:       while.body:24; CHECK-NEXT:    [[PA_ADDR_0271:%.*]] = phi ptr [ [[ADD_PTR:%.*]], [[WHILE_BODY]] ], [ [[PA]], [[WHILE_BODY_PREHEADER]] ]25; CHECK-NEXT:    [[PB_ADDR_0270:%.*]] = phi ptr [ [[ADD_PTR8:%.*]], [[WHILE_BODY]] ], [ [[PB:%.*]], [[WHILE_BODY_PREHEADER]] ]26; CHECK-NEXT:    [[NBBOOLBLOCK_0269:%.*]] = phi i32 [ [[DEC:%.*]], [[WHILE_BODY]] ], [ [[SHR]], [[WHILE_BODY_PREHEADER]] ]27; CHECK-NEXT:    [[TMP4TT_0268:%.*]] = phi <2 x i64> [ [[ADD_I:%.*]], [[WHILE_BODY]] ], [ zeroinitializer, [[WHILE_BODY_PREHEADER]] ]28; CHECK-NEXT:    [[TMP4FF_0267:%.*]] = phi <2 x i64> [ [[ADD_I253:%.*]], [[WHILE_BODY]] ], [ zeroinitializer, [[WHILE_BODY_PREHEADER]] ]29; CHECK-NEXT:    [[TMP4TF_0266:%.*]] = phi <2 x i64> [ [[ADD_I258:%.*]], [[WHILE_BODY]] ], [ zeroinitializer, [[WHILE_BODY_PREHEADER]] ]30; CHECK-NEXT:    [[TMP4FT_0265:%.*]] = phi <2 x i64> [ [[ADD_I263:%.*]], [[WHILE_BODY]] ], [ zeroinitializer, [[WHILE_BODY_PREHEADER]] ]31; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[PA_ADDR_0271]], align 432; CHECK-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr [[PB_ADDR_0270]], align 433; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i32, ptr [[PA_ADDR_0271]], i64 434; CHECK-NEXT:    [[ADD_PTR8]] = getelementptr inbounds i32, ptr [[PB_ADDR_0270]], i64 435; CHECK-NEXT:    [[AND_I:%.*]] = and <4 x i32> [[TMP5]], [[TMP4]]36; CHECK-NEXT:    [[NOT_I:%.*]] = xor <4 x i32> [[TMP4]], splat (i32 -1)37; CHECK-NEXT:    [[NOT_I242:%.*]] = xor <4 x i32> [[TMP5]], splat (i32 -1)38; CHECK-NEXT:    [[AND_I243:%.*]] = and <4 x i32> [[NOT_I242]], [[NOT_I]]39; CHECK-NEXT:    [[AND_I245:%.*]] = and <4 x i32> [[TMP4]], [[NOT_I242]]40; CHECK-NEXT:    [[AND_I247:%.*]] = and <4 x i32> [[TMP5]], [[NOT_I]]41; CHECK-NEXT:    [[TMP6:%.*]] = bitcast <4 x i32> [[AND_I]] to <16 x i8>42; CHECK-NEXT:    [[VCNTQ_V_I:%.*]] = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP6]])43; CHECK-NEXT:    [[VPADDL_I:%.*]] = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[VCNTQ_V_I]])44; CHECK-NEXT:    [[VPADDL1_I:%.*]] = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I]])45; CHECK-NEXT:    [[VPADDL1_I248:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL1_I]])46; CHECK-NEXT:    [[ADD_I]] = add <2 x i64> [[VPADDL1_I248]], [[TMP4TT_0268]]47; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <4 x i32> [[AND_I243]] to <16 x i8>48; CHECK-NEXT:    [[VCNTQ_V_I249:%.*]] = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP7]])49; CHECK-NEXT:    [[VPADDL_I250:%.*]] = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[VCNTQ_V_I249]])50; CHECK-NEXT:    [[VPADDL1_I251:%.*]] = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I250]])51; CHECK-NEXT:    [[VPADDL1_I252:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL1_I251]])52; CHECK-NEXT:    [[ADD_I253]] = add <2 x i64> [[VPADDL1_I252]], [[TMP4FF_0267]]53; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i32> [[AND_I245]] to <16 x i8>54; CHECK-NEXT:    [[VCNTQ_V_I254:%.*]] = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP8]])55; CHECK-NEXT:    [[VPADDL_I255:%.*]] = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[VCNTQ_V_I254]])56; CHECK-NEXT:    [[VPADDL1_I256:%.*]] = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I255]])57; CHECK-NEXT:    [[VPADDL1_I257:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL1_I256]])58; CHECK-NEXT:    [[ADD_I258]] = add <2 x i64> [[VPADDL1_I257]], [[TMP4TF_0266]]59; CHECK-NEXT:    [[TMP9:%.*]] = bitcast <4 x i32> [[AND_I247]] to <16 x i8>60; CHECK-NEXT:    [[VCNTQ_V_I259:%.*]] = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> [[TMP9]])61; CHECK-NEXT:    [[VPADDL_I260:%.*]] = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> [[VCNTQ_V_I259]])62; CHECK-NEXT:    [[VPADDL1_I261:%.*]] = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> [[VPADDL_I260]])63; CHECK-NEXT:    [[VPADDL1_I262:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> [[VPADDL1_I261]])64; CHECK-NEXT:    [[ADD_I263]] = add <2 x i64> [[VPADDL1_I262]], [[TMP4FT_0265]]65; CHECK-NEXT:    [[DEC]] = add nsw i32 [[NBBOOLBLOCK_0269]], -166; CHECK-NEXT:    [[CMP_NOT:%.*]] = icmp eq i32 [[DEC]], 067; CHECK-NEXT:    br i1 [[CMP_NOT]], label [[WHILE_END_LOOPEXIT:%.*]], label [[WHILE_BODY]]68; CHECK:       while.end.loopexit:69; CHECK-NEXT:    [[SCEVGEP311:%.*]] = getelementptr i8, ptr [[PB]], i64 [[TMP3]]70; CHECK-NEXT:    br label [[WHILE_END]]71; CHECK:       while.end:72; CHECK-NEXT:    [[TMP4FT_0_LCSSA:%.*]] = phi <2 x i64> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[ADD_I263]], [[WHILE_END_LOOPEXIT]] ]73; CHECK-NEXT:    [[TMP4TF_0_LCSSA:%.*]] = phi <2 x i64> [ zeroinitializer, [[ENTRY]] ], [ [[ADD_I258]], [[WHILE_END_LOOPEXIT]] ]74; CHECK-NEXT:    [[TMP4FF_0_LCSSA:%.*]] = phi <2 x i64> [ zeroinitializer, [[ENTRY]] ], [ [[ADD_I253]], [[WHILE_END_LOOPEXIT]] ]75; CHECK-NEXT:    [[TMP4TT_0_LCSSA:%.*]] = phi <2 x i64> [ zeroinitializer, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_END_LOOPEXIT]] ]76; CHECK-NEXT:    [[PB_ADDR_0_LCSSA:%.*]] = phi ptr [ [[PB]], [[ENTRY]] ], [ [[SCEVGEP311]], [[WHILE_END_LOOPEXIT]] ]77; CHECK-NEXT:    [[PA_ADDR_0_LCSSA:%.*]] = phi ptr [ [[PA]], [[ENTRY]] ], [ [[SCEVGEP]], [[WHILE_END_LOOPEXIT]] ]78; CHECK-NEXT:    [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP4TT_0_LCSSA]], i64 079; CHECK-NEXT:    [[VGETQ_LANE45:%.*]] = extractelement <2 x i64> [[TMP4TT_0_LCSSA]], i64 180; CHECK-NEXT:    [[ADD:%.*]] = add i64 [[VGETQ_LANE]], [[VGETQ_LANE45]]81; CHECK-NEXT:    [[CONV48:%.*]] = trunc i64 [[ADD]] to i3282; CHECK-NEXT:    [[VGETQ_LANE51:%.*]] = extractelement <2 x i64> [[TMP4FF_0_LCSSA]], i64 083; CHECK-NEXT:    [[VGETQ_LANE55:%.*]] = extractelement <2 x i64> [[TMP4FF_0_LCSSA]], i64 184; CHECK-NEXT:    [[ADD57:%.*]] = add i64 [[VGETQ_LANE51]], [[VGETQ_LANE55]]85; CHECK-NEXT:    [[CONV60:%.*]] = trunc i64 [[ADD57]] to i3286; CHECK-NEXT:    [[VGETQ_LANE63:%.*]] = extractelement <2 x i64> [[TMP4TF_0_LCSSA]], i64 087; CHECK-NEXT:    [[VGETQ_LANE67:%.*]] = extractelement <2 x i64> [[TMP4TF_0_LCSSA]], i64 188; CHECK-NEXT:    [[ADD69:%.*]] = add i64 [[VGETQ_LANE63]], [[VGETQ_LANE67]]89; CHECK-NEXT:    [[CONV72:%.*]] = trunc i64 [[ADD69]] to i3290; CHECK-NEXT:    [[VGETQ_LANE75:%.*]] = extractelement <2 x i64> [[TMP4FT_0_LCSSA]], i64 091; CHECK-NEXT:    [[VGETQ_LANE79:%.*]] = extractelement <2 x i64> [[TMP4FT_0_LCSSA]], i64 192; CHECK-NEXT:    [[ADD81:%.*]] = add i64 [[VGETQ_LANE75]], [[VGETQ_LANE79]]93; CHECK-NEXT:    [[CONV84:%.*]] = trunc i64 [[ADD81]] to i3294; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NUMBEROFBOOLS]], 12795; CHECK-NEXT:    [[CMP86284:%.*]] = icmp ugt i32 [[AND]], 3196; CHECK-NEXT:    br i1 [[CMP86284]], label [[WHILE_BODY88:%.*]], label [[WHILE_END122:%.*]]97; CHECK:       while.body88:98; CHECK-NEXT:    [[PA_ADDR_1291:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[WHILE_END121:%.*]] ], [ [[PA_ADDR_0_LCSSA]], [[WHILE_END]] ]99; CHECK-NEXT:    [[PB_ADDR_1290:%.*]] = phi ptr [ [[INCDEC_PTR89:%.*]], [[WHILE_END121]] ], [ [[PB_ADDR_0_LCSSA]], [[WHILE_END]] ]100; CHECK-NEXT:    [[_CTT_0289:%.*]] = phi i32 [ [[ADD99:%.*]], [[WHILE_END121]] ], [ [[CONV48]], [[WHILE_END]] ]101; CHECK-NEXT:    [[_CFF_0288:%.*]] = phi i32 [ [[ADD106:%.*]], [[WHILE_END121]] ], [ [[CONV60]], [[WHILE_END]] ]102; CHECK-NEXT:    [[_CTF_0287:%.*]] = phi i32 [ [[ADD113:%.*]], [[WHILE_END121]] ], [ [[CONV72]], [[WHILE_END]] ]103; CHECK-NEXT:    [[_CFT_0286:%.*]] = phi i32 [ [[ADD120:%.*]], [[WHILE_END121]] ], [ [[CONV84]], [[WHILE_END]] ]104; CHECK-NEXT:    [[NBBOOLBLOCK_1285:%.*]] = phi i32 [ [[SUB:%.*]], [[WHILE_END121]] ], [ [[AND]], [[WHILE_END]] ]105; CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[PA_ADDR_1291]], align 4106; CHECK-NEXT:    [[TMP11:%.*]] = load i32, ptr [[PB_ADDR_1290]], align 4107; CHECK-NEXT:    br label [[WHILE_BODY93:%.*]]108; CHECK:       while.body93:109; CHECK-NEXT:    [[_CTT_1283:%.*]] = phi i32 [ [[_CTT_0289]], [[WHILE_BODY88]] ], [ [[ADD99]], [[WHILE_BODY93]] ]110; CHECK-NEXT:    [[_CFF_1282:%.*]] = phi i32 [ [[_CFF_0288]], [[WHILE_BODY88]] ], [ [[ADD106]], [[WHILE_BODY93]] ]111; CHECK-NEXT:    [[_CTF_1281:%.*]] = phi i32 [ [[_CTF_0287]], [[WHILE_BODY88]] ], [ [[ADD113]], [[WHILE_BODY93]] ]112; CHECK-NEXT:    [[_CFT_1280:%.*]] = phi i32 [ [[_CFT_0286]], [[WHILE_BODY88]] ], [ [[ADD120]], [[WHILE_BODY93]] ]113; CHECK-NEXT:    [[A_0279:%.*]] = phi i32 [ [[TMP10]], [[WHILE_BODY88]] ], [ [[SHR96:%.*]], [[WHILE_BODY93]] ]114; CHECK-NEXT:    [[B_0278:%.*]] = phi i32 [ [[TMP11]], [[WHILE_BODY88]] ], [ [[SHR97:%.*]], [[WHILE_BODY93]] ]115; CHECK-NEXT:    [[SHIFT_0277:%.*]] = phi i32 [ 0, [[WHILE_BODY88]] ], [ [[INC:%.*]], [[WHILE_BODY93]] ]116; CHECK-NEXT:    [[AND94:%.*]] = and i32 [[A_0279]], 1117; CHECK-NEXT:    [[AND95:%.*]] = and i32 [[B_0278]], 1118; CHECK-NEXT:    [[SHR96]] = lshr i32 [[A_0279]], 1119; CHECK-NEXT:    [[SHR97]] = lshr i32 [[B_0278]], 1120; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[AND94]], 0121; CHECK-NEXT:    [[TOBOOL98:%.*]] = icmp ne i32 [[AND95]], 0122; CHECK-NEXT:    [[TMP12:%.*]] = select i1 [[TOBOOL]], i1 [[TOBOOL98]], i1 false123; CHECK-NEXT:    [[LAND_EXT:%.*]] = zext i1 [[TMP12]] to i32124; CHECK-NEXT:    [[ADD99]] = add i32 [[_CTT_1283]], [[LAND_EXT]]125; CHECK-NEXT:    [[TOBOOL100:%.*]] = icmp eq i32 [[AND94]], 0126; CHECK-NEXT:    [[TOBOOL103:%.*]] = icmp eq i32 [[AND95]], 0127; CHECK-NEXT:    [[TMP13:%.*]] = select i1 [[TOBOOL100]], i1 [[TOBOOL103]], i1 false128; CHECK-NEXT:    [[LAND_EXT105:%.*]] = zext i1 [[TMP13]] to i32129; CHECK-NEXT:    [[ADD106]] = add i32 [[_CFF_1282]], [[LAND_EXT105]]130; CHECK-NEXT:    [[TMP14:%.*]] = select i1 [[TOBOOL]], i1 [[TOBOOL103]], i1 false131; CHECK-NEXT:    [[LAND_EXT112:%.*]] = zext i1 [[TMP14]] to i32132; CHECK-NEXT:    [[ADD113]] = add i32 [[_CTF_1281]], [[LAND_EXT112]]133; CHECK-NEXT:    [[TMP15:%.*]] = select i1 [[TOBOOL100]], i1 [[TOBOOL98]], i1 false134; CHECK-NEXT:    [[LAND_EXT119:%.*]] = zext i1 [[TMP15]] to i32135; CHECK-NEXT:    [[ADD120]] = add i32 [[_CFT_1280]], [[LAND_EXT119]]136; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[SHIFT_0277]], 1137; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 32138; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[WHILE_END121]], label [[WHILE_BODY93]]139; CHECK:       while.end121:140; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, ptr [[PA_ADDR_1291]], i64 1141; CHECK-NEXT:    [[INCDEC_PTR89]] = getelementptr inbounds i32, ptr [[PB_ADDR_1290]], i64 1142; CHECK-NEXT:    [[SUB]] = add nsw i32 [[NBBOOLBLOCK_1285]], -32143; CHECK-NEXT:    [[CMP86:%.*]] = icmp ugt i32 [[SUB]], 31144; CHECK-NEXT:    br i1 [[CMP86]], label [[WHILE_BODY88]], label [[WHILE_END122]]145; CHECK:       while.end122:146; CHECK-NEXT:    [[NBBOOLBLOCK_1_LCSSA:%.*]] = phi i32 [ [[AND]], [[WHILE_END]] ], [ [[SUB]], [[WHILE_END121]] ]147; CHECK-NEXT:    [[_CFT_0_LCSSA:%.*]] = phi i32 [ [[CONV84]], [[WHILE_END]] ], [ [[ADD120]], [[WHILE_END121]] ]148; CHECK-NEXT:    [[_CTF_0_LCSSA:%.*]] = phi i32 [ [[CONV72]], [[WHILE_END]] ], [ [[ADD113]], [[WHILE_END121]] ]149; CHECK-NEXT:    [[_CFF_0_LCSSA:%.*]] = phi i32 [ [[CONV60]], [[WHILE_END]] ], [ [[ADD106]], [[WHILE_END121]] ]150; CHECK-NEXT:    [[_CTT_0_LCSSA:%.*]] = phi i32 [ [[CONV48]], [[WHILE_END]] ], [ [[ADD99]], [[WHILE_END121]] ]151; CHECK-NEXT:    [[PB_ADDR_1_LCSSA:%.*]] = phi ptr [ [[PB_ADDR_0_LCSSA]], [[WHILE_END]] ], [ [[INCDEC_PTR89]], [[WHILE_END121]] ]152; CHECK-NEXT:    [[PA_ADDR_1_LCSSA:%.*]] = phi ptr [ [[PA_ADDR_0_LCSSA]], [[WHILE_END]] ], [ [[INCDEC_PTR]], [[WHILE_END121]] ]153; CHECK-NEXT:    [[CMP130_NOT299:%.*]] = icmp eq i32 [[NBBOOLBLOCK_1_LCSSA]], 0154; CHECK-NEXT:    br i1 [[CMP130_NOT299]], label [[WHILE_END166:%.*]], label [[WHILE_BODY132_PREHEADER:%.*]]155; CHECK:       while.body132.preheader:156; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[PB_ADDR_1_LCSSA]], align 4157; CHECK-NEXT:    [[SUB125:%.*]] = sub nuw nsw i32 32, [[NBBOOLBLOCK_1_LCSSA]]158; CHECK-NEXT:    [[SHR128:%.*]] = lshr i32 [[TMP16]], [[SUB125]]159; CHECK-NEXT:    [[TMP17:%.*]] = load i32, ptr [[PA_ADDR_1_LCSSA]], align 4160; CHECK-NEXT:    [[SHR126:%.*]] = lshr i32 [[TMP17]], [[SUB125]]161; CHECK-NEXT:    br label [[WHILE_BODY132:%.*]]162; CHECK:       while.body132:163; CHECK-NEXT:    [[_CTT_2306:%.*]] = phi i32 [ [[ADD142:%.*]], [[WHILE_BODY132]] ], [ [[_CTT_0_LCSSA]], [[WHILE_BODY132_PREHEADER]] ]164; CHECK-NEXT:    [[_CFF_2305:%.*]] = phi i32 [ [[ADD150:%.*]], [[WHILE_BODY132]] ], [ [[_CFF_0_LCSSA]], [[WHILE_BODY132_PREHEADER]] ]165; CHECK-NEXT:    [[_CTF_2304:%.*]] = phi i32 [ [[ADD157:%.*]], [[WHILE_BODY132]] ], [ [[_CTF_0_LCSSA]], [[WHILE_BODY132_PREHEADER]] ]166; CHECK-NEXT:    [[_CFT_2303:%.*]] = phi i32 [ [[ADD164:%.*]], [[WHILE_BODY132]] ], [ [[_CFT_0_LCSSA]], [[WHILE_BODY132_PREHEADER]] ]167; CHECK-NEXT:    [[NBBOOLBLOCK_2302:%.*]] = phi i32 [ [[DEC165:%.*]], [[WHILE_BODY132]] ], [ [[NBBOOLBLOCK_1_LCSSA]], [[WHILE_BODY132_PREHEADER]] ]168; CHECK-NEXT:    [[A_1301:%.*]] = phi i32 [ [[SHR135:%.*]], [[WHILE_BODY132]] ], [ [[SHR126]], [[WHILE_BODY132_PREHEADER]] ]169; CHECK-NEXT:    [[B_1300:%.*]] = phi i32 [ [[SHR136:%.*]], [[WHILE_BODY132]] ], [ [[SHR128]], [[WHILE_BODY132_PREHEADER]] ]170; CHECK-NEXT:    [[AND133:%.*]] = and i32 [[A_1301]], 1171; CHECK-NEXT:    [[AND134:%.*]] = and i32 [[B_1300]], 1172; CHECK-NEXT:    [[SHR135]] = lshr i32 [[A_1301]], 1173; CHECK-NEXT:    [[SHR136]] = lshr i32 [[B_1300]], 1174; CHECK-NEXT:    [[TOBOOL137:%.*]] = icmp ne i32 [[AND133]], 0175; CHECK-NEXT:    [[TOBOOL139:%.*]] = icmp ne i32 [[AND134]], 0176; CHECK-NEXT:    [[TMP18:%.*]] = select i1 [[TOBOOL137]], i1 [[TOBOOL139]], i1 false177; CHECK-NEXT:    [[LAND_EXT141:%.*]] = zext i1 [[TMP18]] to i32178; CHECK-NEXT:    [[ADD142]] = add i32 [[_CTT_2306]], [[LAND_EXT141]]179; CHECK-NEXT:    [[TOBOOL144:%.*]] = icmp eq i32 [[AND133]], 0180; CHECK-NEXT:    [[TOBOOL147:%.*]] = icmp eq i32 [[AND134]], 0181; CHECK-NEXT:    [[TMP19:%.*]] = select i1 [[TOBOOL144]], i1 [[TOBOOL147]], i1 false182; CHECK-NEXT:    [[LAND_EXT149:%.*]] = zext i1 [[TMP19]] to i32183; CHECK-NEXT:    [[ADD150]] = add i32 [[_CFF_2305]], [[LAND_EXT149]]184; CHECK-NEXT:    [[TMP20:%.*]] = select i1 [[TOBOOL137]], i1 [[TOBOOL147]], i1 false185; CHECK-NEXT:    [[LAND_EXT156:%.*]] = zext i1 [[TMP20]] to i32186; CHECK-NEXT:    [[ADD157]] = add i32 [[_CTF_2304]], [[LAND_EXT156]]187; CHECK-NEXT:    [[TMP21:%.*]] = select i1 [[TOBOOL144]], i1 [[TOBOOL139]], i1 false188; CHECK-NEXT:    [[LAND_EXT163:%.*]] = zext i1 [[TMP21]] to i32189; CHECK-NEXT:    [[ADD164]] = add i32 [[_CFT_2303]], [[LAND_EXT163]]190; CHECK-NEXT:    [[DEC165]] = add nsw i32 [[NBBOOLBLOCK_2302]], -1191; CHECK-NEXT:    [[CMP130_NOT:%.*]] = icmp eq i32 [[DEC165]], 0192; CHECK-NEXT:    br i1 [[CMP130_NOT]], label [[WHILE_END166]], label [[WHILE_BODY132]]193; CHECK:       while.end166:194; CHECK-NEXT:    [[_CFT_2_LCSSA:%.*]] = phi i32 [ [[_CFT_0_LCSSA]], [[WHILE_END122]] ], [ [[ADD164]], [[WHILE_BODY132]] ]195; CHECK-NEXT:    [[_CTF_2_LCSSA:%.*]] = phi i32 [ [[_CTF_0_LCSSA]], [[WHILE_END122]] ], [ [[ADD157]], [[WHILE_BODY132]] ]196; CHECK-NEXT:    [[_CFF_2_LCSSA:%.*]] = phi i32 [ [[_CFF_0_LCSSA]], [[WHILE_END122]] ], [ [[ADD150]], [[WHILE_BODY132]] ]197; CHECK-NEXT:    [[_CTT_2_LCSSA:%.*]] = phi i32 [ [[_CTT_0_LCSSA]], [[WHILE_END122]] ], [ [[ADD142]], [[WHILE_BODY132]] ]198; CHECK-NEXT:    store i32 [[_CTT_2_LCSSA]], ptr [[CTT:%.*]], align 4199; CHECK-NEXT:    store i32 [[_CFF_2_LCSSA]], ptr [[CFF:%.*]], align 4200; CHECK-NEXT:    store i32 [[_CTF_2_LCSSA]], ptr [[CTF:%.*]], align 4201; CHECK-NEXT:    store i32 [[_CFT_2_LCSSA]], ptr [[CFT:%.*]], align 4202; CHECK-NEXT:    ret void203;204entry:205  %cmp.not264 = icmp ult i32 %numberOfBools, 128206  br i1 %cmp.not264, label %while.end, label %while.body.preheader207 208while.body.preheader:                             ; preds = %entry209  %shr = lshr i32 %numberOfBools, 7210  %0 = add nsw i32 %shr, -1211  %1 = zext i32 %0 to i64212  %2 = shl nuw nsw i64 %1, 4213  %3 = add nuw nsw i64 %2, 16214  %scevgep = getelementptr i8, ptr %pA, i64 %3215  br label %while.body216 217while.body:                                       ; preds = %while.body.preheader, %while.body218  %pA.addr.0271 = phi ptr [ %add.ptr, %while.body ], [ %pA, %while.body.preheader ]219  %pB.addr.0270 = phi ptr [ %add.ptr8, %while.body ], [ %pB, %while.body.preheader ]220  %nbBoolBlock.0269 = phi i32 [ %dec, %while.body ], [ %shr, %while.body.preheader ]221  %tmp4tt.0268 = phi <2 x i64> [ %add.i, %while.body ], [ zeroinitializer, %while.body.preheader ]222  %tmp4ff.0267 = phi <2 x i64> [ %add.i253, %while.body ], [ zeroinitializer, %while.body.preheader ]223  %tmp4tf.0266 = phi <2 x i64> [ %add.i258, %while.body ], [ zeroinitializer, %while.body.preheader ]224  %tmp4ft.0265 = phi <2 x i64> [ %add.i263, %while.body ], [ zeroinitializer, %while.body.preheader ]225  %4 = load <4 x i32>, ptr %pA.addr.0271, align 4226  %5 = load <4 x i32>, ptr %pB.addr.0270, align 4227  %add.ptr = getelementptr inbounds i32, ptr %pA.addr.0271, i64 4228  %add.ptr8 = getelementptr inbounds i32, ptr %pB.addr.0270, i64 4229  %and.i = and <4 x i32> %5, %4230  %not.i = xor <4 x i32> %4, <i32 -1, i32 -1, i32 -1, i32 -1>231  %not.i242 = xor <4 x i32> %5, <i32 -1, i32 -1, i32 -1, i32 -1>232  %and.i243 = and <4 x i32> %not.i242, %not.i233  %and.i245 = and <4 x i32> %4, %not.i242234  %and.i247 = and <4 x i32> %5, %not.i235  %6 = bitcast <4 x i32> %and.i to <16 x i8>236  %vcntq_v.i = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %6)237  %vpaddl.i = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %vcntq_v.i)238  %vpaddl1.i = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %vpaddl.i)239  %vpaddl1.i248 = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %vpaddl1.i)240  %add.i = add <2 x i64> %vpaddl1.i248, %tmp4tt.0268241  %7 = bitcast <4 x i32> %and.i243 to <16 x i8>242  %vcntq_v.i249 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %7)243  %vpaddl.i250 = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %vcntq_v.i249)244  %vpaddl1.i251 = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %vpaddl.i250)245  %vpaddl1.i252 = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %vpaddl1.i251)246  %add.i253 = add <2 x i64> %vpaddl1.i252, %tmp4ff.0267247  %8 = bitcast <4 x i32> %and.i245 to <16 x i8>248  %vcntq_v.i254 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %8)249  %vpaddl.i255 = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %vcntq_v.i254)250  %vpaddl1.i256 = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %vpaddl.i255)251  %vpaddl1.i257 = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %vpaddl1.i256)252  %add.i258 = add <2 x i64> %vpaddl1.i257, %tmp4tf.0266253  %9 = bitcast <4 x i32> %and.i247 to <16 x i8>254  %vcntq_v.i259 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %9)255  %vpaddl.i260 = tail call <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8> %vcntq_v.i259)256  %vpaddl1.i261 = tail call <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16> %vpaddl.i260)257  %vpaddl1.i262 = tail call <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32> %vpaddl1.i261)258  %add.i263 = add <2 x i64> %vpaddl1.i262, %tmp4ft.0265259  %dec = add nsw i32 %nbBoolBlock.0269, -1260  %cmp.not = icmp eq i32 %dec, 0261  br i1 %cmp.not, label %while.end.loopexit, label %while.body262 263while.end.loopexit:                               ; preds = %while.body264  %scevgep311 = getelementptr i8, ptr %pB, i64 %3265  br label %while.end266 267while.end:                                        ; preds = %while.end.loopexit, %entry268  %tmp4ft.0.lcssa = phi <2 x i64> [ zeroinitializer, %entry ], [ %add.i263, %while.end.loopexit ]269  %tmp4tf.0.lcssa = phi <2 x i64> [ zeroinitializer, %entry ], [ %add.i258, %while.end.loopexit ]270  %tmp4ff.0.lcssa = phi <2 x i64> [ zeroinitializer, %entry ], [ %add.i253, %while.end.loopexit ]271  %tmp4tt.0.lcssa = phi <2 x i64> [ zeroinitializer, %entry ], [ %add.i, %while.end.loopexit ]272  %pB.addr.0.lcssa = phi ptr [ %pB, %entry ], [ %scevgep311, %while.end.loopexit ]273  %pA.addr.0.lcssa = phi ptr [ %pA, %entry ], [ %scevgep, %while.end.loopexit ]274  %vgetq_lane = extractelement <2 x i64> %tmp4tt.0.lcssa, i64 0275  %vgetq_lane45 = extractelement <2 x i64> %tmp4tt.0.lcssa, i64 1276  %add = add i64 %vgetq_lane, %vgetq_lane45277  %conv48 = trunc i64 %add to i32278  %vgetq_lane51 = extractelement <2 x i64> %tmp4ff.0.lcssa, i64 0279  %vgetq_lane55 = extractelement <2 x i64> %tmp4ff.0.lcssa, i64 1280  %add57 = add i64 %vgetq_lane51, %vgetq_lane55281  %conv60 = trunc i64 %add57 to i32282  %vgetq_lane63 = extractelement <2 x i64> %tmp4tf.0.lcssa, i64 0283  %vgetq_lane67 = extractelement <2 x i64> %tmp4tf.0.lcssa, i64 1284  %add69 = add i64 %vgetq_lane63, %vgetq_lane67285  %conv72 = trunc i64 %add69 to i32286  %vgetq_lane75 = extractelement <2 x i64> %tmp4ft.0.lcssa, i64 0287  %vgetq_lane79 = extractelement <2 x i64> %tmp4ft.0.lcssa, i64 1288  %add81 = add i64 %vgetq_lane75, %vgetq_lane79289  %conv84 = trunc i64 %add81 to i32290  %and = and i32 %numberOfBools, 127291  %cmp86284 = icmp ugt i32 %and, 31292  br i1 %cmp86284, label %while.body88, label %while.end122293 294while.body88:                                     ; preds = %while.end, %while.end121295  %pA.addr.1291 = phi ptr [ %incdec.ptr, %while.end121 ], [ %pA.addr.0.lcssa, %while.end ]296  %pB.addr.1290 = phi ptr [ %incdec.ptr89, %while.end121 ], [ %pB.addr.0.lcssa, %while.end ]297  %_ctt.0289 = phi i32 [ %add99, %while.end121 ], [ %conv48, %while.end ]298  %_cff.0288 = phi i32 [ %add106, %while.end121 ], [ %conv60, %while.end ]299  %_ctf.0287 = phi i32 [ %add113, %while.end121 ], [ %conv72, %while.end ]300  %_cft.0286 = phi i32 [ %add120, %while.end121 ], [ %conv84, %while.end ]301  %nbBoolBlock.1285 = phi i32 [ %sub, %while.end121 ], [ %and, %while.end ]302  %10 = load i32, ptr %pA.addr.1291, align 4303  %11 = load i32, ptr %pB.addr.1290, align 4304  br label %while.body93305 306while.body93:                                     ; preds = %while.body88, %while.body93307  %_ctt.1283 = phi i32 [ %_ctt.0289, %while.body88 ], [ %add99, %while.body93 ]308  %_cff.1282 = phi i32 [ %_cff.0288, %while.body88 ], [ %add106, %while.body93 ]309  %_ctf.1281 = phi i32 [ %_ctf.0287, %while.body88 ], [ %add113, %while.body93 ]310  %_cft.1280 = phi i32 [ %_cft.0286, %while.body88 ], [ %add120, %while.body93 ]311  %a.0279 = phi i32 [ %10, %while.body88 ], [ %shr96, %while.body93 ]312  %b.0278 = phi i32 [ %11, %while.body88 ], [ %shr97, %while.body93 ]313  %shift.0277 = phi i32 [ 0, %while.body88 ], [ %inc, %while.body93 ]314  %and94 = and i32 %a.0279, 1315  %and95 = and i32 %b.0278, 1316  %shr96 = lshr i32 %a.0279, 1317  %shr97 = lshr i32 %b.0278, 1318  %tobool = icmp ne i32 %and94, 0319  %tobool98 = icmp ne i32 %and95, 0320  %12 = select i1 %tobool, i1 %tobool98, i1 false321  %land.ext = zext i1 %12 to i32322  %add99 = add i32 %_ctt.1283, %land.ext323  %tobool100 = icmp eq i32 %and94, 0324  %tobool103 = icmp eq i32 %and95, 0325  %13 = select i1 %tobool100, i1 %tobool103, i1 false326  %land.ext105 = zext i1 %13 to i32327  %add106 = add i32 %_cff.1282, %land.ext105328  %14 = select i1 %tobool, i1 %tobool103, i1 false329  %land.ext112 = zext i1 %14 to i32330  %add113 = add i32 %_ctf.1281, %land.ext112331  %15 = select i1 %tobool100, i1 %tobool98, i1 false332  %land.ext119 = zext i1 %15 to i32333  %add120 = add i32 %_cft.1280, %land.ext119334  %inc = add nuw nsw i32 %shift.0277, 1335  %exitcond.not = icmp eq i32 %inc, 32336  br i1 %exitcond.not, label %while.end121, label %while.body93337 338while.end121:                                     ; preds = %while.body93339  %incdec.ptr = getelementptr inbounds i32, ptr %pA.addr.1291, i64 1340  %incdec.ptr89 = getelementptr inbounds i32, ptr %pB.addr.1290, i64 1341  %sub = add nsw i32 %nbBoolBlock.1285, -32342  %cmp86 = icmp ugt i32 %sub, 31343  br i1 %cmp86, label %while.body88, label %while.end122344 345while.end122:                                     ; preds = %while.end121, %while.end346  %nbBoolBlock.1.lcssa = phi i32 [ %and, %while.end ], [ %sub, %while.end121 ]347  %_cft.0.lcssa = phi i32 [ %conv84, %while.end ], [ %add120, %while.end121 ]348  %_ctf.0.lcssa = phi i32 [ %conv72, %while.end ], [ %add113, %while.end121 ]349  %_cff.0.lcssa = phi i32 [ %conv60, %while.end ], [ %add106, %while.end121 ]350  %_ctt.0.lcssa = phi i32 [ %conv48, %while.end ], [ %add99, %while.end121 ]351  %pB.addr.1.lcssa = phi ptr [ %pB.addr.0.lcssa, %while.end ], [ %incdec.ptr89, %while.end121 ]352  %pA.addr.1.lcssa = phi ptr [ %pA.addr.0.lcssa, %while.end ], [ %incdec.ptr, %while.end121 ]353  %cmp130.not299 = icmp eq i32 %nbBoolBlock.1.lcssa, 0354  br i1 %cmp130.not299, label %while.end166, label %while.body132.preheader355 356while.body132.preheader:                          ; preds = %while.end122357  %16 = load i32, ptr %pB.addr.1.lcssa, align 4358  %sub125 = sub nuw nsw i32 32, %nbBoolBlock.1.lcssa359  %shr128 = lshr i32 %16, %sub125360  %17 = load i32, ptr %pA.addr.1.lcssa, align 4361  %shr126 = lshr i32 %17, %sub125362  br label %while.body132363 364while.body132:                                    ; preds = %while.body132.preheader, %while.body132365  %_ctt.2306 = phi i32 [ %add142, %while.body132 ], [ %_ctt.0.lcssa, %while.body132.preheader ]366  %_cff.2305 = phi i32 [ %add150, %while.body132 ], [ %_cff.0.lcssa, %while.body132.preheader ]367  %_ctf.2304 = phi i32 [ %add157, %while.body132 ], [ %_ctf.0.lcssa, %while.body132.preheader ]368  %_cft.2303 = phi i32 [ %add164, %while.body132 ], [ %_cft.0.lcssa, %while.body132.preheader ]369  %nbBoolBlock.2302 = phi i32 [ %dec165, %while.body132 ], [ %nbBoolBlock.1.lcssa, %while.body132.preheader ]370  %a.1301 = phi i32 [ %shr135, %while.body132 ], [ %shr126, %while.body132.preheader ]371  %b.1300 = phi i32 [ %shr136, %while.body132 ], [ %shr128, %while.body132.preheader ]372  %and133 = and i32 %a.1301, 1373  %and134 = and i32 %b.1300, 1374  %shr135 = lshr i32 %a.1301, 1375  %shr136 = lshr i32 %b.1300, 1376  %tobool137 = icmp ne i32 %and133, 0377  %tobool139 = icmp ne i32 %and134, 0378  %18 = select i1 %tobool137, i1 %tobool139, i1 false379  %land.ext141 = zext i1 %18 to i32380  %add142 = add i32 %_ctt.2306, %land.ext141381  %tobool144 = icmp eq i32 %and133, 0382  %tobool147 = icmp eq i32 %and134, 0383  %19 = select i1 %tobool144, i1 %tobool147, i1 false384  %land.ext149 = zext i1 %19 to i32385  %add150 = add i32 %_cff.2305, %land.ext149386  %20 = select i1 %tobool137, i1 %tobool147, i1 false387  %land.ext156 = zext i1 %20 to i32388  %add157 = add i32 %_ctf.2304, %land.ext156389  %21 = select i1 %tobool144, i1 %tobool139, i1 false390  %land.ext163 = zext i1 %21 to i32391  %add164 = add i32 %_cft.2303, %land.ext163392  %dec165 = add nsw i32 %nbBoolBlock.2302, -1393  %cmp130.not = icmp eq i32 %dec165, 0394  br i1 %cmp130.not, label %while.end166, label %while.body132395 396while.end166:                                     ; preds = %while.body132, %while.end122397  %_cft.2.lcssa = phi i32 [ %_cft.0.lcssa, %while.end122 ], [ %add164, %while.body132 ]398  %_ctf.2.lcssa = phi i32 [ %_ctf.0.lcssa, %while.end122 ], [ %add157, %while.body132 ]399  %_cff.2.lcssa = phi i32 [ %_cff.0.lcssa, %while.end122 ], [ %add150, %while.body132 ]400  %_ctt.2.lcssa = phi i32 [ %_ctt.0.lcssa, %while.end122 ], [ %add142, %while.body132 ]401  store i32 %_ctt.2.lcssa, ptr %cTT, align 4402  store i32 %_cff.2.lcssa, ptr %cFF, align 4403  store i32 %_ctf.2.lcssa, ptr %cTF, align 4404  store i32 %_cft.2.lcssa, ptr %cFT, align 4405  ret void406}407 408define void @scalar(ptr nocapture noundef readonly %pA, ptr nocapture noundef readonly %pB, i32 noundef %numberOfBools, ptr nocapture noundef writeonly %cTT, ptr nocapture noundef writeonly %cFF, ptr nocapture noundef writeonly %cTF, ptr nocapture noundef writeonly %cFT) {409; CHECK-LABEL: @scalar(410; CHECK-NEXT:  entry:411; CHECK-NEXT:    [[CMP117:%.*]] = icmp ugt i32 [[NUMBEROFBOOLS:%.*]], 31412; CHECK-NEXT:    br i1 [[CMP117]], label [[WHILE_BODY:%.*]], label [[WHILE_END29:%.*]]413; CHECK:       while.body:414; CHECK-NEXT:    [[_CFT_0124:%.*]] = phi i32 [ [[ADD28:%.*]], [[WHILE_END:%.*]] ], [ 0, [[ENTRY:%.*]] ]415; CHECK-NEXT:    [[_CTF_0123:%.*]] = phi i32 [ [[ADD21:%.*]], [[WHILE_END]] ], [ 0, [[ENTRY]] ]416; CHECK-NEXT:    [[_CFF_0122:%.*]] = phi i32 [ [[ADD14:%.*]], [[WHILE_END]] ], [ 0, [[ENTRY]] ]417; CHECK-NEXT:    [[_CTT_0121:%.*]] = phi i32 [ [[ADD:%.*]], [[WHILE_END]] ], [ 0, [[ENTRY]] ]418; CHECK-NEXT:    [[PA_ADDR_0120:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[WHILE_END]] ], [ [[PA:%.*]], [[ENTRY]] ]419; CHECK-NEXT:    [[PB_ADDR_0119:%.*]] = phi ptr [ [[INCDEC_PTR1:%.*]], [[WHILE_END]] ], [ [[PB:%.*]], [[ENTRY]] ]420; CHECK-NEXT:    [[NUMBEROFBOOLS_ADDR_0118:%.*]] = phi i32 [ [[SUB:%.*]], [[WHILE_END]] ], [ [[NUMBEROFBOOLS]], [[ENTRY]] ]421; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[PA_ADDR_0120]], align 4422; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[PB_ADDR_0119]], align 4423; CHECK-NEXT:    br label [[WHILE_BODY4:%.*]]424; CHECK:       while.body4:425; CHECK-NEXT:    [[SHIFT_0116:%.*]] = phi i32 [ 0, [[WHILE_BODY]] ], [ [[INC:%.*]], [[WHILE_BODY4]] ]426; CHECK-NEXT:    [[B_0115:%.*]] = phi i32 [ [[TMP1]], [[WHILE_BODY]] ], [ [[SHR6:%.*]], [[WHILE_BODY4]] ]427; CHECK-NEXT:    [[A_0114:%.*]] = phi i32 [ [[TMP0]], [[WHILE_BODY]] ], [ [[SHR:%.*]], [[WHILE_BODY4]] ]428; CHECK-NEXT:    [[_CFT_1113:%.*]] = phi i32 [ [[_CFT_0124]], [[WHILE_BODY]] ], [ [[ADD28]], [[WHILE_BODY4]] ]429; CHECK-NEXT:    [[_CTF_1112:%.*]] = phi i32 [ [[_CTF_0123]], [[WHILE_BODY]] ], [ [[ADD21]], [[WHILE_BODY4]] ]430; CHECK-NEXT:    [[_CFF_1111:%.*]] = phi i32 [ [[_CFF_0122]], [[WHILE_BODY]] ], [ [[ADD14]], [[WHILE_BODY4]] ]431; CHECK-NEXT:    [[_CTT_1110:%.*]] = phi i32 [ [[_CTT_0121]], [[WHILE_BODY]] ], [ [[ADD]], [[WHILE_BODY4]] ]432; CHECK-NEXT:    [[AND:%.*]] = and i32 [[A_0114]], 1433; CHECK-NEXT:    [[AND5:%.*]] = and i32 [[B_0115]], 1434; CHECK-NEXT:    [[SHR]] = lshr i32 [[A_0114]], 1435; CHECK-NEXT:    [[SHR6]] = lshr i32 [[B_0115]], 1436; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[AND]], 0437; CHECK-NEXT:    [[TOBOOL7:%.*]] = icmp ne i32 [[AND5]], 0438; CHECK-NEXT:    [[TMP2:%.*]] = select i1 [[TOBOOL]], i1 [[TOBOOL7]], i1 false439; CHECK-NEXT:    [[LAND_EXT:%.*]] = zext i1 [[TMP2]] to i32440; CHECK-NEXT:    [[ADD]] = add i32 [[_CTT_1110]], [[LAND_EXT]]441; CHECK-NEXT:    [[TOBOOL8:%.*]] = icmp eq i32 [[AND]], 0442; CHECK-NEXT:    [[TOBOOL11:%.*]] = icmp eq i32 [[AND5]], 0443; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TOBOOL8]], i1 [[TOBOOL11]], i1 false444; CHECK-NEXT:    [[LAND_EXT13:%.*]] = zext i1 [[TMP3]] to i32445; CHECK-NEXT:    [[ADD14]] = add i32 [[_CFF_1111]], [[LAND_EXT13]]446; CHECK-NEXT:    [[TMP4:%.*]] = select i1 [[TOBOOL]], i1 [[TOBOOL11]], i1 false447; CHECK-NEXT:    [[LAND_EXT20:%.*]] = zext i1 [[TMP4]] to i32448; CHECK-NEXT:    [[ADD21]] = add i32 [[_CTF_1112]], [[LAND_EXT20]]449; CHECK-NEXT:    [[TMP5:%.*]] = select i1 [[TOBOOL8]], i1 [[TOBOOL7]], i1 false450; CHECK-NEXT:    [[LAND_EXT27:%.*]] = zext i1 [[TMP5]] to i32451; CHECK-NEXT:    [[ADD28]] = add i32 [[_CFT_1113]], [[LAND_EXT27]]452; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[SHIFT_0116]], 1453; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 32454; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[WHILE_END]], label [[WHILE_BODY4]]455; CHECK:       while.end:456; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, ptr [[PA_ADDR_0120]], i64 1457; CHECK-NEXT:    [[INCDEC_PTR1]] = getelementptr inbounds i32, ptr [[PB_ADDR_0119]], i64 1458; CHECK-NEXT:    [[SUB]] = add i32 [[NUMBEROFBOOLS_ADDR_0118]], -32459; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32 [[SUB]], 31460; CHECK-NEXT:    br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END29]]461; CHECK:       while.end29:462; CHECK-NEXT:    [[NUMBEROFBOOLS_ADDR_0_LCSSA:%.*]] = phi i32 [ [[NUMBEROFBOOLS]], [[ENTRY]] ], [ [[SUB]], [[WHILE_END]] ]463; CHECK-NEXT:    [[PB_ADDR_0_LCSSA:%.*]] = phi ptr [ [[PB]], [[ENTRY]] ], [ [[INCDEC_PTR1]], [[WHILE_END]] ]464; CHECK-NEXT:    [[PA_ADDR_0_LCSSA:%.*]] = phi ptr [ [[PA]], [[ENTRY]] ], [ [[INCDEC_PTR]], [[WHILE_END]] ]465; CHECK-NEXT:    [[_CTT_0_LCSSA:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD]], [[WHILE_END]] ]466; CHECK-NEXT:    [[_CFF_0_LCSSA:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD14]], [[WHILE_END]] ]467; CHECK-NEXT:    [[_CTF_0_LCSSA:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD21]], [[WHILE_END]] ]468; CHECK-NEXT:    [[_CFT_0_LCSSA:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD28]], [[WHILE_END]] ]469; CHECK-NEXT:    [[CMP37_NOT131:%.*]] = icmp eq i32 [[NUMBEROFBOOLS_ADDR_0_LCSSA]], 0470; CHECK-NEXT:    br i1 [[CMP37_NOT131]], label [[WHILE_END71:%.*]], label [[WHILE_BODY38_PREHEADER:%.*]]471; CHECK:       while.body38.preheader:472; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[PB_ADDR_0_LCSSA]], align 4473; CHECK-NEXT:    [[SUB32:%.*]] = sub nuw nsw i32 32, [[NUMBEROFBOOLS_ADDR_0_LCSSA]]474; CHECK-NEXT:    [[SHR35:%.*]] = lshr i32 [[TMP6]], [[SUB32]]475; CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[PA_ADDR_0_LCSSA]], align 4476; CHECK-NEXT:    [[SHR33:%.*]] = lshr i32 [[TMP7]], [[SUB32]]477; CHECK-NEXT:    br label [[WHILE_BODY38:%.*]]478; CHECK:       while.body38:479; CHECK-NEXT:    [[B_1138:%.*]] = phi i32 [ [[SHR42:%.*]], [[WHILE_BODY38]] ], [ [[SHR35]], [[WHILE_BODY38_PREHEADER]] ]480; CHECK-NEXT:    [[A_1137:%.*]] = phi i32 [ [[SHR41:%.*]], [[WHILE_BODY38]] ], [ [[SHR33]], [[WHILE_BODY38_PREHEADER]] ]481; CHECK-NEXT:    [[_CFT_2136:%.*]] = phi i32 [ [[ADD70:%.*]], [[WHILE_BODY38]] ], [ [[_CFT_0_LCSSA]], [[WHILE_BODY38_PREHEADER]] ]482; CHECK-NEXT:    [[_CTF_2135:%.*]] = phi i32 [ [[ADD63:%.*]], [[WHILE_BODY38]] ], [ [[_CTF_0_LCSSA]], [[WHILE_BODY38_PREHEADER]] ]483; CHECK-NEXT:    [[_CFF_2134:%.*]] = phi i32 [ [[ADD56:%.*]], [[WHILE_BODY38]] ], [ [[_CFF_0_LCSSA]], [[WHILE_BODY38_PREHEADER]] ]484; CHECK-NEXT:    [[_CTT_2133:%.*]] = phi i32 [ [[ADD48:%.*]], [[WHILE_BODY38]] ], [ [[_CTT_0_LCSSA]], [[WHILE_BODY38_PREHEADER]] ]485; CHECK-NEXT:    [[NUMBEROFBOOLS_ADDR_1132:%.*]] = phi i32 [ [[DEC:%.*]], [[WHILE_BODY38]] ], [ [[NUMBEROFBOOLS_ADDR_0_LCSSA]], [[WHILE_BODY38_PREHEADER]] ]486; CHECK-NEXT:    [[AND39:%.*]] = and i32 [[A_1137]], 1487; CHECK-NEXT:    [[AND40:%.*]] = and i32 [[B_1138]], 1488; CHECK-NEXT:    [[SHR41]] = lshr i32 [[A_1137]], 1489; CHECK-NEXT:    [[SHR42]] = lshr i32 [[B_1138]], 1490; CHECK-NEXT:    [[TOBOOL43:%.*]] = icmp ne i32 [[AND39]], 0491; CHECK-NEXT:    [[TOBOOL45:%.*]] = icmp ne i32 [[AND40]], 0492; CHECK-NEXT:    [[TMP8:%.*]] = select i1 [[TOBOOL43]], i1 [[TOBOOL45]], i1 false493; CHECK-NEXT:    [[LAND_EXT47:%.*]] = zext i1 [[TMP8]] to i32494; CHECK-NEXT:    [[ADD48]] = add i32 [[_CTT_2133]], [[LAND_EXT47]]495; CHECK-NEXT:    [[TOBOOL50:%.*]] = icmp eq i32 [[AND39]], 0496; CHECK-NEXT:    [[TOBOOL53:%.*]] = icmp eq i32 [[AND40]], 0497; CHECK-NEXT:    [[TMP9:%.*]] = select i1 [[TOBOOL50]], i1 [[TOBOOL53]], i1 false498; CHECK-NEXT:    [[LAND_EXT55:%.*]] = zext i1 [[TMP9]] to i32499; CHECK-NEXT:    [[ADD56]] = add i32 [[_CFF_2134]], [[LAND_EXT55]]500; CHECK-NEXT:    [[TMP10:%.*]] = select i1 [[TOBOOL43]], i1 [[TOBOOL53]], i1 false501; CHECK-NEXT:    [[LAND_EXT62:%.*]] = zext i1 [[TMP10]] to i32502; CHECK-NEXT:    [[ADD63]] = add i32 [[_CTF_2135]], [[LAND_EXT62]]503; CHECK-NEXT:    [[TMP11:%.*]] = select i1 [[TOBOOL50]], i1 [[TOBOOL45]], i1 false504; CHECK-NEXT:    [[LAND_EXT69:%.*]] = zext i1 [[TMP11]] to i32505; CHECK-NEXT:    [[ADD70]] = add i32 [[_CFT_2136]], [[LAND_EXT69]]506; CHECK-NEXT:    [[DEC]] = add nsw i32 [[NUMBEROFBOOLS_ADDR_1132]], -1507; CHECK-NEXT:    [[CMP37_NOT:%.*]] = icmp eq i32 [[DEC]], 0508; CHECK-NEXT:    br i1 [[CMP37_NOT]], label [[WHILE_END71]], label [[WHILE_BODY38]]509; CHECK:       while.end71:510; CHECK-NEXT:    [[_CTT_2_LCSSA:%.*]] = phi i32 [ [[_CTT_0_LCSSA]], [[WHILE_END29]] ], [ [[ADD48]], [[WHILE_BODY38]] ]511; CHECK-NEXT:    [[_CFF_2_LCSSA:%.*]] = phi i32 [ [[_CFF_0_LCSSA]], [[WHILE_END29]] ], [ [[ADD56]], [[WHILE_BODY38]] ]512; CHECK-NEXT:    [[_CTF_2_LCSSA:%.*]] = phi i32 [ [[_CTF_0_LCSSA]], [[WHILE_END29]] ], [ [[ADD63]], [[WHILE_BODY38]] ]513; CHECK-NEXT:    [[_CFT_2_LCSSA:%.*]] = phi i32 [ [[_CFT_0_LCSSA]], [[WHILE_END29]] ], [ [[ADD70]], [[WHILE_BODY38]] ]514; CHECK-NEXT:    store i32 [[_CTT_2_LCSSA]], ptr [[CTT:%.*]], align 4515; CHECK-NEXT:    store i32 [[_CFF_2_LCSSA]], ptr [[CFF:%.*]], align 4516; CHECK-NEXT:    store i32 [[_CTF_2_LCSSA]], ptr [[CTF:%.*]], align 4517; CHECK-NEXT:    store i32 [[_CFT_2_LCSSA]], ptr [[CFT:%.*]], align 4518; CHECK-NEXT:    ret void519;520entry:521  %cmp117 = icmp ugt i32 %numberOfBools, 31522  br i1 %cmp117, label %while.body, label %while.end29523 524while.body:                                       ; preds = %entry, %while.end525  %_cft.0124 = phi i32 [ %add28, %while.end ], [ 0, %entry ]526  %_ctf.0123 = phi i32 [ %add21, %while.end ], [ 0, %entry ]527  %_cff.0122 = phi i32 [ %add14, %while.end ], [ 0, %entry ]528  %_ctt.0121 = phi i32 [ %add, %while.end ], [ 0, %entry ]529  %pA.addr.0120 = phi ptr [ %incdec.ptr, %while.end ], [ %pA, %entry ]530  %pB.addr.0119 = phi ptr [ %incdec.ptr1, %while.end ], [ %pB, %entry ]531  %numberOfBools.addr.0118 = phi i32 [ %sub, %while.end ], [ %numberOfBools, %entry ]532  %0 = load i32, ptr %pA.addr.0120, align 4533  %1 = load i32, ptr %pB.addr.0119, align 4534  br label %while.body4535 536while.body4:                                      ; preds = %while.body, %while.body4537  %shift.0116 = phi i32 [ 0, %while.body ], [ %inc, %while.body4 ]538  %b.0115 = phi i32 [ %1, %while.body ], [ %shr6, %while.body4 ]539  %a.0114 = phi i32 [ %0, %while.body ], [ %shr, %while.body4 ]540  %_cft.1113 = phi i32 [ %_cft.0124, %while.body ], [ %add28, %while.body4 ]541  %_ctf.1112 = phi i32 [ %_ctf.0123, %while.body ], [ %add21, %while.body4 ]542  %_cff.1111 = phi i32 [ %_cff.0122, %while.body ], [ %add14, %while.body4 ]543  %_ctt.1110 = phi i32 [ %_ctt.0121, %while.body ], [ %add, %while.body4 ]544  %and = and i32 %a.0114, 1545  %and5 = and i32 %b.0115, 1546  %shr = lshr i32 %a.0114, 1547  %shr6 = lshr i32 %b.0115, 1548  %tobool = icmp ne i32 %and, 0549  %tobool7 = icmp ne i32 %and5, 0550  %2 = select i1 %tobool, i1 %tobool7, i1 false551  %land.ext = zext i1 %2 to i32552  %add = add i32 %_ctt.1110, %land.ext553  %tobool8 = icmp eq i32 %and, 0554  %tobool11 = icmp eq i32 %and5, 0555  %3 = select i1 %tobool8, i1 %tobool11, i1 false556  %land.ext13 = zext i1 %3 to i32557  %add14 = add i32 %_cff.1111, %land.ext13558  %4 = select i1 %tobool, i1 %tobool11, i1 false559  %land.ext20 = zext i1 %4 to i32560  %add21 = add i32 %_ctf.1112, %land.ext20561  %5 = select i1 %tobool8, i1 %tobool7, i1 false562  %land.ext27 = zext i1 %5 to i32563  %add28 = add i32 %_cft.1113, %land.ext27564  %inc = add nuw nsw i32 %shift.0116, 1565  %exitcond.not = icmp eq i32 %inc, 32566  br i1 %exitcond.not, label %while.end, label %while.body4567 568while.end:                                        ; preds = %while.body4569  %incdec.ptr = getelementptr inbounds i32, ptr %pA.addr.0120, i64 1570  %incdec.ptr1 = getelementptr inbounds i32, ptr %pB.addr.0119, i64 1571  %sub = add i32 %numberOfBools.addr.0118, -32572  %cmp = icmp ugt i32 %sub, 31573  br i1 %cmp, label %while.body, label %while.end29574 575while.end29:                                      ; preds = %while.end, %entry576  %numberOfBools.addr.0.lcssa = phi i32 [ %numberOfBools, %entry ], [ %sub, %while.end ]577  %pB.addr.0.lcssa = phi ptr [ %pB, %entry ], [ %incdec.ptr1, %while.end ]578  %pA.addr.0.lcssa = phi ptr [ %pA, %entry ], [ %incdec.ptr, %while.end ]579  %_ctt.0.lcssa = phi i32 [ 0, %entry ], [ %add, %while.end ]580  %_cff.0.lcssa = phi i32 [ 0, %entry ], [ %add14, %while.end ]581  %_ctf.0.lcssa = phi i32 [ 0, %entry ], [ %add21, %while.end ]582  %_cft.0.lcssa = phi i32 [ 0, %entry ], [ %add28, %while.end ]583  %cmp37.not131 = icmp eq i32 %numberOfBools.addr.0.lcssa, 0584  br i1 %cmp37.not131, label %while.end71, label %while.body38.preheader585 586while.body38.preheader:                           ; preds = %while.end29587  %6 = load i32, ptr %pB.addr.0.lcssa, align 4588  %sub32 = sub nuw nsw i32 32, %numberOfBools.addr.0.lcssa589  %shr35 = lshr i32 %6, %sub32590  %7 = load i32, ptr %pA.addr.0.lcssa, align 4591  %shr33 = lshr i32 %7, %sub32592  br label %while.body38593 594while.body38:                                     ; preds = %while.body38.preheader, %while.body38595  %b.1138 = phi i32 [ %shr42, %while.body38 ], [ %shr35, %while.body38.preheader ]596  %a.1137 = phi i32 [ %shr41, %while.body38 ], [ %shr33, %while.body38.preheader ]597  %_cft.2136 = phi i32 [ %add70, %while.body38 ], [ %_cft.0.lcssa, %while.body38.preheader ]598  %_ctf.2135 = phi i32 [ %add63, %while.body38 ], [ %_ctf.0.lcssa, %while.body38.preheader ]599  %_cff.2134 = phi i32 [ %add56, %while.body38 ], [ %_cff.0.lcssa, %while.body38.preheader ]600  %_ctt.2133 = phi i32 [ %add48, %while.body38 ], [ %_ctt.0.lcssa, %while.body38.preheader ]601  %numberOfBools.addr.1132 = phi i32 [ %dec, %while.body38 ], [ %numberOfBools.addr.0.lcssa, %while.body38.preheader ]602  %and39 = and i32 %a.1137, 1603  %and40 = and i32 %b.1138, 1604  %shr41 = lshr i32 %a.1137, 1605  %shr42 = lshr i32 %b.1138, 1606  %tobool43 = icmp ne i32 %and39, 0607  %tobool45 = icmp ne i32 %and40, 0608  %8 = select i1 %tobool43, i1 %tobool45, i1 false609  %land.ext47 = zext i1 %8 to i32610  %add48 = add i32 %_ctt.2133, %land.ext47611  %tobool50 = icmp eq i32 %and39, 0612  %tobool53 = icmp eq i32 %and40, 0613  %9 = select i1 %tobool50, i1 %tobool53, i1 false614  %land.ext55 = zext i1 %9 to i32615  %add56 = add i32 %_cff.2134, %land.ext55616  %10 = select i1 %tobool43, i1 %tobool53, i1 false617  %land.ext62 = zext i1 %10 to i32618  %add63 = add i32 %_ctf.2135, %land.ext62619  %11 = select i1 %tobool50, i1 %tobool45, i1 false620  %land.ext69 = zext i1 %11 to i32621  %add70 = add i32 %_cft.2136, %land.ext69622  %dec = add nsw i32 %numberOfBools.addr.1132, -1623  %cmp37.not = icmp eq i32 %dec, 0624  br i1 %cmp37.not, label %while.end71, label %while.body38625 626while.end71:                                      ; preds = %while.body38, %while.end29627  %_ctt.2.lcssa = phi i32 [ %_ctt.0.lcssa, %while.end29 ], [ %add48, %while.body38 ]628  %_cff.2.lcssa = phi i32 [ %_cff.0.lcssa, %while.end29 ], [ %add56, %while.body38 ]629  %_ctf.2.lcssa = phi i32 [ %_ctf.0.lcssa, %while.end29 ], [ %add63, %while.body38 ]630  %_cft.2.lcssa = phi i32 [ %_cft.0.lcssa, %while.end29 ], [ %add70, %while.body38 ]631  store i32 %_ctt.2.lcssa, ptr %cTT, align 4632  store i32 %_cff.2.lcssa, ptr %cFF, align 4633  store i32 %_ctf.2.lcssa, ptr %cTF, align 4634  store i32 %_cft.2.lcssa, ptr %cFT, align 4635  ret void636}637 638; FIXME: This should not be vectorizing (further) with expensive shuffles.639; The old cost of the or+extract should be 2*1 (or) + 4*2 (extract). The new640; cost should be 1*1 (or) + 2*2 (extract) + at least 4 (shuffles).641define i1 @tryMapToRange(ptr %values, ptr %result, <2 x i64> %hi, <2 x i64> %lo) {642; CHECK-LABEL: @tryMapToRange(643; CHECK-NEXT:    [[L:%.*]] = load <2 x i64>, ptr [[VALUES:%.*]], align 8644; CHECK-NEXT:    [[C1:%.*]] = icmp sgt <2 x i64> [[L]], [[HI:%.*]]645; CHECK-NEXT:    [[S1:%.*]] = sext <2 x i1> [[C1]] to <2 x i64>646; CHECK-NEXT:    [[BC1:%.*]] = bitcast <2 x i64> [[S1]] to <16 x i8>647; CHECK-NEXT:    [[A1:%.*]] = and <16 x i8> [[BC1]], <i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>648; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <16 x i8> [[A1]], i64 0649; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <16 x i8> [[A1]], i64 8650; CHECK-NEXT:    [[C2:%.*]] = icmp slt <2 x i64> [[L]], [[LO:%.*]]651; CHECK-NEXT:    [[S2:%.*]] = sext <2 x i1> [[C2]] to <2 x i64>652; CHECK-NEXT:    [[BC2:%.*]] = bitcast <2 x i64> [[S2]] to <16 x i8>653; CHECK-NEXT:    [[A2:%.*]] = and <16 x i8> [[BC2]], <i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>654; CHECK-NEXT:    [[E3:%.*]] = extractelement <16 x i8> [[A2]], i64 0655; CHECK-NEXT:    [[E4:%.*]] = extractelement <16 x i8> [[A2]], i64 8656; CHECK-NEXT:    [[REASS_SUB:%.*]] = sub <2 x i64> [[L]], [[LO]]657; CHECK-NEXT:    [[ADD_I_I_I_I_I_I:%.*]] = add <2 x i64> [[REASS_SUB]], splat (i64 1)658; CHECK-NEXT:    store <2 x i64> [[ADD_I_I_I_I_I_I]], ptr [[RESULT:%.*]], align 8659; CHECK-NEXT:    [[O3:%.*]] = or i8 [[TMP4]], [[TMP5]]660; CHECK-NEXT:    [[O2:%.*]] = or i8 [[E4]], [[E3]]661; CHECK-NEXT:    [[O4:%.*]] = or i8 [[O3]], [[O2]]662; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[O4]], 0663; CHECK-NEXT:    ret i1 [[C]]664;665  %l = load <2 x i64>, ptr %values, align 8666  %c1 = icmp sgt <2 x i64> %l, %hi667  %s1 = sext <2 x i1> %c1 to <2 x i64>668  %bc1 = bitcast <2 x i64> %s1 to <16 x i8>669  %a1 = and <16 x i8> %bc1, <i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>670  %e1 = extractelement <16 x i8> %a1, i64 0671  %e2 = extractelement <16 x i8> %a1, i64 8672  %c2 = icmp slt <2 x i64> %l, %lo673  %s2 = sext <2 x i1> %c2 to <2 x i64>674  %bc2 = bitcast <2 x i64> %s2 to <16 x i8>675  %a2 = and <16 x i8> %bc2, <i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 1, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>676  %e3 = extractelement <16 x i8> %a2, i64 0677  %e4 = extractelement <16 x i8> %a2, i64 8678  %reass.sub = sub <2 x i64> %l, %lo679  %add.i.i.i.i.i.i = add <2 x i64> %reass.sub, splat (i64 1)680  store <2 x i64> %add.i.i.i.i.i.i, ptr %result, align 8681  %o1 = or i8 %e2, %e1682  %o2 = or i8 %e4, %e3683  %o3 = or i8 %o1, %o2684  %c = icmp eq i8 %o3, 0685  ret i1 %c686}687 688 689declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>) #1690declare <8 x i16> @llvm.aarch64.neon.uaddlp.v8i16.v16i8(<16 x i8>) #2691declare <4 x i32> @llvm.aarch64.neon.uaddlp.v4i32.v8i16(<8 x i16>) #2692declare <2 x i64> @llvm.aarch64.neon.uaddlp.v2i64.v4i32(<4 x i32>) #2693