brintos

brintos / llvm-project-archived public Read only

0
0
Text · 99.1 KiB · 651e2ad Raw
1586 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-vectorize -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx -S | FileCheck %s3 4target triple = "x86_64-apple-macosx10.8.0"5 6; Test case for https://github.com/llvm/llvm-project/issues/156091.7define void @test_replicate_call_chain(float %x, ptr noalias %A, ptr noalias %B, ptr align 4 noalias %C, ptr align 4 noalias %D, ptr noalias %E) #0 {8; CHECK-LABEL: @test_replicate_call_chain(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]11; CHECK:       vector.ph:12; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]13; CHECK:       vector.body:14; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]15; CHECK-NEXT:    [[TMP0:%.*]] = add i64 [[INDEX]], 116; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i64 [[INDEX]]17; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x float>, ptr [[TMP1]], align 418; CHECK-NEXT:    [[TMP2:%.*]] = fcmp ogt <16 x float> [[WIDE_LOAD]], zeroinitializer19; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i64 [[INDEX]]20; CHECK-NEXT:    [[WIDE_LOAD1:%.*]] = load <16 x float>, ptr [[TMP3]], align 421; CHECK-NEXT:    [[TMP4:%.*]] = fcmp ogt <16 x float> [[WIDE_LOAD1]], zeroinitializer22; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr float, ptr [[C:%.*]], i64 [[TMP0]]23; CHECK-NEXT:    [[TMP6:%.*]] = and <16 x i1> [[TMP2]], [[TMP4]]24; CHECK-NEXT:    [[TMP7:%.*]] = xor <16 x i1> [[TMP6]], splat (i1 true)25; CHECK-NEXT:    [[TMP8:%.*]] = shl i64 [[INDEX]], 226; CHECK-NEXT:    [[TMP9:%.*]] = getelementptr i8, ptr [[D:%.*]], i64 [[TMP8]]27; CHECK-NEXT:    [[WIDE_MASKED_LOAD:%.*]] = call <16 x float> @llvm.masked.load.v16f32.p0(ptr align 4 [[TMP9]], <16 x i1> [[TMP7]], <16 x float> poison)28; CHECK-NEXT:    [[TMP10:%.*]] = fmul <16 x float> [[WIDE_MASKED_LOAD]], splat (float 2.000000e+00)29; CHECK-NEXT:    [[TMP11:%.*]] = extractelement <16 x float> [[TMP10]], i32 030; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <16 x float> [[TMP10]], i32 131; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <16 x float> [[TMP10]], i32 232; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <16 x float> [[TMP10]], i32 333; CHECK-NEXT:    [[TMP19:%.*]] = extractelement <16 x float> [[TMP10]], i32 434; CHECK-NEXT:    [[TMP21:%.*]] = extractelement <16 x float> [[TMP10]], i32 535; CHECK-NEXT:    [[TMP23:%.*]] = extractelement <16 x float> [[TMP10]], i32 636; CHECK-NEXT:    [[TMP25:%.*]] = extractelement <16 x float> [[TMP10]], i32 737; CHECK-NEXT:    [[TMP27:%.*]] = extractelement <16 x float> [[TMP10]], i32 838; CHECK-NEXT:    [[TMP29:%.*]] = extractelement <16 x float> [[TMP10]], i32 939; CHECK-NEXT:    [[TMP31:%.*]] = extractelement <16 x float> [[TMP10]], i32 1040; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <16 x float> [[TMP10]], i32 1141; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <16 x float> [[TMP10]], i32 1242; CHECK-NEXT:    [[TMP37:%.*]] = extractelement <16 x float> [[TMP10]], i32 1343; CHECK-NEXT:    [[TMP39:%.*]] = extractelement <16 x float> [[TMP10]], i32 1444; CHECK-NEXT:    [[TMP41:%.*]] = extractelement <16 x float> [[TMP10]], i32 1545; CHECK-NEXT:    [[TMP12:%.*]] = tail call float @llvm.pow.f32(float [[TMP11]], float [[X:%.*]])46; CHECK-NEXT:    [[TMP14:%.*]] = tail call float @llvm.pow.f32(float [[TMP13]], float [[X]])47; CHECK-NEXT:    [[TMP16:%.*]] = tail call float @llvm.pow.f32(float [[TMP15]], float [[X]])48; CHECK-NEXT:    [[TMP18:%.*]] = tail call float @llvm.pow.f32(float [[TMP17]], float [[X]])49; CHECK-NEXT:    [[TMP20:%.*]] = tail call float @llvm.pow.f32(float [[TMP19]], float [[X]])50; CHECK-NEXT:    [[TMP22:%.*]] = tail call float @llvm.pow.f32(float [[TMP21]], float [[X]])51; CHECK-NEXT:    [[TMP24:%.*]] = tail call float @llvm.pow.f32(float [[TMP23]], float [[X]])52; CHECK-NEXT:    [[TMP26:%.*]] = tail call float @llvm.pow.f32(float [[TMP25]], float [[X]])53; CHECK-NEXT:    [[TMP28:%.*]] = tail call float @llvm.pow.f32(float [[TMP27]], float [[X]])54; CHECK-NEXT:    [[TMP30:%.*]] = tail call float @llvm.pow.f32(float [[TMP29]], float [[X]])55; CHECK-NEXT:    [[TMP32:%.*]] = tail call float @llvm.pow.f32(float [[TMP31]], float [[X]])56; CHECK-NEXT:    [[TMP34:%.*]] = tail call float @llvm.pow.f32(float [[TMP33]], float [[X]])57; CHECK-NEXT:    [[TMP36:%.*]] = tail call float @llvm.pow.f32(float [[TMP35]], float [[X]])58; CHECK-NEXT:    [[TMP38:%.*]] = tail call float @llvm.pow.f32(float [[TMP37]], float [[X]])59; CHECK-NEXT:    [[TMP40:%.*]] = tail call float @llvm.pow.f32(float [[TMP39]], float [[X]])60; CHECK-NEXT:    [[TMP42:%.*]] = tail call float @llvm.pow.f32(float [[TMP41]], float [[X]])61; CHECK-NEXT:    [[TMP43:%.*]] = tail call float @llvm.pow.f32(float [[TMP12]], float [[X]])62; CHECK-NEXT:    [[TMP44:%.*]] = tail call float @llvm.pow.f32(float [[TMP14]], float [[X]])63; CHECK-NEXT:    [[TMP45:%.*]] = tail call float @llvm.pow.f32(float [[TMP16]], float [[X]])64; CHECK-NEXT:    [[TMP46:%.*]] = tail call float @llvm.pow.f32(float [[TMP18]], float [[X]])65; CHECK-NEXT:    [[TMP47:%.*]] = tail call float @llvm.pow.f32(float [[TMP20]], float [[X]])66; CHECK-NEXT:    [[TMP48:%.*]] = tail call float @llvm.pow.f32(float [[TMP22]], float [[X]])67; CHECK-NEXT:    [[TMP49:%.*]] = tail call float @llvm.pow.f32(float [[TMP24]], float [[X]])68; CHECK-NEXT:    [[TMP50:%.*]] = tail call float @llvm.pow.f32(float [[TMP26]], float [[X]])69; CHECK-NEXT:    [[TMP51:%.*]] = tail call float @llvm.pow.f32(float [[TMP28]], float [[X]])70; CHECK-NEXT:    [[TMP52:%.*]] = tail call float @llvm.pow.f32(float [[TMP30]], float [[X]])71; CHECK-NEXT:    [[TMP53:%.*]] = tail call float @llvm.pow.f32(float [[TMP32]], float [[X]])72; CHECK-NEXT:    [[TMP54:%.*]] = tail call float @llvm.pow.f32(float [[TMP34]], float [[X]])73; CHECK-NEXT:    [[TMP55:%.*]] = tail call float @llvm.pow.f32(float [[TMP36]], float [[X]])74; CHECK-NEXT:    [[TMP56:%.*]] = tail call float @llvm.pow.f32(float [[TMP38]], float [[X]])75; CHECK-NEXT:    [[TMP57:%.*]] = tail call float @llvm.pow.f32(float [[TMP40]], float [[X]])76; CHECK-NEXT:    [[TMP58:%.*]] = tail call float @llvm.pow.f32(float [[TMP42]], float [[X]])77; CHECK-NEXT:    [[TMP59:%.*]] = insertelement <16 x float> poison, float [[TMP43]], i32 078; CHECK-NEXT:    [[TMP60:%.*]] = insertelement <16 x float> [[TMP59]], float [[TMP44]], i32 179; CHECK-NEXT:    [[TMP61:%.*]] = insertelement <16 x float> [[TMP60]], float [[TMP45]], i32 280; CHECK-NEXT:    [[TMP62:%.*]] = insertelement <16 x float> [[TMP61]], float [[TMP46]], i32 381; CHECK-NEXT:    [[TMP63:%.*]] = insertelement <16 x float> [[TMP62]], float [[TMP47]], i32 482; CHECK-NEXT:    [[TMP64:%.*]] = insertelement <16 x float> [[TMP63]], float [[TMP48]], i32 583; CHECK-NEXT:    [[TMP65:%.*]] = insertelement <16 x float> [[TMP64]], float [[TMP49]], i32 684; CHECK-NEXT:    [[TMP66:%.*]] = insertelement <16 x float> [[TMP65]], float [[TMP50]], i32 785; CHECK-NEXT:    [[TMP67:%.*]] = insertelement <16 x float> [[TMP66]], float [[TMP51]], i32 886; CHECK-NEXT:    [[TMP68:%.*]] = insertelement <16 x float> [[TMP67]], float [[TMP52]], i32 987; CHECK-NEXT:    [[TMP69:%.*]] = insertelement <16 x float> [[TMP68]], float [[TMP53]], i32 1088; CHECK-NEXT:    [[TMP70:%.*]] = insertelement <16 x float> [[TMP69]], float [[TMP54]], i32 1189; CHECK-NEXT:    [[TMP71:%.*]] = insertelement <16 x float> [[TMP70]], float [[TMP55]], i32 1290; CHECK-NEXT:    [[TMP72:%.*]] = insertelement <16 x float> [[TMP71]], float [[TMP56]], i32 1391; CHECK-NEXT:    [[TMP73:%.*]] = insertelement <16 x float> [[TMP72]], float [[TMP57]], i32 1492; CHECK-NEXT:    [[TMP74:%.*]] = insertelement <16 x float> [[TMP73]], float [[TMP58]], i32 1593; CHECK-NEXT:    call void @llvm.masked.store.v16f32.p0(<16 x float> [[TMP74]], ptr align 4 [[TMP5]], <16 x i1> [[TMP7]])94; CHECK-NEXT:    call void @llvm.masked.store.v16f32.p0(<16 x float> zeroinitializer, ptr align 4 [[TMP5]], <16 x i1> [[TMP6]])95; CHECK-NEXT:    store float 0.000000e+00, ptr [[E:%.*]], align 496; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 1697; CHECK-NEXT:    [[TMP75:%.*]] = icmp eq i64 [[INDEX_NEXT]], 9698; CHECK-NEXT:    br i1 [[TMP75]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]99; CHECK:       middle.block:100; CHECK-NEXT:    br label [[SCALAR_PH:%.*]]101; CHECK:       scalar.ph:102; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]103; CHECK:       loop.header:104; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ 96, [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]105; CHECK-NEXT:    [[DEC_IV:%.*]] = phi i64 [ 4, [[SCALAR_PH]] ], [ [[DEC_IV_NEXT:%.*]], [[LOOP_LATCH]] ]106; CHECK-NEXT:    [[IV_INC:%.*]] = add i64 [[IV]], 1107; CHECK-NEXT:    [[GEP_A:%.*]] = getelementptr inbounds float, ptr [[A]], i64 [[IV]]108; CHECK-NEXT:    [[L_A:%.*]] = load float, ptr [[GEP_A]], align 4109; CHECK-NEXT:    [[C_A:%.*]] = fcmp ogt float [[L_A]], 0.000000e+00110; CHECK-NEXT:    [[GEP_B:%.*]] = getelementptr inbounds float, ptr [[B]], i64 [[IV]]111; CHECK-NEXT:    [[L_B:%.*]] = load float, ptr [[GEP_B]], align 4112; CHECK-NEXT:    [[C_B:%.*]] = fcmp ogt float [[L_B]], 0.000000e+00113; CHECK-NEXT:    [[GEP_C:%.*]] = getelementptr float, ptr [[C]], i64 [[IV_INC]]114; CHECK-NEXT:    [[AND:%.*]] = and i1 [[C_A]], [[C_B]]115; CHECK-NEXT:    br i1 [[AND]], label [[THEN:%.*]], label [[ELSE:%.*]]116; CHECK:       then:117; CHECK-NEXT:    store float 0.000000e+00, ptr [[GEP_C]], align 4118; CHECK-NEXT:    br label [[LOOP_LATCH]]119; CHECK:       else:120; CHECK-NEXT:    [[IV_MUL_2:%.*]] = shl i64 [[IV]], 2121; CHECK-NEXT:    [[GEP_D:%.*]] = getelementptr i8, ptr [[D]], i64 [[IV_MUL_2]]122; CHECK-NEXT:    [[L_D:%.*]] = load float, ptr [[GEP_D]], align 4123; CHECK-NEXT:    [[MUL:%.*]] = fmul float [[L_D]], 2.000000e+00124; CHECK-NEXT:    [[POW_1:%.*]] = tail call float @llvm.pow.f32(float [[MUL]], float [[X]])125; CHECK-NEXT:    [[POW_2:%.*]] = tail call float @llvm.pow.f32(float [[POW_1]], float [[X]])126; CHECK-NEXT:    store float [[POW_2]], ptr [[GEP_C]], align 4127; CHECK-NEXT:    br label [[LOOP_LATCH]]128; CHECK:       loop.latch:129; CHECK-NEXT:    store float 0.000000e+00, ptr [[E]], align 4130; CHECK-NEXT:    [[IV_NEXT]] = add i64 [[IV]], 1131; CHECK-NEXT:    [[DEC_IV_NEXT]] = add i64 [[DEC_IV]], -1132; CHECK-NEXT:    [[EC:%.*]] = icmp ne i64 [[DEC_IV_NEXT]], 0133; CHECK-NEXT:    br i1 [[EC]], label [[LOOP_HEADER]], label [[EXIT:%.*]], !llvm.loop [[LOOP3:![0-9]+]]134; CHECK:       exit:135; CHECK-NEXT:    ret void136;137entry:138  br label %loop.header139 140loop.header:141  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]142  %dec.iv = phi i64 [ 100, %entry ], [ %dec.iv.next, %loop.latch ]143  %iv.inc = add i64 %iv, 1144  %gep.A = getelementptr inbounds float, ptr %A, i64 %iv145  %l.A = load float, ptr %gep.A, align 4146  %c.A = fcmp ogt float %l.A, 0.0147  %gep.B = getelementptr inbounds float, ptr %B, i64 %iv148  %l.B = load float, ptr %gep.B, align 4149  %c.B = fcmp ogt float %l.B, 0.0150  %gep.C = getelementptr float, ptr %C, i64 %iv.inc151  %and = and i1 %c.A, %c.B152  br i1 %and, label %then, label %else153 154then:155  store float 0.0, ptr %gep.C, align 4156  br label %loop.latch157 158else:159  %iv.mul.2 = shl i64 %iv, 2160  %gep.D = getelementptr i8, ptr %D, i64 %iv.mul.2161  %l.D = load float, ptr %gep.D, align 4162  %mul = fmul float %l.D, 2.0163  %pow.1 = tail call float @llvm.pow.f32(float %mul, float %x)164  %pow.2 = tail call float @llvm.pow.f32(float %pow.1, float %x)165  store float %pow.2, ptr %gep.C, align 4166  br label %loop.latch167 168loop.latch:169  store float 0.000000e+00, ptr %E, align 4170  %iv.next = add i64 %iv, 1171  %dec.iv.next = add i64 %dec.iv, -1172  %ec = icmp ne i64 %dec.iv.next, 0173  br i1 %ec, label %loop.header, label %exit174 175exit:176  ret void177}178 179define i64 @avx512_cond_load_cost(ptr %src, i32 %a, i64 %b, i32 %c, i32 %d) #1 {180; CHECK-LABEL: @avx512_cond_load_cost(181; CHECK-NEXT:  entry:182; CHECK-NEXT:    [[TMP63:%.*]] = add i32 [[C:%.*]], 1183; CHECK-NEXT:    [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[TMP63]], 8184; CHECK-NEXT:    br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[ENTRY:%.*]]185; CHECK:       vector.ph:186; CHECK-NEXT:    [[N_MOD_VF:%.*]] = urem i32 [[TMP63]], 8187; CHECK-NEXT:    [[N_VEC:%.*]] = sub i32 [[TMP63]], [[N_MOD_VF]]188; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x i64> poison, i64 [[B:%.*]], i64 0189; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x i64> [[BROADCAST_SPLATINSERT]], <8 x i64> poison, <8 x i32> zeroinitializer190; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]191; CHECK:       vector.body:192; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]193; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <8 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>, [[ENTRY]] ], [ [[VEC_IND_NEXT:%.*]], [[LOOP_LATCH]] ]194; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt <8 x i32> [[VEC_IND]], zeroinitializer195; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <8 x i1> [[TMP1]], i32 0196; CHECK-NEXT:    br i1 [[TMP2]], label [[PRED_UREM_IF:%.*]], label [[PRED_UREM_CONTINUE:%.*]]197; CHECK:       pred.urem.if:198; CHECK-NEXT:    [[TMP3:%.*]] = urem i32 [[A:%.*]], [[C]]199; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <8 x i32> poison, i32 [[TMP3]], i32 0200; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE]]201; CHECK:       pred.urem.continue:202; CHECK-NEXT:    [[TMP5:%.*]] = phi <8 x i32> [ poison, [[LOOP_HEADER]] ], [ [[TMP4]], [[PRED_UREM_IF]] ]203; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <8 x i1> [[TMP1]], i32 1204; CHECK-NEXT:    br i1 [[TMP6]], label [[PRED_UREM_IF1:%.*]], label [[PRED_UREM_CONTINUE2:%.*]]205; CHECK:       pred.urem.if1:206; CHECK-NEXT:    [[TMP7:%.*]] = urem i32 [[A]], [[C]]207; CHECK-NEXT:    [[TMP8:%.*]] = insertelement <8 x i32> [[TMP5]], i32 [[TMP7]], i32 1208; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE2]]209; CHECK:       pred.urem.continue2:210; CHECK-NEXT:    [[TMP9:%.*]] = phi <8 x i32> [ [[TMP5]], [[PRED_UREM_CONTINUE]] ], [ [[TMP8]], [[PRED_UREM_IF1]] ]211; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <8 x i1> [[TMP1]], i32 2212; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_UREM_IF3:%.*]], label [[PRED_UREM_CONTINUE4:%.*]]213; CHECK:       pred.urem.if3:214; CHECK-NEXT:    [[TMP11:%.*]] = urem i32 [[A]], [[C]]215; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <8 x i32> [[TMP9]], i32 [[TMP11]], i32 2216; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE4]]217; CHECK:       pred.urem.continue4:218; CHECK-NEXT:    [[TMP13:%.*]] = phi <8 x i32> [ [[TMP9]], [[PRED_UREM_CONTINUE2]] ], [ [[TMP12]], [[PRED_UREM_IF3]] ]219; CHECK-NEXT:    [[TMP14:%.*]] = extractelement <8 x i1> [[TMP1]], i32 3220; CHECK-NEXT:    br i1 [[TMP14]], label [[PRED_UREM_IF5:%.*]], label [[PRED_UREM_CONTINUE6:%.*]]221; CHECK:       pred.urem.if5:222; CHECK-NEXT:    [[TMP15:%.*]] = urem i32 [[A]], [[C]]223; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <8 x i32> [[TMP13]], i32 [[TMP15]], i32 3224; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE6]]225; CHECK:       pred.urem.continue6:226; CHECK-NEXT:    [[TMP17:%.*]] = phi <8 x i32> [ [[TMP13]], [[PRED_UREM_CONTINUE4]] ], [ [[TMP16]], [[PRED_UREM_IF5]] ]227; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <8 x i1> [[TMP1]], i32 4228; CHECK-NEXT:    br i1 [[TMP18]], label [[PRED_UREM_IF7:%.*]], label [[PRED_UREM_CONTINUE8:%.*]]229; CHECK:       pred.urem.if7:230; CHECK-NEXT:    [[TMP19:%.*]] = urem i32 [[A]], [[C]]231; CHECK-NEXT:    [[TMP20:%.*]] = insertelement <8 x i32> [[TMP17]], i32 [[TMP19]], i32 4232; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE8]]233; CHECK:       pred.urem.continue8:234; CHECK-NEXT:    [[TMP21:%.*]] = phi <8 x i32> [ [[TMP17]], [[PRED_UREM_CONTINUE6]] ], [ [[TMP20]], [[PRED_UREM_IF7]] ]235; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <8 x i1> [[TMP1]], i32 5236; CHECK-NEXT:    br i1 [[TMP22]], label [[PRED_UREM_IF9:%.*]], label [[PRED_UREM_CONTINUE10:%.*]]237; CHECK:       pred.urem.if9:238; CHECK-NEXT:    [[TMP23:%.*]] = urem i32 [[A]], [[C]]239; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <8 x i32> [[TMP21]], i32 [[TMP23]], i32 5240; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE10]]241; CHECK:       pred.urem.continue10:242; CHECK-NEXT:    [[TMP25:%.*]] = phi <8 x i32> [ [[TMP21]], [[PRED_UREM_CONTINUE8]] ], [ [[TMP24]], [[PRED_UREM_IF9]] ]243; CHECK-NEXT:    [[TMP26:%.*]] = extractelement <8 x i1> [[TMP1]], i32 6244; CHECK-NEXT:    br i1 [[TMP26]], label [[PRED_UREM_IF11:%.*]], label [[PRED_UREM_CONTINUE12:%.*]]245; CHECK:       pred.urem.if11:246; CHECK-NEXT:    [[TMP27:%.*]] = urem i32 [[A]], [[C]]247; CHECK-NEXT:    [[TMP28:%.*]] = insertelement <8 x i32> [[TMP25]], i32 [[TMP27]], i32 6248; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE12]]249; CHECK:       pred.urem.continue12:250; CHECK-NEXT:    [[TMP29:%.*]] = phi <8 x i32> [ [[TMP25]], [[PRED_UREM_CONTINUE10]] ], [ [[TMP28]], [[PRED_UREM_IF11]] ]251; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <8 x i1> [[TMP1]], i32 7252; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_UREM_IF13:%.*]], label [[PRED_UREM_CONTINUE14:%.*]]253; CHECK:       pred.urem.if13:254; CHECK-NEXT:    [[TMP31:%.*]] = urem i32 [[A]], [[C]]255; CHECK-NEXT:    [[TMP32:%.*]] = insertelement <8 x i32> [[TMP29]], i32 [[TMP31]], i32 7256; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE14]]257; CHECK:       pred.urem.continue14:258; CHECK-NEXT:    [[TMP33:%.*]] = phi <8 x i32> [ [[TMP29]], [[PRED_UREM_CONTINUE12]] ], [ [[TMP32]], [[PRED_UREM_IF13]] ]259; CHECK-NEXT:    [[TMP34:%.*]] = sub <8 x i32> zeroinitializer, [[TMP33]]260; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <8 x i1> [[TMP1]], i32 0261; CHECK-NEXT:    br i1 [[TMP35]], label [[PRED_UDIV_IF:%.*]], label [[PRED_UDIV_CONTINUE:%.*]]262; CHECK:       pred.udiv.if:263; CHECK-NEXT:    [[TMP36:%.*]] = udiv i32 [[C]], [[D:%.*]]264; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <8 x i32> poison, i32 [[TMP36]], i32 0265; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE]]266; CHECK:       pred.udiv.continue:267; CHECK-NEXT:    [[TMP38:%.*]] = phi <8 x i32> [ poison, [[PRED_UREM_CONTINUE14]] ], [ [[TMP37]], [[PRED_UDIV_IF]] ]268; CHECK-NEXT:    [[TMP39:%.*]] = extractelement <8 x i1> [[TMP1]], i32 1269; CHECK-NEXT:    br i1 [[TMP39]], label [[PRED_UDIV_IF15:%.*]], label [[PRED_UDIV_CONTINUE16:%.*]]270; CHECK:       pred.udiv.if15:271; CHECK-NEXT:    [[TMP40:%.*]] = udiv i32 [[C]], [[D]]272; CHECK-NEXT:    [[TMP41:%.*]] = insertelement <8 x i32> [[TMP38]], i32 [[TMP40]], i32 1273; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE16]]274; CHECK:       pred.udiv.continue16:275; CHECK-NEXT:    [[TMP42:%.*]] = phi <8 x i32> [ [[TMP38]], [[PRED_UDIV_CONTINUE]] ], [ [[TMP41]], [[PRED_UDIV_IF15]] ]276; CHECK-NEXT:    [[TMP43:%.*]] = extractelement <8 x i1> [[TMP1]], i32 2277; CHECK-NEXT:    br i1 [[TMP43]], label [[PRED_UDIV_IF17:%.*]], label [[PRED_UDIV_CONTINUE18:%.*]]278; CHECK:       pred.udiv.if17:279; CHECK-NEXT:    [[TMP44:%.*]] = udiv i32 [[C]], [[D]]280; CHECK-NEXT:    [[TMP45:%.*]] = insertelement <8 x i32> [[TMP42]], i32 [[TMP44]], i32 2281; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE18]]282; CHECK:       pred.udiv.continue18:283; CHECK-NEXT:    [[TMP46:%.*]] = phi <8 x i32> [ [[TMP42]], [[PRED_UDIV_CONTINUE16]] ], [ [[TMP45]], [[PRED_UDIV_IF17]] ]284; CHECK-NEXT:    [[TMP47:%.*]] = extractelement <8 x i1> [[TMP1]], i32 3285; CHECK-NEXT:    br i1 [[TMP47]], label [[PRED_UDIV_IF19:%.*]], label [[PRED_UDIV_CONTINUE20:%.*]]286; CHECK:       pred.udiv.if19:287; CHECK-NEXT:    [[TMP48:%.*]] = udiv i32 [[C]], [[D]]288; CHECK-NEXT:    [[TMP49:%.*]] = insertelement <8 x i32> [[TMP46]], i32 [[TMP48]], i32 3289; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE20]]290; CHECK:       pred.udiv.continue20:291; CHECK-NEXT:    [[TMP50:%.*]] = phi <8 x i32> [ [[TMP46]], [[PRED_UDIV_CONTINUE18]] ], [ [[TMP49]], [[PRED_UDIV_IF19]] ]292; CHECK-NEXT:    [[TMP51:%.*]] = extractelement <8 x i1> [[TMP1]], i32 4293; CHECK-NEXT:    br i1 [[TMP51]], label [[PRED_UDIV_IF21:%.*]], label [[PRED_UDIV_CONTINUE22:%.*]]294; CHECK:       pred.udiv.if21:295; CHECK-NEXT:    [[TMP52:%.*]] = udiv i32 [[C]], [[D]]296; CHECK-NEXT:    [[TMP53:%.*]] = insertelement <8 x i32> [[TMP50]], i32 [[TMP52]], i32 4297; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE22]]298; CHECK:       pred.udiv.continue22:299; CHECK-NEXT:    [[TMP54:%.*]] = phi <8 x i32> [ [[TMP50]], [[PRED_UDIV_CONTINUE20]] ], [ [[TMP53]], [[PRED_UDIV_IF21]] ]300; CHECK-NEXT:    [[TMP55:%.*]] = extractelement <8 x i1> [[TMP1]], i32 5301; CHECK-NEXT:    br i1 [[TMP55]], label [[PRED_UDIV_IF23:%.*]], label [[PRED_UDIV_CONTINUE24:%.*]]302; CHECK:       pred.udiv.if23:303; CHECK-NEXT:    [[TMP56:%.*]] = udiv i32 [[C]], [[D]]304; CHECK-NEXT:    [[TMP57:%.*]] = insertelement <8 x i32> [[TMP54]], i32 [[TMP56]], i32 5305; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE24]]306; CHECK:       pred.udiv.continue24:307; CHECK-NEXT:    [[TMP58:%.*]] = phi <8 x i32> [ [[TMP54]], [[PRED_UDIV_CONTINUE22]] ], [ [[TMP57]], [[PRED_UDIV_IF23]] ]308; CHECK-NEXT:    [[TMP59:%.*]] = extractelement <8 x i1> [[TMP1]], i32 6309; CHECK-NEXT:    br i1 [[TMP59]], label [[PRED_UDIV_IF25:%.*]], label [[PRED_UDIV_CONTINUE26:%.*]]310; CHECK:       pred.udiv.if25:311; CHECK-NEXT:    [[TMP60:%.*]] = udiv i32 [[C]], [[D]]312; CHECK-NEXT:    [[TMP61:%.*]] = insertelement <8 x i32> [[TMP58]], i32 [[TMP60]], i32 6313; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE26]]314; CHECK:       pred.udiv.continue26:315; CHECK-NEXT:    [[TMP62:%.*]] = phi <8 x i32> [ [[TMP58]], [[PRED_UDIV_CONTINUE24]] ], [ [[TMP61]], [[PRED_UDIV_IF25]] ]316; CHECK-NEXT:    [[C_1:%.*]] = extractelement <8 x i1> [[TMP1]], i32 7317; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[LOOP_LATCH]]318; CHECK:       pred.udiv.if27:319; CHECK-NEXT:    [[TMP64:%.*]] = udiv i32 [[C]], [[D]]320; CHECK-NEXT:    [[TMP65:%.*]] = insertelement <8 x i32> [[TMP62]], i32 [[TMP64]], i32 7321; CHECK-NEXT:    br label [[LOOP_LATCH]]322; CHECK:       pred.udiv.continue28:323; CHECK-NEXT:    [[TMP66:%.*]] = phi <8 x i32> [ [[TMP62]], [[PRED_UDIV_CONTINUE26]] ], [ [[TMP65]], [[IF_THEN]] ]324; CHECK-NEXT:    [[TMP67:%.*]] = or <8 x i32> [[TMP66]], [[TMP34]]325; CHECK-NEXT:    [[TMP68:%.*]] = sext <8 x i32> [[TMP67]] to <8 x i64>326; CHECK-NEXT:    [[TMP69:%.*]] = getelementptr { i64, i64, i64 }, ptr [[SRC:%.*]], <8 x i64> [[TMP68]], i32 2327; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> align 8 [[TMP69]], <8 x i1> [[TMP1]], <8 x i64> poison)328; CHECK-NEXT:    [[TMP70:%.*]] = or <8 x i64> [[WIDE_MASKED_GATHER]], [[BROADCAST_SPLAT]]329; CHECK-NEXT:    [[PREDPHI:%.*]] = select <8 x i1> [[TMP1]], <8 x i64> [[TMP70]], <8 x i64> zeroinitializer330; CHECK-NEXT:    [[IV_NEXT]] = add nuw i32 [[IV]], 8331; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <8 x i32> [[VEC_IND]], splat (i32 8)332; CHECK-NEXT:    [[TMP71:%.*]] = icmp eq i32 [[IV_NEXT]], [[N_VEC]]333; CHECK-NEXT:    br i1 [[TMP71]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP4:![0-9]+]]334; CHECK:       middle.block:335; CHECK-NEXT:    [[TMP72:%.*]] = extractelement <8 x i64> [[PREDPHI]], i32 7336; CHECK-NEXT:    [[CMP_N:%.*]] = icmp eq i32 [[TMP63]], [[N_VEC]]337; CHECK-NEXT:    br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]338; CHECK:       scalar.ph:339; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY1:%.*]] ]340; CHECK-NEXT:    br label [[LOOP_HEADER1:%.*]]341; CHECK:       loop.header:342; CHECK-NEXT:    [[IV1:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT1:%.*]], [[LOOP_LATCH1:%.*]] ]343; CHECK-NEXT:    [[C_2:%.*]] = icmp slt i32 [[IV1]], 0344; CHECK-NEXT:    br i1 [[C_2]], label [[IF_THEN1:%.*]], label [[LOOP_LATCH1]]345; CHECK:       if.then:346; CHECK-NEXT:    [[TMP0:%.*]] = urem i32 [[A]], [[C]]347; CHECK-NEXT:    [[MUL:%.*]] = sub i32 0, [[TMP0]]348; CHECK-NEXT:    [[DIV:%.*]] = udiv i32 [[C]], [[D]]349; CHECK-NEXT:    [[OR:%.*]] = or i32 [[DIV]], [[MUL]]350; CHECK-NEXT:    [[EXT:%.*]] = sext i32 [[OR]] to i64351; CHECK-NEXT:    [[GEP:%.*]] = getelementptr { i64, i64, i64 }, ptr [[SRC]], i64 [[EXT]], i32 2352; CHECK-NEXT:    [[L:%.*]] = load i64, ptr [[GEP]], align 8353; CHECK-NEXT:    [[OR_2:%.*]] = or i64 [[L]], [[B]]354; CHECK-NEXT:    br label [[LOOP_LATCH1]]355; CHECK:       loop.latch:356; CHECK-NEXT:    [[RES:%.*]] = phi i64 [ 0, [[LOOP_HEADER1]] ], [ [[OR_2]], [[IF_THEN1]] ]357; CHECK-NEXT:    [[IV_NEXT1]] = add i32 [[IV1]], 1358; CHECK-NEXT:    [[EC:%.*]] = icmp ult i32 [[IV1]], [[C]]359; CHECK-NEXT:    br i1 [[EC]], label [[LOOP_HEADER1]], label [[EXIT]], !llvm.loop [[LOOP5:![0-9]+]]360; CHECK:       exit:361; CHECK-NEXT:    [[RES_LCSSA:%.*]] = phi i64 [ [[RES]], [[LOOP_LATCH1]] ], [ [[TMP72]], [[MIDDLE_BLOCK]] ]362; CHECK-NEXT:    ret i64 [[RES_LCSSA]]363;364entry:365  br label %loop.header366 367loop.header:368  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]369  %c.1 = icmp slt i32 %iv, 0370  br i1 %c.1, label %if.then, label %loop.latch371 372if.then:373  %1 = urem i32 %a, %c374  %mul = sub i32 0, %1375  %div = udiv i32 %c, %d376  %or = or i32 %div, %mul377  %ext = sext i32 %or to i64378  %gep = getelementptr { i64, i64, i64 }, ptr %src, i64 %ext, i32 2379  %l = load i64, ptr %gep, align 8380  %or.2 = or i64 %l, %b381  br label %loop.latch382 383loop.latch:384  %res = phi i64 [ 0, %loop.header ], [ %or.2, %if.then ]385  %iv.next = add i32 %iv, 1386  %ec = icmp ult i32 %iv, %c387  br i1 %ec, label %loop.header, label %exit388 389exit:390  ret i64 %res391}392 393define void @cost_duplicate_recipe_for_sinking(ptr %A, i64 %N) #2 {394; CHECK-LABEL: @cost_duplicate_recipe_for_sinking(395; CHECK-NEXT:  iter.check:396; CHECK-NEXT:    [[TMP0:%.*]] = add i64 [[N:%.*]], 1397; CHECK-NEXT:    [[MIN_ITERS_CHECK:%.*]] = icmp ule i64 [[TMP0]], 4398; CHECK-NEXT:    br i1 [[MIN_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]]399; CHECK:       vector.main.loop.iter.check:400; CHECK-NEXT:    [[MIN_ITERS_CHECK1:%.*]] = icmp ule i64 [[TMP0]], 16401; CHECK-NEXT:    br i1 [[MIN_ITERS_CHECK1]], label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]402; CHECK:       vector.ph:403; CHECK-NEXT:    [[N_MOD_VF:%.*]] = urem i64 [[TMP0]], 16404; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i64 [[N_MOD_VF]], 0405; CHECK-NEXT:    [[TMP2:%.*]] = select i1 [[TMP1]], i64 16, i64 [[N_MOD_VF]]406; CHECK-NEXT:    [[N_VEC:%.*]] = sub i64 [[TMP0]], [[TMP2]]407; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]408; CHECK:       vector.body:409; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_STORE_CONTINUE37:%.*]] ]410; CHECK-NEXT:    [[TMP4:%.*]] = add i64 [[INDEX]], 4411; CHECK-NEXT:    [[TMP5:%.*]] = add i64 [[INDEX]], 8412; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[INDEX]], 12413; CHECK-NEXT:    [[TMP7:%.*]] = shl nsw i64 [[INDEX]], 2414; CHECK-NEXT:    [[TMP8:%.*]] = shl nsw i64 [[TMP4]], 2415; CHECK-NEXT:    [[TMP9:%.*]] = shl nsw i64 [[TMP5]], 2416; CHECK-NEXT:    [[TMP10:%.*]] = shl nsw i64 [[TMP6]], 2417; CHECK-NEXT:    [[TMP11:%.*]] = getelementptr nusw double, ptr [[A:%.*]], i64 [[TMP7]]418; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr nusw double, ptr [[A]], i64 [[TMP8]]419; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr nusw double, ptr [[A]], i64 [[TMP9]]420; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr nusw double, ptr [[A]], i64 [[TMP10]]421; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <16 x double>, ptr [[TMP11]], align 8422; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <16 x double> [[WIDE_VEC]], <16 x double> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>423; CHECK-NEXT:    [[WIDE_VEC1:%.*]] = load <16 x double>, ptr [[TMP12]], align 8424; CHECK-NEXT:    [[STRIDED_VEC4:%.*]] = shufflevector <16 x double> [[WIDE_VEC1]], <16 x double> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>425; CHECK-NEXT:    [[WIDE_VEC2:%.*]] = load <16 x double>, ptr [[TMP13]], align 8426; CHECK-NEXT:    [[STRIDED_VEC5:%.*]] = shufflevector <16 x double> [[WIDE_VEC2]], <16 x double> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>427; CHECK-NEXT:    [[WIDE_VEC3:%.*]] = load <16 x double>, ptr [[TMP14]], align 8428; CHECK-NEXT:    [[STRIDED_VEC6:%.*]] = shufflevector <16 x double> [[WIDE_VEC3]], <16 x double> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>429; CHECK-NEXT:    [[TMP19:%.*]] = fcmp oeq <4 x double> [[STRIDED_VEC]], zeroinitializer430; CHECK-NEXT:    [[TMP20:%.*]] = fcmp oeq <4 x double> [[STRIDED_VEC4]], zeroinitializer431; CHECK-NEXT:    [[TMP21:%.*]] = fcmp oeq <4 x double> [[STRIDED_VEC5]], zeroinitializer432; CHECK-NEXT:    [[TMP22:%.*]] = fcmp oeq <4 x double> [[STRIDED_VEC6]], zeroinitializer433; CHECK-NEXT:    [[TMP23:%.*]] = extractelement <4 x i1> [[TMP19]], i32 0434; CHECK-NEXT:    br i1 [[TMP23]], label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]435; CHECK:       pred.store.if:436; CHECK-NEXT:    [[TMP3:%.*]] = add i64 [[INDEX]], 0437; CHECK-NEXT:    [[TMP24:%.*]] = shl nsw i64 [[TMP3]], 2438; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP24]]439; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP25]], align 8440; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE]]441; CHECK:       pred.store.continue:442; CHECK-NEXT:    [[TMP26:%.*]] = extractelement <4 x i1> [[TMP19]], i32 1443; CHECK-NEXT:    br i1 [[TMP26]], label [[PRED_STORE_IF8:%.*]], label [[PRED_STORE_CONTINUE9:%.*]]444; CHECK:       pred.store.if8:445; CHECK-NEXT:    [[TMP27:%.*]] = add i64 [[INDEX]], 1446; CHECK-NEXT:    [[TMP28:%.*]] = shl nsw i64 [[TMP27]], 2447; CHECK-NEXT:    [[TMP29:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP28]]448; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP29]], align 8449; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE9]]450; CHECK:       pred.store.continue9:451; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP19]], i32 2452; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_STORE_IF10:%.*]], label [[PRED_STORE_CONTINUE11:%.*]]453; CHECK:       pred.store.if10:454; CHECK-NEXT:    [[TMP31:%.*]] = add i64 [[INDEX]], 2455; CHECK-NEXT:    [[TMP32:%.*]] = shl nsw i64 [[TMP31]], 2456; CHECK-NEXT:    [[TMP33:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP32]]457; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP33]], align 8458; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE11]]459; CHECK:       pred.store.continue11:460; CHECK-NEXT:    [[TMP34:%.*]] = extractelement <4 x i1> [[TMP19]], i32 3461; CHECK-NEXT:    br i1 [[TMP34]], label [[PRED_STORE_IF12:%.*]], label [[PRED_STORE_CONTINUE13:%.*]]462; CHECK:       pred.store.if12:463; CHECK-NEXT:    [[TMP35:%.*]] = add i64 [[INDEX]], 3464; CHECK-NEXT:    [[TMP36:%.*]] = shl nsw i64 [[TMP35]], 2465; CHECK-NEXT:    [[TMP37:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP36]]466; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP37]], align 8467; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE13]]468; CHECK:       pred.store.continue13:469; CHECK-NEXT:    [[TMP38:%.*]] = extractelement <4 x i1> [[TMP20]], i32 0470; CHECK-NEXT:    br i1 [[TMP38]], label [[PRED_STORE_IF14:%.*]], label [[PRED_STORE_CONTINUE15:%.*]]471; CHECK:       pred.store.if14:472; CHECK-NEXT:    [[TMP88:%.*]] = add i64 [[INDEX]], 4473; CHECK-NEXT:    [[TMP39:%.*]] = shl nsw i64 [[TMP88]], 2474; CHECK-NEXT:    [[TMP40:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP39]]475; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP40]], align 8476; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE15]]477; CHECK:       pred.store.continue15:478; CHECK-NEXT:    [[TMP41:%.*]] = extractelement <4 x i1> [[TMP20]], i32 1479; CHECK-NEXT:    br i1 [[TMP41]], label [[PRED_STORE_IF16:%.*]], label [[PRED_STORE_CONTINUE17:%.*]]480; CHECK:       pred.store.if16:481; CHECK-NEXT:    [[TMP42:%.*]] = add i64 [[INDEX]], 5482; CHECK-NEXT:    [[TMP43:%.*]] = shl nsw i64 [[TMP42]], 2483; CHECK-NEXT:    [[TMP44:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP43]]484; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP44]], align 8485; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE17]]486; CHECK:       pred.store.continue17:487; CHECK-NEXT:    [[TMP45:%.*]] = extractelement <4 x i1> [[TMP20]], i32 2488; CHECK-NEXT:    br i1 [[TMP45]], label [[PRED_STORE_IF18:%.*]], label [[PRED_STORE_CONTINUE19:%.*]]489; CHECK:       pred.store.if18:490; CHECK-NEXT:    [[TMP46:%.*]] = add i64 [[INDEX]], 6491; CHECK-NEXT:    [[TMP47:%.*]] = shl nsw i64 [[TMP46]], 2492; CHECK-NEXT:    [[TMP48:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP47]]493; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP48]], align 8494; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE19]]495; CHECK:       pred.store.continue19:496; CHECK-NEXT:    [[TMP49:%.*]] = extractelement <4 x i1> [[TMP20]], i32 3497; CHECK-NEXT:    br i1 [[TMP49]], label [[PRED_STORE_IF20:%.*]], label [[PRED_STORE_CONTINUE21:%.*]]498; CHECK:       pred.store.if20:499; CHECK-NEXT:    [[TMP50:%.*]] = add i64 [[INDEX]], 7500; CHECK-NEXT:    [[TMP51:%.*]] = shl nsw i64 [[TMP50]], 2501; CHECK-NEXT:    [[TMP52:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP51]]502; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP52]], align 8503; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE21]]504; CHECK:       pred.store.continue21:505; CHECK-NEXT:    [[TMP53:%.*]] = extractelement <4 x i1> [[TMP21]], i32 0506; CHECK-NEXT:    br i1 [[TMP53]], label [[PRED_STORE_IF22:%.*]], label [[PRED_STORE_CONTINUE23:%.*]]507; CHECK:       pred.store.if22:508; CHECK-NEXT:    [[TMP107:%.*]] = add i64 [[INDEX]], 8509; CHECK-NEXT:    [[TMP54:%.*]] = shl nsw i64 [[TMP107]], 2510; CHECK-NEXT:    [[TMP55:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP54]]511; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP55]], align 8512; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE23]]513; CHECK:       pred.store.continue23:514; CHECK-NEXT:    [[TMP56:%.*]] = extractelement <4 x i1> [[TMP21]], i32 1515; CHECK-NEXT:    br i1 [[TMP56]], label [[PRED_STORE_IF24:%.*]], label [[PRED_STORE_CONTINUE25:%.*]]516; CHECK:       pred.store.if24:517; CHECK-NEXT:    [[TMP57:%.*]] = add i64 [[INDEX]], 9518; CHECK-NEXT:    [[TMP58:%.*]] = shl nsw i64 [[TMP57]], 2519; CHECK-NEXT:    [[TMP59:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP58]]520; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP59]], align 8521; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE25]]522; CHECK:       pred.store.continue25:523; CHECK-NEXT:    [[TMP60:%.*]] = extractelement <4 x i1> [[TMP21]], i32 2524; CHECK-NEXT:    br i1 [[TMP60]], label [[PRED_STORE_IF26:%.*]], label [[PRED_STORE_CONTINUE27:%.*]]525; CHECK:       pred.store.if26:526; CHECK-NEXT:    [[TMP61:%.*]] = add i64 [[INDEX]], 10527; CHECK-NEXT:    [[TMP62:%.*]] = shl nsw i64 [[TMP61]], 2528; CHECK-NEXT:    [[TMP63:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP62]]529; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP63]], align 8530; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE27]]531; CHECK:       pred.store.continue27:532; CHECK-NEXT:    [[TMP64:%.*]] = extractelement <4 x i1> [[TMP21]], i32 3533; CHECK-NEXT:    br i1 [[TMP64]], label [[PRED_STORE_IF28:%.*]], label [[PRED_STORE_CONTINUE29:%.*]]534; CHECK:       pred.store.if28:535; CHECK-NEXT:    [[TMP65:%.*]] = add i64 [[INDEX]], 11536; CHECK-NEXT:    [[TMP66:%.*]] = shl nsw i64 [[TMP65]], 2537; CHECK-NEXT:    [[TMP67:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP66]]538; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP67]], align 8539; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE29]]540; CHECK:       pred.store.continue29:541; CHECK-NEXT:    [[TMP68:%.*]] = extractelement <4 x i1> [[TMP22]], i32 0542; CHECK-NEXT:    br i1 [[TMP68]], label [[PRED_STORE_IF30:%.*]], label [[PRED_STORE_CONTINUE31:%.*]]543; CHECK:       pred.store.if30:544; CHECK-NEXT:    [[TMP108:%.*]] = add i64 [[INDEX]], 12545; CHECK-NEXT:    [[TMP69:%.*]] = shl nsw i64 [[TMP108]], 2546; CHECK-NEXT:    [[TMP70:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP69]]547; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP70]], align 8548; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE31]]549; CHECK:       pred.store.continue31:550; CHECK-NEXT:    [[TMP71:%.*]] = extractelement <4 x i1> [[TMP22]], i32 1551; CHECK-NEXT:    br i1 [[TMP71]], label [[PRED_STORE_IF32:%.*]], label [[PRED_STORE_CONTINUE33:%.*]]552; CHECK:       pred.store.if32:553; CHECK-NEXT:    [[TMP72:%.*]] = add i64 [[INDEX]], 13554; CHECK-NEXT:    [[TMP73:%.*]] = shl nsw i64 [[TMP72]], 2555; CHECK-NEXT:    [[TMP74:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP73]]556; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP74]], align 8557; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE33]]558; CHECK:       pred.store.continue33:559; CHECK-NEXT:    [[TMP75:%.*]] = extractelement <4 x i1> [[TMP22]], i32 2560; CHECK-NEXT:    br i1 [[TMP75]], label [[PRED_STORE_IF34:%.*]], label [[PRED_STORE_CONTINUE35:%.*]]561; CHECK:       pred.store.if34:562; CHECK-NEXT:    [[TMP76:%.*]] = add i64 [[INDEX]], 14563; CHECK-NEXT:    [[TMP77:%.*]] = shl nsw i64 [[TMP76]], 2564; CHECK-NEXT:    [[TMP78:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP77]]565; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP78]], align 8566; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE35]]567; CHECK:       pred.store.continue35:568; CHECK-NEXT:    [[TMP79:%.*]] = extractelement <4 x i1> [[TMP22]], i32 3569; CHECK-NEXT:    br i1 [[TMP79]], label [[PRED_STORE_IF36:%.*]], label [[PRED_STORE_CONTINUE37]]570; CHECK:       pred.store.if36:571; CHECK-NEXT:    [[TMP80:%.*]] = add i64 [[INDEX]], 15572; CHECK-NEXT:    [[TMP81:%.*]] = shl nsw i64 [[TMP80]], 2573; CHECK-NEXT:    [[TMP82:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP81]]574; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP82]], align 8575; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE37]]576; CHECK:       pred.store.continue37:577; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 16578; CHECK-NEXT:    [[TMP83:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]579; CHECK-NEXT:    br i1 [[TMP83]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]580; CHECK:       middle.block:581; CHECK-NEXT:    br label [[VEC_EPILOG_ITER_CHECK:%.*]]582; CHECK:       vec.epilog.iter.check:583; CHECK-NEXT:    [[MIN_EPILOG_ITERS_CHECK:%.*]] = icmp ule i64 [[TMP2]], 4584; CHECK-NEXT:    br i1 [[MIN_EPILOG_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]], !prof [[PROF7:![0-9]+]]585; CHECK:       vec.epilog.ph:586; CHECK-NEXT:    [[VEC_EPILOG_RESUME_VAL1:%.*]] = phi i64 [ [[N_VEC]], [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]587; CHECK-NEXT:    [[N_MOD_VF38:%.*]] = urem i64 [[TMP0]], 4588; CHECK-NEXT:    [[TMP84:%.*]] = icmp eq i64 [[N_MOD_VF38]], 0589; CHECK-NEXT:    [[TMP85:%.*]] = select i1 [[TMP84]], i64 4, i64 [[N_MOD_VF38]]590; CHECK-NEXT:    [[N_VEC39:%.*]] = sub i64 [[TMP0]], [[TMP85]]591; CHECK-NEXT:    br label [[VEC_EPILOG_VECTOR_BODY:%.*]]592; CHECK:       vec.epilog.vector.body:593; CHECK-NEXT:    [[INDEX40:%.*]] = phi i64 [ [[VEC_EPILOG_RESUME_VAL1]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT51:%.*]], [[PRED_STORE_CONTINUE50:%.*]] ]594; CHECK-NEXT:    [[TMP87:%.*]] = shl nsw i64 [[INDEX40]], 2595; CHECK-NEXT:    [[TMP89:%.*]] = getelementptr nusw double, ptr [[A]], i64 [[TMP87]]596; CHECK-NEXT:    [[WIDE_VEC41:%.*]] = load <16 x double>, ptr [[TMP89]], align 8597; CHECK-NEXT:    [[STRIDED_VEC42:%.*]] = shufflevector <16 x double> [[WIDE_VEC41]], <16 x double> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>598; CHECK-NEXT:    [[TMP90:%.*]] = fcmp oeq <4 x double> [[STRIDED_VEC42]], zeroinitializer599; CHECK-NEXT:    [[TMP91:%.*]] = extractelement <4 x i1> [[TMP90]], i32 0600; CHECK-NEXT:    br i1 [[TMP91]], label [[PRED_STORE_IF43:%.*]], label [[PRED_STORE_CONTINUE44:%.*]]601; CHECK:       pred.store.if43:602; CHECK-NEXT:    [[TMP86:%.*]] = add i64 [[INDEX40]], 0603; CHECK-NEXT:    [[TMP92:%.*]] = shl nsw i64 [[TMP86]], 2604; CHECK-NEXT:    [[TMP93:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP92]]605; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP93]], align 8606; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE44]]607; CHECK:       pred.store.continue44:608; CHECK-NEXT:    [[TMP94:%.*]] = extractelement <4 x i1> [[TMP90]], i32 1609; CHECK-NEXT:    br i1 [[TMP94]], label [[PRED_STORE_IF45:%.*]], label [[PRED_STORE_CONTINUE46:%.*]]610; CHECK:       pred.store.if45:611; CHECK-NEXT:    [[TMP95:%.*]] = add i64 [[INDEX40]], 1612; CHECK-NEXT:    [[TMP96:%.*]] = shl nsw i64 [[TMP95]], 2613; CHECK-NEXT:    [[TMP97:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP96]]614; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP97]], align 8615; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE46]]616; CHECK:       pred.store.continue46:617; CHECK-NEXT:    [[TMP98:%.*]] = extractelement <4 x i1> [[TMP90]], i32 2618; CHECK-NEXT:    br i1 [[TMP98]], label [[PRED_STORE_IF47:%.*]], label [[PRED_STORE_CONTINUE48:%.*]]619; CHECK:       pred.store.if47:620; CHECK-NEXT:    [[TMP99:%.*]] = add i64 [[INDEX40]], 2621; CHECK-NEXT:    [[TMP100:%.*]] = shl nsw i64 [[TMP99]], 2622; CHECK-NEXT:    [[TMP101:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP100]]623; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP101]], align 8624; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE48]]625; CHECK:       pred.store.continue48:626; CHECK-NEXT:    [[TMP102:%.*]] = extractelement <4 x i1> [[TMP90]], i32 3627; CHECK-NEXT:    br i1 [[TMP102]], label [[PRED_STORE_IF49:%.*]], label [[PRED_STORE_CONTINUE50]]628; CHECK:       pred.store.if49:629; CHECK-NEXT:    [[TMP103:%.*]] = add i64 [[INDEX40]], 3630; CHECK-NEXT:    [[TMP104:%.*]] = shl nsw i64 [[TMP103]], 2631; CHECK-NEXT:    [[TMP105:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP104]]632; CHECK-NEXT:    store double 0.000000e+00, ptr [[TMP105]], align 8633; CHECK-NEXT:    br label [[PRED_STORE_CONTINUE50]]634; CHECK:       pred.store.continue50:635; CHECK-NEXT:    [[INDEX_NEXT51]] = add nuw i64 [[INDEX40]], 4636; CHECK-NEXT:    [[TMP106:%.*]] = icmp eq i64 [[INDEX_NEXT51]], [[N_VEC39]]637; CHECK-NEXT:    br i1 [[TMP106]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]638; CHECK:       vec.epilog.middle.block:639; CHECK-NEXT:    br label [[VEC_EPILOG_SCALAR_PH]]640; CHECK:       vec.epilog.scalar.ph:641; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC39]], [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ [[N_VEC]], [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[ITER_CHECK:%.*]] ]642; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]643; CHECK:       loop.header:644; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]645; CHECK-NEXT:    [[IV_SHL:%.*]] = shl nsw i64 [[IV]], 2646; CHECK-NEXT:    [[GEP_0:%.*]] = getelementptr nusw double, ptr [[A]], i64 [[IV_SHL]]647; CHECK-NEXT:    [[L:%.*]] = load double, ptr [[GEP_0]], align 8648; CHECK-NEXT:    [[C:%.*]] = fcmp oeq double [[L]], 0.000000e+00649; CHECK-NEXT:    br i1 [[C]], label [[IF_THEN:%.*]], label [[LOOP_LATCH]]650; CHECK:       if.then:651; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr double, ptr [[A]], i64 [[IV_SHL]]652; CHECK-NEXT:    store double 0.000000e+00, ptr [[GEP_1]], align 8653; CHECK-NEXT:    br label [[LOOP_LATCH]]654; CHECK:       loop.latch:655; CHECK-NEXT:    [[IV_NEXT]] = add nsw i64 [[IV]], 1656; CHECK-NEXT:    [[EC:%.*]] = icmp eq i64 [[IV]], [[N]]657; CHECK-NEXT:    br i1 [[EC]], label [[EXIT:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP9:![0-9]+]]658; CHECK:       exit:659; CHECK-NEXT:    ret void660;661entry:662  br label %loop.header663 664loop.header:665  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]666  %iv.shl = shl nsw i64 %iv, 2667  %gep.0 = getelementptr nusw double, ptr %A, i64 %iv.shl668  %l = load double, ptr %gep.0, align 8669  %c = fcmp oeq double %l, 0.000000e+00670  br i1 %c, label %if.then, label %loop.latch671 672if.then:673  %gep.1 = getelementptr double, ptr %A, i64 %iv.shl674  store double 0.000000e+00, ptr %gep.1, align 8675  br label %loop.latch676 677loop.latch:678  %iv.next = add nsw i64 %iv, 1679  %ec = icmp eq i64 %iv, %N680  br i1 %ec, label %exit, label %loop.header681 682exit:683  ret void684}685 686; Test for https://github.com/llvm/llvm-project/issues/129236.687define i32 @cost_ashr_with_op_known_invariant_via_scev(i8 %a) {688; CHECK-LABEL: @cost_ashr_with_op_known_invariant_via_scev(689; CHECK-NEXT:  iter.check:690; CHECK-NEXT:    [[CMP_I:%.*]] = icmp eq i16 0, 0691; CHECK-NEXT:    [[CONV_I:%.*]] = sext i16 0 to i32692; CHECK-NEXT:    [[CONV5_I:%.*]] = sext i8 [[A:%.*]] to i32693; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]]694; CHECK:       vector.main.loop.iter.check:695; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]696; CHECK:       vector.ph:697; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <32 x i1> poison, i1 [[CMP_I]], i64 0698; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <32 x i1> [[BROADCAST_SPLATINSERT]], <32 x i1> poison, <32 x i32> zeroinitializer699; CHECK-NEXT:    [[TMP60:%.*]] = xor <32 x i1> [[BROADCAST_SPLAT]], splat (i1 true)700; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]701; CHECK:       vector.body:702; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_UREM_CONTINUE62:%.*]] ]703; CHECK-NEXT:    [[TMP61:%.*]] = extractelement <32 x i1> [[TMP60]], i32 0704; CHECK-NEXT:    br i1 [[TMP61]], label [[PRED_UREM_IF:%.*]], label [[PRED_UREM_CONTINUE:%.*]]705; CHECK:       pred.urem.if:706; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE]]707; CHECK:       pred.urem.continue:708; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <32 x i1> [[TMP60]], i32 1709; CHECK-NEXT:    br i1 [[TMP2]], label [[PRED_UREM_IF1:%.*]], label [[PRED_UREM_CONTINUE2:%.*]]710; CHECK:       pred.urem.if1:711; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE2]]712; CHECK:       pred.urem.continue2:713; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <32 x i1> [[TMP60]], i32 2714; CHECK-NEXT:    br i1 [[TMP3]], label [[PRED_UREM_IF3:%.*]], label [[PRED_UREM_CONTINUE4:%.*]]715; CHECK:       pred.urem.if3:716; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE4]]717; CHECK:       pred.urem.continue4:718; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <32 x i1> [[TMP60]], i32 3719; CHECK-NEXT:    br i1 [[TMP4]], label [[PRED_UREM_IF5:%.*]], label [[PRED_UREM_CONTINUE6:%.*]]720; CHECK:       pred.urem.if5:721; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE6]]722; CHECK:       pred.urem.continue6:723; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <32 x i1> [[TMP60]], i32 4724; CHECK-NEXT:    br i1 [[TMP5]], label [[PRED_UREM_IF7:%.*]], label [[PRED_UREM_CONTINUE8:%.*]]725; CHECK:       pred.urem.if7:726; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE8]]727; CHECK:       pred.urem.continue8:728; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <32 x i1> [[TMP60]], i32 5729; CHECK-NEXT:    br i1 [[TMP6]], label [[PRED_UREM_IF9:%.*]], label [[PRED_UREM_CONTINUE10:%.*]]730; CHECK:       pred.urem.if9:731; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE10]]732; CHECK:       pred.urem.continue10:733; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <32 x i1> [[TMP60]], i32 6734; CHECK-NEXT:    br i1 [[TMP7]], label [[PRED_UREM_IF11:%.*]], label [[PRED_UREM_CONTINUE12:%.*]]735; CHECK:       pred.urem.if11:736; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE12]]737; CHECK:       pred.urem.continue12:738; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <32 x i1> [[TMP60]], i32 7739; CHECK-NEXT:    br i1 [[TMP8]], label [[PRED_UREM_IF13:%.*]], label [[PRED_UREM_CONTINUE14:%.*]]740; CHECK:       pred.urem.if13:741; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE14]]742; CHECK:       pred.urem.continue14:743; CHECK-NEXT:    [[TMP9:%.*]] = extractelement <32 x i1> [[TMP60]], i32 8744; CHECK-NEXT:    br i1 [[TMP9]], label [[PRED_UREM_IF15:%.*]], label [[PRED_UREM_CONTINUE16:%.*]]745; CHECK:       pred.urem.if15:746; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE16]]747; CHECK:       pred.urem.continue16:748; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <32 x i1> [[TMP60]], i32 9749; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_UREM_IF17:%.*]], label [[PRED_UREM_CONTINUE18:%.*]]750; CHECK:       pred.urem.if17:751; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE18]]752; CHECK:       pred.urem.continue18:753; CHECK-NEXT:    [[TMP11:%.*]] = extractelement <32 x i1> [[TMP60]], i32 10754; CHECK-NEXT:    br i1 [[TMP11]], label [[PRED_UREM_IF19:%.*]], label [[PRED_UREM_CONTINUE20:%.*]]755; CHECK:       pred.urem.if19:756; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE20]]757; CHECK:       pred.urem.continue20:758; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <32 x i1> [[TMP60]], i32 11759; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_UREM_IF21:%.*]], label [[PRED_UREM_CONTINUE22:%.*]]760; CHECK:       pred.urem.if21:761; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE22]]762; CHECK:       pred.urem.continue22:763; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <32 x i1> [[TMP60]], i32 12764; CHECK-NEXT:    br i1 [[TMP13]], label [[PRED_UREM_IF23:%.*]], label [[PRED_UREM_CONTINUE24:%.*]]765; CHECK:       pred.urem.if23:766; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE24]]767; CHECK:       pred.urem.continue24:768; CHECK-NEXT:    [[TMP14:%.*]] = extractelement <32 x i1> [[TMP60]], i32 13769; CHECK-NEXT:    br i1 [[TMP14]], label [[PRED_UREM_IF25:%.*]], label [[PRED_UREM_CONTINUE26:%.*]]770; CHECK:       pred.urem.if25:771; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE26]]772; CHECK:       pred.urem.continue26:773; CHECK-NEXT:    [[TMP15:%.*]] = extractelement <32 x i1> [[TMP60]], i32 14774; CHECK-NEXT:    br i1 [[TMP15]], label [[PRED_UREM_IF27:%.*]], label [[PRED_UREM_CONTINUE28:%.*]]775; CHECK:       pred.urem.if27:776; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE28]]777; CHECK:       pred.urem.continue28:778; CHECK-NEXT:    [[TMP16:%.*]] = extractelement <32 x i1> [[TMP60]], i32 15779; CHECK-NEXT:    br i1 [[TMP16]], label [[PRED_UREM_IF29:%.*]], label [[PRED_UREM_CONTINUE30:%.*]]780; CHECK:       pred.urem.if29:781; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE30]]782; CHECK:       pred.urem.continue30:783; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <32 x i1> [[TMP60]], i32 16784; CHECK-NEXT:    br i1 [[TMP17]], label [[PRED_UREM_IF31:%.*]], label [[PRED_UREM_CONTINUE32:%.*]]785; CHECK:       pred.urem.if31:786; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE32]]787; CHECK:       pred.urem.continue32:788; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <32 x i1> [[TMP60]], i32 17789; CHECK-NEXT:    br i1 [[TMP18]], label [[PRED_UREM_IF33:%.*]], label [[PRED_UREM_CONTINUE34:%.*]]790; CHECK:       pred.urem.if33:791; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE34]]792; CHECK:       pred.urem.continue34:793; CHECK-NEXT:    [[TMP19:%.*]] = extractelement <32 x i1> [[TMP60]], i32 18794; CHECK-NEXT:    br i1 [[TMP19]], label [[PRED_UREM_IF35:%.*]], label [[PRED_UREM_CONTINUE36:%.*]]795; CHECK:       pred.urem.if35:796; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE36]]797; CHECK:       pred.urem.continue36:798; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <32 x i1> [[TMP60]], i32 19799; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_UREM_IF37:%.*]], label [[PRED_UREM_CONTINUE38:%.*]]800; CHECK:       pred.urem.if37:801; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE38]]802; CHECK:       pred.urem.continue38:803; CHECK-NEXT:    [[TMP21:%.*]] = extractelement <32 x i1> [[TMP60]], i32 20804; CHECK-NEXT:    br i1 [[TMP21]], label [[PRED_UREM_IF39:%.*]], label [[PRED_UREM_CONTINUE40:%.*]]805; CHECK:       pred.urem.if39:806; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE40]]807; CHECK:       pred.urem.continue40:808; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <32 x i1> [[TMP60]], i32 21809; CHECK-NEXT:    br i1 [[TMP22]], label [[PRED_UREM_IF41:%.*]], label [[PRED_UREM_CONTINUE42:%.*]]810; CHECK:       pred.urem.if41:811; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE42]]812; CHECK:       pred.urem.continue42:813; CHECK-NEXT:    [[TMP23:%.*]] = extractelement <32 x i1> [[TMP60]], i32 22814; CHECK-NEXT:    br i1 [[TMP23]], label [[PRED_UREM_IF43:%.*]], label [[PRED_UREM_CONTINUE44:%.*]]815; CHECK:       pred.urem.if43:816; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE44]]817; CHECK:       pred.urem.continue44:818; CHECK-NEXT:    [[TMP24:%.*]] = extractelement <32 x i1> [[TMP60]], i32 23819; CHECK-NEXT:    br i1 [[TMP24]], label [[PRED_UREM_IF45:%.*]], label [[PRED_UREM_CONTINUE46:%.*]]820; CHECK:       pred.urem.if45:821; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE46]]822; CHECK:       pred.urem.continue46:823; CHECK-NEXT:    [[TMP25:%.*]] = extractelement <32 x i1> [[TMP60]], i32 24824; CHECK-NEXT:    br i1 [[TMP25]], label [[PRED_UREM_IF47:%.*]], label [[PRED_UREM_CONTINUE48:%.*]]825; CHECK:       pred.urem.if47:826; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE48]]827; CHECK:       pred.urem.continue48:828; CHECK-NEXT:    [[TMP26:%.*]] = extractelement <32 x i1> [[TMP60]], i32 25829; CHECK-NEXT:    br i1 [[TMP26]], label [[PRED_UREM_IF49:%.*]], label [[PRED_UREM_CONTINUE50:%.*]]830; CHECK:       pred.urem.if49:831; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE50]]832; CHECK:       pred.urem.continue50:833; CHECK-NEXT:    [[TMP27:%.*]] = extractelement <32 x i1> [[TMP60]], i32 26834; CHECK-NEXT:    br i1 [[TMP27]], label [[PRED_UREM_IF51:%.*]], label [[PRED_UREM_CONTINUE52:%.*]]835; CHECK:       pred.urem.if51:836; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE52]]837; CHECK:       pred.urem.continue52:838; CHECK-NEXT:    [[TMP28:%.*]] = extractelement <32 x i1> [[TMP60]], i32 27839; CHECK-NEXT:    br i1 [[TMP28]], label [[PRED_UREM_IF53:%.*]], label [[PRED_UREM_CONTINUE54:%.*]]840; CHECK:       pred.urem.if53:841; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE54]]842; CHECK:       pred.urem.continue54:843; CHECK-NEXT:    [[TMP29:%.*]] = extractelement <32 x i1> [[TMP60]], i32 28844; CHECK-NEXT:    br i1 [[TMP29]], label [[PRED_UREM_IF55:%.*]], label [[PRED_UREM_CONTINUE56:%.*]]845; CHECK:       pred.urem.if55:846; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE56]]847; CHECK:       pred.urem.continue56:848; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <32 x i1> [[TMP60]], i32 29849; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_UREM_IF57:%.*]], label [[PRED_UREM_CONTINUE58:%.*]]850; CHECK:       pred.urem.if57:851; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE58]]852; CHECK:       pred.urem.continue58:853; CHECK-NEXT:    [[TMP31:%.*]] = extractelement <32 x i1> [[TMP60]], i32 30854; CHECK-NEXT:    br i1 [[TMP31]], label [[PRED_UREM_IF59:%.*]], label [[PRED_UREM_CONTINUE60:%.*]]855; CHECK:       pred.urem.if59:856; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE60]]857; CHECK:       pred.urem.continue60:858; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <32 x i1> [[TMP60]], i32 31859; CHECK-NEXT:    br i1 [[TMP32]], label [[PRED_UREM_IF61:%.*]], label [[PRED_UREM_CONTINUE62]]860; CHECK:       pred.urem.if61:861; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE62]]862; CHECK:       pred.urem.continue62:863; CHECK-NEXT:    [[TMP33:%.*]] = select <32 x i1> [[TMP60]], <32 x i1> poison, <32 x i1> zeroinitializer864; CHECK-NEXT:    [[TMP34:%.*]] = or <32 x i1> [[TMP33]], [[BROADCAST_SPLAT]]865; CHECK-NEXT:    [[PREDPHI:%.*]] = select i1 [[CMP_I]], <32 x i32> zeroinitializer, <32 x i32> poison866; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <32 x i32> [[PREDPHI]], i32 0867; CHECK-NEXT:    [[TMP36:%.*]] = ashr i32 [[CONV5_I]], [[TMP35]]868; CHECK-NEXT:    [[BROADCAST_SPLATINSERT63:%.*]] = insertelement <32 x i32> poison, i32 [[TMP36]], i64 0869; CHECK-NEXT:    [[BROADCAST_SPLAT64:%.*]] = shufflevector <32 x i32> [[BROADCAST_SPLATINSERT63]], <32 x i32> poison, <32 x i32> zeroinitializer870; CHECK-NEXT:    [[TMP37:%.*]] = icmp eq <32 x i32> [[BROADCAST_SPLAT64]], zeroinitializer871; CHECK-NEXT:    [[TMP38:%.*]] = shl <32 x i32> [[PREDPHI]], splat (i32 24)872; CHECK-NEXT:    [[TMP39:%.*]] = ashr exact <32 x i32> [[TMP38]], splat (i32 24)873; CHECK-NEXT:    [[TMP40:%.*]] = extractelement <32 x i1> [[TMP37]], i32 0874; CHECK-NEXT:    [[TMP41:%.*]] = select i1 [[TMP40]], <32 x i32> [[TMP39]], <32 x i32> zeroinitializer875; CHECK-NEXT:    [[PREDPHI65:%.*]] = select <32 x i1> [[TMP34]], <32 x i32> [[TMP41]], <32 x i32> zeroinitializer876; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 32877; CHECK-NEXT:    [[TMP42:%.*]] = icmp eq i32 [[INDEX_NEXT]], 96878; CHECK-NEXT:    br i1 [[TMP42]], label [[MIDDLE_BLOCK:%.*]], label [[LOOP_HEADER]], !llvm.loop [[LOOP10:![0-9]+]]879; CHECK:       middle.block:880; CHECK-NEXT:    [[TMP43:%.*]] = extractelement <32 x i32> [[PREDPHI65]], i32 31881; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[VEC_EPILOG_ITER_CHECK:%.*]]882; CHECK:       vec.epilog.iter.check:883; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]], !prof [[PROF11:![0-9]+]]884; CHECK:       vec.epilog.ph:885; CHECK-NEXT:    [[VEC_EPILOG_RESUME_VAL:%.*]] = phi i32 [ 96, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]886; CHECK-NEXT:    [[BROADCAST_SPLATINSERT66:%.*]] = insertelement <4 x i1> poison, i1 [[CMP_I]], i64 0887; CHECK-NEXT:    [[BROADCAST_SPLAT67:%.*]] = shufflevector <4 x i1> [[BROADCAST_SPLATINSERT66]], <4 x i1> poison, <4 x i32> zeroinitializer888; CHECK-NEXT:    [[TMP44:%.*]] = xor <4 x i1> [[BROADCAST_SPLAT67]], splat (i1 true)889; CHECK-NEXT:    br label [[VEC_EPILOG_VECTOR_BODY:%.*]]890; CHECK:       vec.epilog.vector.body:891; CHECK-NEXT:    [[INDEX68:%.*]] = phi i32 [ [[VEC_EPILOG_RESUME_VAL]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT81:%.*]], [[PRED_UREM_CONTINUE76:%.*]] ]892; CHECK-NEXT:    [[TMP45:%.*]] = extractelement <4 x i1> [[TMP44]], i32 0893; CHECK-NEXT:    br i1 [[TMP45]], label [[PRED_UREM_IF69:%.*]], label [[PRED_UREM_CONTINUE70:%.*]]894; CHECK:       pred.urem.if69:895; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE70]]896; CHECK:       pred.urem.continue70:897; CHECK-NEXT:    [[TMP46:%.*]] = extractelement <4 x i1> [[TMP44]], i32 1898; CHECK-NEXT:    br i1 [[TMP46]], label [[PRED_UREM_IF71:%.*]], label [[PRED_UREM_CONTINUE72:%.*]]899; CHECK:       pred.urem.if71:900; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE72]]901; CHECK:       pred.urem.continue72:902; CHECK-NEXT:    [[TMP47:%.*]] = extractelement <4 x i1> [[TMP44]], i32 2903; CHECK-NEXT:    br i1 [[TMP47]], label [[PRED_UREM_IF73:%.*]], label [[PRED_UREM_CONTINUE74:%.*]]904; CHECK:       pred.urem.if73:905; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE74]]906; CHECK:       pred.urem.continue74:907; CHECK-NEXT:    [[TMP48:%.*]] = extractelement <4 x i1> [[TMP44]], i32 3908; CHECK-NEXT:    br i1 [[TMP48]], label [[PRED_UREM_IF75:%.*]], label [[PRED_UREM_CONTINUE76]]909; CHECK:       pred.urem.if75:910; CHECK-NEXT:    br label [[PRED_UREM_CONTINUE76]]911; CHECK:       pred.urem.continue76:912; CHECK-NEXT:    [[TMP49:%.*]] = select <4 x i1> [[TMP44]], <4 x i1> poison, <4 x i1> zeroinitializer913; CHECK-NEXT:    [[TMP50:%.*]] = or <4 x i1> [[TMP49]], [[BROADCAST_SPLAT67]]914; CHECK-NEXT:    [[PREDPHI77:%.*]] = select i1 [[CMP_I]], <4 x i32> zeroinitializer, <4 x i32> poison915; CHECK-NEXT:    [[TMP51:%.*]] = extractelement <4 x i32> [[PREDPHI77]], i32 0916; CHECK-NEXT:    [[TMP52:%.*]] = ashr i32 [[CONV5_I]], [[TMP51]]917; CHECK-NEXT:    [[BROADCAST_SPLATINSERT78:%.*]] = insertelement <4 x i32> poison, i32 [[TMP52]], i64 0918; CHECK-NEXT:    [[BROADCAST_SPLAT79:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT78]], <4 x i32> poison, <4 x i32> zeroinitializer919; CHECK-NEXT:    [[TMP53:%.*]] = icmp eq <4 x i32> [[BROADCAST_SPLAT79]], zeroinitializer920; CHECK-NEXT:    [[TMP54:%.*]] = shl <4 x i32> [[PREDPHI77]], splat (i32 24)921; CHECK-NEXT:    [[TMP55:%.*]] = ashr exact <4 x i32> [[TMP54]], splat (i32 24)922; CHECK-NEXT:    [[TMP56:%.*]] = extractelement <4 x i1> [[TMP53]], i32 0923; CHECK-NEXT:    [[TMP57:%.*]] = select i1 [[TMP56]], <4 x i32> [[TMP55]], <4 x i32> zeroinitializer924; CHECK-NEXT:    [[PREDPHI80:%.*]] = select <4 x i1> [[TMP50]], <4 x i32> [[TMP57]], <4 x i32> zeroinitializer925; CHECK-NEXT:    [[INDEX_NEXT81]] = add nuw i32 [[INDEX68]], 4926; CHECK-NEXT:    [[TMP58:%.*]] = icmp eq i32 [[INDEX_NEXT81]], 100927; CHECK-NEXT:    br i1 [[TMP58]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]928; CHECK:       vec.epilog.middle.block:929; CHECK-NEXT:    [[TMP59:%.*]] = extractelement <4 x i32> [[PREDPHI80]], i32 3930; CHECK-NEXT:    br i1 true, label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]931; CHECK:       vec.epilog.scalar.ph:932; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i8 [ 0, [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ 4, [[VEC_EPILOG_ITER_CHECK]] ], [ 100, [[ITER_CHECK:%.*]] ]933; CHECK-NEXT:    br label [[LOOP_HEADER1:%.*]]934; CHECK:       loop.header:935; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ [[BC_RESUME_VAL]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]936; CHECK-NEXT:    br i1 [[CMP_I]], label [[THEN:%.*]], label [[ELSE:%.*]]937; CHECK:       then:938; CHECK-NEXT:    [[P_1:%.*]] = phi i32 [ [[REM_I:%.*]], [[ELSE]] ], [ 0, [[LOOP_HEADER1]] ]939; CHECK-NEXT:    [[SHR_I:%.*]] = ashr i32 [[CONV5_I]], [[P_1]]940; CHECK-NEXT:    [[TOBOOL6_NOT_I:%.*]] = icmp eq i32 [[SHR_I]], 0941; CHECK-NEXT:    [[SEXT_I:%.*]] = shl i32 [[P_1]], 24942; CHECK-NEXT:    [[TMP0:%.*]] = ashr exact i32 [[SEXT_I]], 24943; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[TOBOOL6_NOT_I]], i32 [[TMP0]], i32 0944; CHECK-NEXT:    br label [[LOOP_LATCH]]945; CHECK:       else:946; CHECK-NEXT:    [[REM_I]] = urem i32 -1, [[CONV_I]]947; CHECK-NEXT:    [[CMP3_I:%.*]] = icmp sgt i32 [[REM_I]], 1948; CHECK-NEXT:    br i1 [[CMP3_I]], label [[LOOP_LATCH]], label [[THEN]]949; CHECK:       loop.latch:950; CHECK-NEXT:    [[P_2:%.*]] = phi i32 [ 0, [[ELSE]] ], [ [[TMP1]], [[THEN]] ]951; CHECK-NEXT:    [[IV_NEXT]] = add i8 [[IV]], -1952; CHECK-NEXT:    [[EC:%.*]] = icmp eq i8 [[IV_NEXT]], 0953; CHECK-NEXT:    br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER1]], !llvm.loop [[LOOP13:![0-9]+]]954; CHECK:       exit:955; CHECK-NEXT:    [[P_2_LCSSA:%.*]] = phi i32 [ [[P_2]], [[LOOP_LATCH]] ], [ [[TMP43]], [[MIDDLE_BLOCK]] ], [ [[TMP59]], [[VEC_EPILOG_MIDDLE_BLOCK]] ]956; CHECK-NEXT:    ret i32 [[P_2_LCSSA]]957;958entry:959  %cmp.i = icmp eq i16 0, 0960  %conv.i = sext i16 0 to i32961  %conv5.i = sext i8 %a to i32962  br label %loop.header963 964loop.header:965  %iv = phi i8 [ 100, %entry ], [ %iv.next, %loop.latch ]966  br i1 %cmp.i, label %then, label %else967 968then:969  %p.1 = phi i32 [ %rem.i, %else ], [ 0, %loop.header ]970  %shr.i = ashr i32 %conv5.i, %p.1971  %tobool6.not.i = icmp eq i32 %shr.i, 0972  %sext.i = shl i32 %p.1, 24973  %2 = ashr exact i32 %sext.i, 24974  %3 = select i1 %tobool6.not.i, i32 %2, i32 0975  br label %loop.latch976 977else:978  %rem.i = urem i32 -1, %conv.i979  %cmp3.i = icmp sgt i32 %rem.i, 1980  br i1 %cmp3.i, label %loop.latch, label %then981 982loop.latch:983  %p.2 = phi i32 [ 0, %else ], [ %3, %then ]984  %iv.next = add i8 %iv, -1985  %ec = icmp eq i8 %iv.next, 0986  br i1 %ec, label %exit, label %loop.header987 988exit:989  ret i32 %p.2990}991 992; Test case for https://github.com/llvm/llvm-project/issues/156066.993define void @sdiv_by_zero(ptr noalias %src, ptr noalias %dst, i32 %d) #2 {994; CHECK-LABEL: @sdiv_by_zero(995; CHECK-NEXT:  bb:996; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]997; CHECK:       vector.ph:998; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]999; CHECK:       vector.body:1000; CHECK-NEXT:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_SDIV_CONTINUE14:%.*]] ]1001; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[SRC:%.*]], i64 [[INDEX]]1002; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i32>, ptr [[TMP0]], align 41003; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne <8 x i32> [[WIDE_LOAD]], zeroinitializer1004; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <8 x i1> [[TMP1]], i32 01005; CHECK-NEXT:    br i1 [[TMP2]], label [[PRED_SDIV_IF:%.*]], label [[PRED_SDIV_CONTINUE:%.*]]1006; CHECK:       pred.sdiv.if:1007; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 01008; CHECK-NEXT:    [[TMP4:%.*]] = sdiv i32 [[TMP3]], 01009; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <8 x i32> poison, i32 [[TMP4]], i32 01010; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE]]1011; CHECK:       pred.sdiv.continue:1012; CHECK-NEXT:    [[TMP6:%.*]] = phi <8 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP5]], [[PRED_SDIV_IF]] ]1013; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <8 x i1> [[TMP1]], i32 11014; CHECK-NEXT:    br i1 [[TMP7]], label [[PRED_SDIV_IF1:%.*]], label [[PRED_SDIV_CONTINUE2:%.*]]1015; CHECK:       pred.sdiv.if1:1016; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 11017; CHECK-NEXT:    [[TMP9:%.*]] = sdiv i32 [[TMP8]], 01018; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <8 x i32> [[TMP6]], i32 [[TMP9]], i32 11019; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE2]]1020; CHECK:       pred.sdiv.continue2:1021; CHECK-NEXT:    [[TMP11:%.*]] = phi <8 x i32> [ [[TMP6]], [[PRED_SDIV_CONTINUE]] ], [ [[TMP10]], [[PRED_SDIV_IF1]] ]1022; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <8 x i1> [[TMP1]], i32 21023; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_SDIV_IF3:%.*]], label [[PRED_SDIV_CONTINUE4:%.*]]1024; CHECK:       pred.sdiv.if3:1025; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 21026; CHECK-NEXT:    [[TMP14:%.*]] = sdiv i32 [[TMP13]], 01027; CHECK-NEXT:    [[TMP15:%.*]] = insertelement <8 x i32> [[TMP11]], i32 [[TMP14]], i32 21028; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE4]]1029; CHECK:       pred.sdiv.continue4:1030; CHECK-NEXT:    [[TMP16:%.*]] = phi <8 x i32> [ [[TMP11]], [[PRED_SDIV_CONTINUE2]] ], [ [[TMP15]], [[PRED_SDIV_IF3]] ]1031; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <8 x i1> [[TMP1]], i32 31032; CHECK-NEXT:    br i1 [[TMP17]], label [[PRED_SDIV_IF5:%.*]], label [[PRED_SDIV_CONTINUE6:%.*]]1033; CHECK:       pred.sdiv.if5:1034; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 31035; CHECK-NEXT:    [[TMP19:%.*]] = sdiv i32 [[TMP18]], 01036; CHECK-NEXT:    [[TMP20:%.*]] = insertelement <8 x i32> [[TMP16]], i32 [[TMP19]], i32 31037; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE6]]1038; CHECK:       pred.sdiv.continue6:1039; CHECK-NEXT:    [[TMP21:%.*]] = phi <8 x i32> [ [[TMP16]], [[PRED_SDIV_CONTINUE4]] ], [ [[TMP20]], [[PRED_SDIV_IF5]] ]1040; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <8 x i1> [[TMP1]], i32 41041; CHECK-NEXT:    br i1 [[TMP22]], label [[PRED_SDIV_IF7:%.*]], label [[PRED_SDIV_CONTINUE8:%.*]]1042; CHECK:       pred.sdiv.if7:1043; CHECK-NEXT:    [[TMP23:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 41044; CHECK-NEXT:    [[TMP24:%.*]] = sdiv i32 [[TMP23]], 01045; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <8 x i32> [[TMP21]], i32 [[TMP24]], i32 41046; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE8]]1047; CHECK:       pred.sdiv.continue8:1048; CHECK-NEXT:    [[TMP26:%.*]] = phi <8 x i32> [ [[TMP21]], [[PRED_SDIV_CONTINUE6]] ], [ [[TMP25]], [[PRED_SDIV_IF7]] ]1049; CHECK-NEXT:    [[TMP27:%.*]] = extractelement <8 x i1> [[TMP1]], i32 51050; CHECK-NEXT:    br i1 [[TMP27]], label [[PRED_SDIV_IF9:%.*]], label [[PRED_SDIV_CONTINUE10:%.*]]1051; CHECK:       pred.sdiv.if9:1052; CHECK-NEXT:    [[TMP28:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 51053; CHECK-NEXT:    [[TMP29:%.*]] = sdiv i32 [[TMP28]], 01054; CHECK-NEXT:    [[TMP30:%.*]] = insertelement <8 x i32> [[TMP26]], i32 [[TMP29]], i32 51055; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE10]]1056; CHECK:       pred.sdiv.continue10:1057; CHECK-NEXT:    [[TMP31:%.*]] = phi <8 x i32> [ [[TMP26]], [[PRED_SDIV_CONTINUE8]] ], [ [[TMP30]], [[PRED_SDIV_IF9]] ]1058; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <8 x i1> [[TMP1]], i32 61059; CHECK-NEXT:    br i1 [[TMP32]], label [[PRED_SDIV_IF11:%.*]], label [[PRED_SDIV_CONTINUE12:%.*]]1060; CHECK:       pred.sdiv.if11:1061; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 61062; CHECK-NEXT:    [[TMP34:%.*]] = sdiv i32 [[TMP33]], 01063; CHECK-NEXT:    [[TMP35:%.*]] = insertelement <8 x i32> [[TMP31]], i32 [[TMP34]], i32 61064; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE12]]1065; CHECK:       pred.sdiv.continue12:1066; CHECK-NEXT:    [[TMP36:%.*]] = phi <8 x i32> [ [[TMP31]], [[PRED_SDIV_CONTINUE10]] ], [ [[TMP35]], [[PRED_SDIV_IF11]] ]1067; CHECK-NEXT:    [[TMP37:%.*]] = extractelement <8 x i1> [[TMP1]], i32 71068; CHECK-NEXT:    br i1 [[TMP37]], label [[PRED_SDIV_IF13:%.*]], label [[PRED_SDIV_CONTINUE14]]1069; CHECK:       pred.sdiv.if13:1070; CHECK-NEXT:    [[TMP38:%.*]] = extractelement <8 x i32> [[WIDE_LOAD]], i32 71071; CHECK-NEXT:    [[TMP39:%.*]] = sdiv i32 [[TMP38]], 01072; CHECK-NEXT:    [[TMP40:%.*]] = insertelement <8 x i32> [[TMP36]], i32 [[TMP39]], i32 71073; CHECK-NEXT:    br label [[PRED_SDIV_CONTINUE14]]1074; CHECK:       pred.sdiv.continue14:1075; CHECK-NEXT:    [[TMP41:%.*]] = phi <8 x i32> [ [[TMP36]], [[PRED_SDIV_CONTINUE12]] ], [ [[TMP40]], [[PRED_SDIV_IF13]] ]1076; CHECK-NEXT:    [[PREDPHI:%.*]] = select <8 x i1> [[TMP1]], <8 x i32> [[TMP41]], <8 x i32> zeroinitializer1077; CHECK-NEXT:    [[TMP42:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 [[INDEX]]1078; CHECK-NEXT:    store <8 x i32> [[PREDPHI]], ptr [[TMP42]], align 41079; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 81080; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i64 [[INDEX_NEXT]], 161081; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]1082; CHECK:       middle.block:1083; CHECK-NEXT:    br label [[SCALAR_PH:%.*]]1084; CHECK:       scalar.ph:1085; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]1086; CHECK:       loop.header:1087; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ], [ 16, [[SCALAR_PH]] ]1088; CHECK-NEXT:    [[GEP_SRC:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i64 [[IV]]1089; CHECK-NEXT:    [[L:%.*]] = load i32, ptr [[GEP_SRC]], align 41090; CHECK-NEXT:    [[ICMP:%.*]] = icmp eq i32 [[L]], 01091; CHECK-NEXT:    br i1 [[ICMP]], label [[LOOP_LATCH]], label [[THEN:%.*]]1092; CHECK:       then:1093; CHECK-NEXT:    [[SDIV:%.*]] = sdiv i32 [[L]], 01094; CHECK-NEXT:    br label [[LOOP_LATCH]]1095; CHECK:       loop.latch:1096; CHECK-NEXT:    [[MERGE:%.*]] = phi i32 [ [[SDIV]], [[THEN]] ], [ 0, [[LOOP_HEADER]] ]1097; CHECK-NEXT:    [[GEP_DST:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 [[IV]]1098; CHECK-NEXT:    store i32 [[MERGE]], ptr [[GEP_DST]], align 41099; CHECK-NEXT:    [[IV_NEXT]] = add i64 [[IV]], 11100; CHECK-NEXT:    [[EC:%.*]] = icmp ult i64 [[IV]], 161101; CHECK-NEXT:    br i1 [[EC]], label [[LOOP_HEADER]], label [[EXIT:%.*]], !llvm.loop [[LOOP15:![0-9]+]]1102; CHECK:       exit:1103; CHECK-NEXT:    ret void1104;1105bb:1106  br label %loop.header1107 1108loop.header:1109  %iv = phi i64 [ %iv.next, %loop.latch ], [ 0, %bb ]1110  %gep.src = getelementptr inbounds i32, ptr %src, i64 %iv1111  %l = load i32, ptr %gep.src, align 41112  %icmp = icmp eq i32 %l, 01113  br i1 %icmp, label %loop.latch, label %then1114 1115then:1116  %sdiv = sdiv i32 %l, 01117  br label %loop.latch1118 1119loop.latch:1120  %merge = phi i32 [ %sdiv, %then ], [ 0, %loop.header ]1121  %gep.dst = getelementptr inbounds i32, ptr %dst, i64 %iv1122  store i32 %merge, ptr %gep.dst, align 41123  %iv.next = add i64 %iv, 11124  %ec = icmp ult i64 %iv, 161125  br i1 %ec, label %loop.header, label %exit1126 1127exit:1128  ret void1129}1130 1131; Test case for https://github.com/llvm/llvm-project/issues/158660.1132define i64 @test_predicated_udiv(i32 %d, i1 %c) #2 {1133; CHECK-LABEL: @test_predicated_udiv(1134; CHECK-NEXT:  iter.check:1135; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]]1136; CHECK:       vector.main.loop.iter.check:1137; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]1138; CHECK:       vector.ph:1139; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <32 x i1> poison, i1 [[C:%.*]], i64 01140; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <32 x i1> [[BROADCAST_SPLATINSERT]], <32 x i1> poison, <32 x i32> zeroinitializer1141; CHECK-NEXT:    [[TMP0:%.*]] = xor <32 x i1> [[BROADCAST_SPLAT]], splat (i1 true)1142; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]1143; CHECK:       vector.body:1144; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_UDIV_CONTINUE62:%.*]] ]1145; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <32 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_UDIV_CONTINUE62]] ]1146; CHECK-NEXT:    [[TMP1:%.*]] = call <32 x i32> @llvm.usub.sat.v32i32(<32 x i32> [[VEC_IND]], <32 x i32> splat (i32 1))1147; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <32 x i1> [[TMP0]], i32 01148; CHECK-NEXT:    br i1 [[TMP2]], label [[PRED_UDIV_IF:%.*]], label [[PRED_UDIV_CONTINUE:%.*]]1149; CHECK:       pred.udiv.if:1150; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <32 x i32> [[TMP1]], i32 01151; CHECK-NEXT:    [[TMP4:%.*]] = udiv i32 [[TMP3]], [[D:%.*]]1152; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <32 x i32> poison, i32 [[TMP4]], i32 01153; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE]]1154; CHECK:       pred.udiv.continue:1155; CHECK-NEXT:    [[TMP6:%.*]] = phi <32 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP5]], [[PRED_UDIV_IF]] ]1156; CHECK-NEXT:    [[TMP7:%.*]] = extractelement <32 x i1> [[TMP0]], i32 11157; CHECK-NEXT:    br i1 [[TMP7]], label [[PRED_UDIV_IF1:%.*]], label [[PRED_UDIV_CONTINUE2:%.*]]1158; CHECK:       pred.udiv.if1:1159; CHECK-NEXT:    [[TMP8:%.*]] = extractelement <32 x i32> [[TMP1]], i32 11160; CHECK-NEXT:    [[TMP9:%.*]] = udiv i32 [[TMP8]], [[D]]1161; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <32 x i32> [[TMP6]], i32 [[TMP9]], i32 11162; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE2]]1163; CHECK:       pred.udiv.continue2:1164; CHECK-NEXT:    [[TMP11:%.*]] = phi <32 x i32> [ [[TMP6]], [[PRED_UDIV_CONTINUE]] ], [ [[TMP10]], [[PRED_UDIV_IF1]] ]1165; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <32 x i1> [[TMP0]], i32 21166; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_UDIV_IF3:%.*]], label [[PRED_UDIV_CONTINUE4:%.*]]1167; CHECK:       pred.udiv.if3:1168; CHECK-NEXT:    [[TMP13:%.*]] = extractelement <32 x i32> [[TMP1]], i32 21169; CHECK-NEXT:    [[TMP14:%.*]] = udiv i32 [[TMP13]], [[D]]1170; CHECK-NEXT:    [[TMP15:%.*]] = insertelement <32 x i32> [[TMP11]], i32 [[TMP14]], i32 21171; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE4]]1172; CHECK:       pred.udiv.continue4:1173; CHECK-NEXT:    [[TMP16:%.*]] = phi <32 x i32> [ [[TMP11]], [[PRED_UDIV_CONTINUE2]] ], [ [[TMP15]], [[PRED_UDIV_IF3]] ]1174; CHECK-NEXT:    [[TMP17:%.*]] = extractelement <32 x i1> [[TMP0]], i32 31175; CHECK-NEXT:    br i1 [[TMP17]], label [[PRED_UDIV_IF5:%.*]], label [[PRED_UDIV_CONTINUE6:%.*]]1176; CHECK:       pred.udiv.if5:1177; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <32 x i32> [[TMP1]], i32 31178; CHECK-NEXT:    [[TMP19:%.*]] = udiv i32 [[TMP18]], [[D]]1179; CHECK-NEXT:    [[TMP20:%.*]] = insertelement <32 x i32> [[TMP16]], i32 [[TMP19]], i32 31180; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE6]]1181; CHECK:       pred.udiv.continue6:1182; CHECK-NEXT:    [[TMP21:%.*]] = phi <32 x i32> [ [[TMP16]], [[PRED_UDIV_CONTINUE4]] ], [ [[TMP20]], [[PRED_UDIV_IF5]] ]1183; CHECK-NEXT:    [[TMP22:%.*]] = extractelement <32 x i1> [[TMP0]], i32 41184; CHECK-NEXT:    br i1 [[TMP22]], label [[PRED_UDIV_IF7:%.*]], label [[PRED_UDIV_CONTINUE8:%.*]]1185; CHECK:       pred.udiv.if7:1186; CHECK-NEXT:    [[TMP23:%.*]] = extractelement <32 x i32> [[TMP1]], i32 41187; CHECK-NEXT:    [[TMP24:%.*]] = udiv i32 [[TMP23]], [[D]]1188; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <32 x i32> [[TMP21]], i32 [[TMP24]], i32 41189; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE8]]1190; CHECK:       pred.udiv.continue8:1191; CHECK-NEXT:    [[TMP26:%.*]] = phi <32 x i32> [ [[TMP21]], [[PRED_UDIV_CONTINUE6]] ], [ [[TMP25]], [[PRED_UDIV_IF7]] ]1192; CHECK-NEXT:    [[TMP27:%.*]] = extractelement <32 x i1> [[TMP0]], i32 51193; CHECK-NEXT:    br i1 [[TMP27]], label [[PRED_UDIV_IF9:%.*]], label [[PRED_UDIV_CONTINUE10:%.*]]1194; CHECK:       pred.udiv.if9:1195; CHECK-NEXT:    [[TMP28:%.*]] = extractelement <32 x i32> [[TMP1]], i32 51196; CHECK-NEXT:    [[TMP29:%.*]] = udiv i32 [[TMP28]], [[D]]1197; CHECK-NEXT:    [[TMP30:%.*]] = insertelement <32 x i32> [[TMP26]], i32 [[TMP29]], i32 51198; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE10]]1199; CHECK:       pred.udiv.continue10:1200; CHECK-NEXT:    [[TMP31:%.*]] = phi <32 x i32> [ [[TMP26]], [[PRED_UDIV_CONTINUE8]] ], [ [[TMP30]], [[PRED_UDIV_IF9]] ]1201; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <32 x i1> [[TMP0]], i32 61202; CHECK-NEXT:    br i1 [[TMP32]], label [[PRED_UDIV_IF11:%.*]], label [[PRED_UDIV_CONTINUE12:%.*]]1203; CHECK:       pred.udiv.if11:1204; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <32 x i32> [[TMP1]], i32 61205; CHECK-NEXT:    [[TMP34:%.*]] = udiv i32 [[TMP33]], [[D]]1206; CHECK-NEXT:    [[TMP35:%.*]] = insertelement <32 x i32> [[TMP31]], i32 [[TMP34]], i32 61207; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE12]]1208; CHECK:       pred.udiv.continue12:1209; CHECK-NEXT:    [[TMP36:%.*]] = phi <32 x i32> [ [[TMP31]], [[PRED_UDIV_CONTINUE10]] ], [ [[TMP35]], [[PRED_UDIV_IF11]] ]1210; CHECK-NEXT:    [[TMP37:%.*]] = extractelement <32 x i1> [[TMP0]], i32 71211; CHECK-NEXT:    br i1 [[TMP37]], label [[PRED_UDIV_IF13:%.*]], label [[PRED_UDIV_CONTINUE14:%.*]]1212; CHECK:       pred.udiv.if13:1213; CHECK-NEXT:    [[TMP38:%.*]] = extractelement <32 x i32> [[TMP1]], i32 71214; CHECK-NEXT:    [[TMP39:%.*]] = udiv i32 [[TMP38]], [[D]]1215; CHECK-NEXT:    [[TMP40:%.*]] = insertelement <32 x i32> [[TMP36]], i32 [[TMP39]], i32 71216; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE14]]1217; CHECK:       pred.udiv.continue14:1218; CHECK-NEXT:    [[TMP41:%.*]] = phi <32 x i32> [ [[TMP36]], [[PRED_UDIV_CONTINUE12]] ], [ [[TMP40]], [[PRED_UDIV_IF13]] ]1219; CHECK-NEXT:    [[TMP42:%.*]] = extractelement <32 x i1> [[TMP0]], i32 81220; CHECK-NEXT:    br i1 [[TMP42]], label [[PRED_UDIV_IF15:%.*]], label [[PRED_UDIV_CONTINUE16:%.*]]1221; CHECK:       pred.udiv.if15:1222; CHECK-NEXT:    [[TMP43:%.*]] = extractelement <32 x i32> [[TMP1]], i32 81223; CHECK-NEXT:    [[TMP44:%.*]] = udiv i32 [[TMP43]], [[D]]1224; CHECK-NEXT:    [[TMP45:%.*]] = insertelement <32 x i32> [[TMP41]], i32 [[TMP44]], i32 81225; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE16]]1226; CHECK:       pred.udiv.continue16:1227; CHECK-NEXT:    [[TMP46:%.*]] = phi <32 x i32> [ [[TMP41]], [[PRED_UDIV_CONTINUE14]] ], [ [[TMP45]], [[PRED_UDIV_IF15]] ]1228; CHECK-NEXT:    [[TMP47:%.*]] = extractelement <32 x i1> [[TMP0]], i32 91229; CHECK-NEXT:    br i1 [[TMP47]], label [[PRED_UDIV_IF17:%.*]], label [[PRED_UDIV_CONTINUE18:%.*]]1230; CHECK:       pred.udiv.if17:1231; CHECK-NEXT:    [[TMP48:%.*]] = extractelement <32 x i32> [[TMP1]], i32 91232; CHECK-NEXT:    [[TMP49:%.*]] = udiv i32 [[TMP48]], [[D]]1233; CHECK-NEXT:    [[TMP50:%.*]] = insertelement <32 x i32> [[TMP46]], i32 [[TMP49]], i32 91234; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE18]]1235; CHECK:       pred.udiv.continue18:1236; CHECK-NEXT:    [[TMP51:%.*]] = phi <32 x i32> [ [[TMP46]], [[PRED_UDIV_CONTINUE16]] ], [ [[TMP50]], [[PRED_UDIV_IF17]] ]1237; CHECK-NEXT:    [[TMP52:%.*]] = extractelement <32 x i1> [[TMP0]], i32 101238; CHECK-NEXT:    br i1 [[TMP52]], label [[PRED_UDIV_IF19:%.*]], label [[PRED_UDIV_CONTINUE20:%.*]]1239; CHECK:       pred.udiv.if19:1240; CHECK-NEXT:    [[TMP53:%.*]] = extractelement <32 x i32> [[TMP1]], i32 101241; CHECK-NEXT:    [[TMP54:%.*]] = udiv i32 [[TMP53]], [[D]]1242; CHECK-NEXT:    [[TMP55:%.*]] = insertelement <32 x i32> [[TMP51]], i32 [[TMP54]], i32 101243; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE20]]1244; CHECK:       pred.udiv.continue20:1245; CHECK-NEXT:    [[TMP56:%.*]] = phi <32 x i32> [ [[TMP51]], [[PRED_UDIV_CONTINUE18]] ], [ [[TMP55]], [[PRED_UDIV_IF19]] ]1246; CHECK-NEXT:    [[TMP57:%.*]] = extractelement <32 x i1> [[TMP0]], i32 111247; CHECK-NEXT:    br i1 [[TMP57]], label [[PRED_UDIV_IF21:%.*]], label [[PRED_UDIV_CONTINUE22:%.*]]1248; CHECK:       pred.udiv.if21:1249; CHECK-NEXT:    [[TMP58:%.*]] = extractelement <32 x i32> [[TMP1]], i32 111250; CHECK-NEXT:    [[TMP59:%.*]] = udiv i32 [[TMP58]], [[D]]1251; CHECK-NEXT:    [[TMP60:%.*]] = insertelement <32 x i32> [[TMP56]], i32 [[TMP59]], i32 111252; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE22]]1253; CHECK:       pred.udiv.continue22:1254; CHECK-NEXT:    [[TMP61:%.*]] = phi <32 x i32> [ [[TMP56]], [[PRED_UDIV_CONTINUE20]] ], [ [[TMP60]], [[PRED_UDIV_IF21]] ]1255; CHECK-NEXT:    [[TMP62:%.*]] = extractelement <32 x i1> [[TMP0]], i32 121256; CHECK-NEXT:    br i1 [[TMP62]], label [[PRED_UDIV_IF23:%.*]], label [[PRED_UDIV_CONTINUE24:%.*]]1257; CHECK:       pred.udiv.if23:1258; CHECK-NEXT:    [[TMP63:%.*]] = extractelement <32 x i32> [[TMP1]], i32 121259; CHECK-NEXT:    [[TMP64:%.*]] = udiv i32 [[TMP63]], [[D]]1260; CHECK-NEXT:    [[TMP65:%.*]] = insertelement <32 x i32> [[TMP61]], i32 [[TMP64]], i32 121261; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE24]]1262; CHECK:       pred.udiv.continue24:1263; CHECK-NEXT:    [[TMP66:%.*]] = phi <32 x i32> [ [[TMP61]], [[PRED_UDIV_CONTINUE22]] ], [ [[TMP65]], [[PRED_UDIV_IF23]] ]1264; CHECK-NEXT:    [[TMP67:%.*]] = extractelement <32 x i1> [[TMP0]], i32 131265; CHECK-NEXT:    br i1 [[TMP67]], label [[PRED_UDIV_IF25:%.*]], label [[PRED_UDIV_CONTINUE26:%.*]]1266; CHECK:       pred.udiv.if25:1267; CHECK-NEXT:    [[TMP68:%.*]] = extractelement <32 x i32> [[TMP1]], i32 131268; CHECK-NEXT:    [[TMP69:%.*]] = udiv i32 [[TMP68]], [[D]]1269; CHECK-NEXT:    [[TMP70:%.*]] = insertelement <32 x i32> [[TMP66]], i32 [[TMP69]], i32 131270; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE26]]1271; CHECK:       pred.udiv.continue26:1272; CHECK-NEXT:    [[TMP71:%.*]] = phi <32 x i32> [ [[TMP66]], [[PRED_UDIV_CONTINUE24]] ], [ [[TMP70]], [[PRED_UDIV_IF25]] ]1273; CHECK-NEXT:    [[TMP72:%.*]] = extractelement <32 x i1> [[TMP0]], i32 141274; CHECK-NEXT:    br i1 [[TMP72]], label [[PRED_UDIV_IF27:%.*]], label [[PRED_UDIV_CONTINUE28:%.*]]1275; CHECK:       pred.udiv.if27:1276; CHECK-NEXT:    [[TMP73:%.*]] = extractelement <32 x i32> [[TMP1]], i32 141277; CHECK-NEXT:    [[TMP74:%.*]] = udiv i32 [[TMP73]], [[D]]1278; CHECK-NEXT:    [[TMP75:%.*]] = insertelement <32 x i32> [[TMP71]], i32 [[TMP74]], i32 141279; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE28]]1280; CHECK:       pred.udiv.continue28:1281; CHECK-NEXT:    [[TMP76:%.*]] = phi <32 x i32> [ [[TMP71]], [[PRED_UDIV_CONTINUE26]] ], [ [[TMP75]], [[PRED_UDIV_IF27]] ]1282; CHECK-NEXT:    [[TMP77:%.*]] = extractelement <32 x i1> [[TMP0]], i32 151283; CHECK-NEXT:    br i1 [[TMP77]], label [[PRED_UDIV_IF29:%.*]], label [[PRED_UDIV_CONTINUE30:%.*]]1284; CHECK:       pred.udiv.if29:1285; CHECK-NEXT:    [[TMP78:%.*]] = extractelement <32 x i32> [[TMP1]], i32 151286; CHECK-NEXT:    [[TMP79:%.*]] = udiv i32 [[TMP78]], [[D]]1287; CHECK-NEXT:    [[TMP80:%.*]] = insertelement <32 x i32> [[TMP76]], i32 [[TMP79]], i32 151288; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE30]]1289; CHECK:       pred.udiv.continue30:1290; CHECK-NEXT:    [[TMP81:%.*]] = phi <32 x i32> [ [[TMP76]], [[PRED_UDIV_CONTINUE28]] ], [ [[TMP80]], [[PRED_UDIV_IF29]] ]1291; CHECK-NEXT:    [[TMP82:%.*]] = extractelement <32 x i1> [[TMP0]], i32 161292; CHECK-NEXT:    br i1 [[TMP82]], label [[PRED_UDIV_IF31:%.*]], label [[PRED_UDIV_CONTINUE32:%.*]]1293; CHECK:       pred.udiv.if31:1294; CHECK-NEXT:    [[TMP83:%.*]] = extractelement <32 x i32> [[TMP1]], i32 161295; CHECK-NEXT:    [[TMP84:%.*]] = udiv i32 [[TMP83]], [[D]]1296; CHECK-NEXT:    [[TMP85:%.*]] = insertelement <32 x i32> [[TMP81]], i32 [[TMP84]], i32 161297; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE32]]1298; CHECK:       pred.udiv.continue32:1299; CHECK-NEXT:    [[TMP86:%.*]] = phi <32 x i32> [ [[TMP81]], [[PRED_UDIV_CONTINUE30]] ], [ [[TMP85]], [[PRED_UDIV_IF31]] ]1300; CHECK-NEXT:    [[TMP87:%.*]] = extractelement <32 x i1> [[TMP0]], i32 171301; CHECK-NEXT:    br i1 [[TMP87]], label [[PRED_UDIV_IF33:%.*]], label [[PRED_UDIV_CONTINUE34:%.*]]1302; CHECK:       pred.udiv.if33:1303; CHECK-NEXT:    [[TMP88:%.*]] = extractelement <32 x i32> [[TMP1]], i32 171304; CHECK-NEXT:    [[TMP89:%.*]] = udiv i32 [[TMP88]], [[D]]1305; CHECK-NEXT:    [[TMP90:%.*]] = insertelement <32 x i32> [[TMP86]], i32 [[TMP89]], i32 171306; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE34]]1307; CHECK:       pred.udiv.continue34:1308; CHECK-NEXT:    [[TMP91:%.*]] = phi <32 x i32> [ [[TMP86]], [[PRED_UDIV_CONTINUE32]] ], [ [[TMP90]], [[PRED_UDIV_IF33]] ]1309; CHECK-NEXT:    [[TMP92:%.*]] = extractelement <32 x i1> [[TMP0]], i32 181310; CHECK-NEXT:    br i1 [[TMP92]], label [[PRED_UDIV_IF35:%.*]], label [[PRED_UDIV_CONTINUE36:%.*]]1311; CHECK:       pred.udiv.if35:1312; CHECK-NEXT:    [[TMP93:%.*]] = extractelement <32 x i32> [[TMP1]], i32 181313; CHECK-NEXT:    [[TMP94:%.*]] = udiv i32 [[TMP93]], [[D]]1314; CHECK-NEXT:    [[TMP95:%.*]] = insertelement <32 x i32> [[TMP91]], i32 [[TMP94]], i32 181315; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE36]]1316; CHECK:       pred.udiv.continue36:1317; CHECK-NEXT:    [[TMP96:%.*]] = phi <32 x i32> [ [[TMP91]], [[PRED_UDIV_CONTINUE34]] ], [ [[TMP95]], [[PRED_UDIV_IF35]] ]1318; CHECK-NEXT:    [[TMP97:%.*]] = extractelement <32 x i1> [[TMP0]], i32 191319; CHECK-NEXT:    br i1 [[TMP97]], label [[PRED_UDIV_IF37:%.*]], label [[PRED_UDIV_CONTINUE38:%.*]]1320; CHECK:       pred.udiv.if37:1321; CHECK-NEXT:    [[TMP98:%.*]] = extractelement <32 x i32> [[TMP1]], i32 191322; CHECK-NEXT:    [[TMP99:%.*]] = udiv i32 [[TMP98]], [[D]]1323; CHECK-NEXT:    [[TMP100:%.*]] = insertelement <32 x i32> [[TMP96]], i32 [[TMP99]], i32 191324; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE38]]1325; CHECK:       pred.udiv.continue38:1326; CHECK-NEXT:    [[TMP101:%.*]] = phi <32 x i32> [ [[TMP96]], [[PRED_UDIV_CONTINUE36]] ], [ [[TMP100]], [[PRED_UDIV_IF37]] ]1327; CHECK-NEXT:    [[TMP102:%.*]] = extractelement <32 x i1> [[TMP0]], i32 201328; CHECK-NEXT:    br i1 [[TMP102]], label [[PRED_UDIV_IF39:%.*]], label [[PRED_UDIV_CONTINUE40:%.*]]1329; CHECK:       pred.udiv.if39:1330; CHECK-NEXT:    [[TMP103:%.*]] = extractelement <32 x i32> [[TMP1]], i32 201331; CHECK-NEXT:    [[TMP104:%.*]] = udiv i32 [[TMP103]], [[D]]1332; CHECK-NEXT:    [[TMP105:%.*]] = insertelement <32 x i32> [[TMP101]], i32 [[TMP104]], i32 201333; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE40]]1334; CHECK:       pred.udiv.continue40:1335; CHECK-NEXT:    [[TMP106:%.*]] = phi <32 x i32> [ [[TMP101]], [[PRED_UDIV_CONTINUE38]] ], [ [[TMP105]], [[PRED_UDIV_IF39]] ]1336; CHECK-NEXT:    [[TMP107:%.*]] = extractelement <32 x i1> [[TMP0]], i32 211337; CHECK-NEXT:    br i1 [[TMP107]], label [[PRED_UDIV_IF41:%.*]], label [[PRED_UDIV_CONTINUE42:%.*]]1338; CHECK:       pred.udiv.if41:1339; CHECK-NEXT:    [[TMP108:%.*]] = extractelement <32 x i32> [[TMP1]], i32 211340; CHECK-NEXT:    [[TMP109:%.*]] = udiv i32 [[TMP108]], [[D]]1341; CHECK-NEXT:    [[TMP110:%.*]] = insertelement <32 x i32> [[TMP106]], i32 [[TMP109]], i32 211342; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE42]]1343; CHECK:       pred.udiv.continue42:1344; CHECK-NEXT:    [[TMP111:%.*]] = phi <32 x i32> [ [[TMP106]], [[PRED_UDIV_CONTINUE40]] ], [ [[TMP110]], [[PRED_UDIV_IF41]] ]1345; CHECK-NEXT:    [[TMP112:%.*]] = extractelement <32 x i1> [[TMP0]], i32 221346; CHECK-NEXT:    br i1 [[TMP112]], label [[PRED_UDIV_IF43:%.*]], label [[PRED_UDIV_CONTINUE44:%.*]]1347; CHECK:       pred.udiv.if43:1348; CHECK-NEXT:    [[TMP113:%.*]] = extractelement <32 x i32> [[TMP1]], i32 221349; CHECK-NEXT:    [[TMP114:%.*]] = udiv i32 [[TMP113]], [[D]]1350; CHECK-NEXT:    [[TMP115:%.*]] = insertelement <32 x i32> [[TMP111]], i32 [[TMP114]], i32 221351; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE44]]1352; CHECK:       pred.udiv.continue44:1353; CHECK-NEXT:    [[TMP116:%.*]] = phi <32 x i32> [ [[TMP111]], [[PRED_UDIV_CONTINUE42]] ], [ [[TMP115]], [[PRED_UDIV_IF43]] ]1354; CHECK-NEXT:    [[TMP117:%.*]] = extractelement <32 x i1> [[TMP0]], i32 231355; CHECK-NEXT:    br i1 [[TMP117]], label [[PRED_UDIV_IF45:%.*]], label [[PRED_UDIV_CONTINUE46:%.*]]1356; CHECK:       pred.udiv.if45:1357; CHECK-NEXT:    [[TMP118:%.*]] = extractelement <32 x i32> [[TMP1]], i32 231358; CHECK-NEXT:    [[TMP119:%.*]] = udiv i32 [[TMP118]], [[D]]1359; CHECK-NEXT:    [[TMP120:%.*]] = insertelement <32 x i32> [[TMP116]], i32 [[TMP119]], i32 231360; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE46]]1361; CHECK:       pred.udiv.continue46:1362; CHECK-NEXT:    [[TMP121:%.*]] = phi <32 x i32> [ [[TMP116]], [[PRED_UDIV_CONTINUE44]] ], [ [[TMP120]], [[PRED_UDIV_IF45]] ]1363; CHECK-NEXT:    [[TMP122:%.*]] = extractelement <32 x i1> [[TMP0]], i32 241364; CHECK-NEXT:    br i1 [[TMP122]], label [[PRED_UDIV_IF47:%.*]], label [[PRED_UDIV_CONTINUE48:%.*]]1365; CHECK:       pred.udiv.if47:1366; CHECK-NEXT:    [[TMP123:%.*]] = extractelement <32 x i32> [[TMP1]], i32 241367; CHECK-NEXT:    [[TMP124:%.*]] = udiv i32 [[TMP123]], [[D]]1368; CHECK-NEXT:    [[TMP125:%.*]] = insertelement <32 x i32> [[TMP121]], i32 [[TMP124]], i32 241369; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE48]]1370; CHECK:       pred.udiv.continue48:1371; CHECK-NEXT:    [[TMP126:%.*]] = phi <32 x i32> [ [[TMP121]], [[PRED_UDIV_CONTINUE46]] ], [ [[TMP125]], [[PRED_UDIV_IF47]] ]1372; CHECK-NEXT:    [[TMP127:%.*]] = extractelement <32 x i1> [[TMP0]], i32 251373; CHECK-NEXT:    br i1 [[TMP127]], label [[PRED_UDIV_IF49:%.*]], label [[PRED_UDIV_CONTINUE50:%.*]]1374; CHECK:       pred.udiv.if49:1375; CHECK-NEXT:    [[TMP128:%.*]] = extractelement <32 x i32> [[TMP1]], i32 251376; CHECK-NEXT:    [[TMP129:%.*]] = udiv i32 [[TMP128]], [[D]]1377; CHECK-NEXT:    [[TMP130:%.*]] = insertelement <32 x i32> [[TMP126]], i32 [[TMP129]], i32 251378; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE50]]1379; CHECK:       pred.udiv.continue50:1380; CHECK-NEXT:    [[TMP131:%.*]] = phi <32 x i32> [ [[TMP126]], [[PRED_UDIV_CONTINUE48]] ], [ [[TMP130]], [[PRED_UDIV_IF49]] ]1381; CHECK-NEXT:    [[TMP132:%.*]] = extractelement <32 x i1> [[TMP0]], i32 261382; CHECK-NEXT:    br i1 [[TMP132]], label [[PRED_UDIV_IF51:%.*]], label [[PRED_UDIV_CONTINUE52:%.*]]1383; CHECK:       pred.udiv.if51:1384; CHECK-NEXT:    [[TMP133:%.*]] = extractelement <32 x i32> [[TMP1]], i32 261385; CHECK-NEXT:    [[TMP134:%.*]] = udiv i32 [[TMP133]], [[D]]1386; CHECK-NEXT:    [[TMP135:%.*]] = insertelement <32 x i32> [[TMP131]], i32 [[TMP134]], i32 261387; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE52]]1388; CHECK:       pred.udiv.continue52:1389; CHECK-NEXT:    [[TMP136:%.*]] = phi <32 x i32> [ [[TMP131]], [[PRED_UDIV_CONTINUE50]] ], [ [[TMP135]], [[PRED_UDIV_IF51]] ]1390; CHECK-NEXT:    [[TMP137:%.*]] = extractelement <32 x i1> [[TMP0]], i32 271391; CHECK-NEXT:    br i1 [[TMP137]], label [[PRED_UDIV_IF53:%.*]], label [[PRED_UDIV_CONTINUE54:%.*]]1392; CHECK:       pred.udiv.if53:1393; CHECK-NEXT:    [[TMP138:%.*]] = extractelement <32 x i32> [[TMP1]], i32 271394; CHECK-NEXT:    [[TMP139:%.*]] = udiv i32 [[TMP138]], [[D]]1395; CHECK-NEXT:    [[TMP140:%.*]] = insertelement <32 x i32> [[TMP136]], i32 [[TMP139]], i32 271396; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE54]]1397; CHECK:       pred.udiv.continue54:1398; CHECK-NEXT:    [[TMP141:%.*]] = phi <32 x i32> [ [[TMP136]], [[PRED_UDIV_CONTINUE52]] ], [ [[TMP140]], [[PRED_UDIV_IF53]] ]1399; CHECK-NEXT:    [[TMP142:%.*]] = extractelement <32 x i1> [[TMP0]], i32 281400; CHECK-NEXT:    br i1 [[TMP142]], label [[PRED_UDIV_IF55:%.*]], label [[PRED_UDIV_CONTINUE56:%.*]]1401; CHECK:       pred.udiv.if55:1402; CHECK-NEXT:    [[TMP143:%.*]] = extractelement <32 x i32> [[TMP1]], i32 281403; CHECK-NEXT:    [[TMP144:%.*]] = udiv i32 [[TMP143]], [[D]]1404; CHECK-NEXT:    [[TMP145:%.*]] = insertelement <32 x i32> [[TMP141]], i32 [[TMP144]], i32 281405; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE56]]1406; CHECK:       pred.udiv.continue56:1407; CHECK-NEXT:    [[TMP146:%.*]] = phi <32 x i32> [ [[TMP141]], [[PRED_UDIV_CONTINUE54]] ], [ [[TMP145]], [[PRED_UDIV_IF55]] ]1408; CHECK-NEXT:    [[TMP147:%.*]] = extractelement <32 x i1> [[TMP0]], i32 291409; CHECK-NEXT:    br i1 [[TMP147]], label [[PRED_UDIV_IF57:%.*]], label [[PRED_UDIV_CONTINUE58:%.*]]1410; CHECK:       pred.udiv.if57:1411; CHECK-NEXT:    [[TMP148:%.*]] = extractelement <32 x i32> [[TMP1]], i32 291412; CHECK-NEXT:    [[TMP149:%.*]] = udiv i32 [[TMP148]], [[D]]1413; CHECK-NEXT:    [[TMP150:%.*]] = insertelement <32 x i32> [[TMP146]], i32 [[TMP149]], i32 291414; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE58]]1415; CHECK:       pred.udiv.continue58:1416; CHECK-NEXT:    [[TMP151:%.*]] = phi <32 x i32> [ [[TMP146]], [[PRED_UDIV_CONTINUE56]] ], [ [[TMP150]], [[PRED_UDIV_IF57]] ]1417; CHECK-NEXT:    [[TMP152:%.*]] = extractelement <32 x i1> [[TMP0]], i32 301418; CHECK-NEXT:    br i1 [[TMP152]], label [[PRED_UDIV_IF59:%.*]], label [[PRED_UDIV_CONTINUE60:%.*]]1419; CHECK:       pred.udiv.if59:1420; CHECK-NEXT:    [[TMP153:%.*]] = extractelement <32 x i32> [[TMP1]], i32 301421; CHECK-NEXT:    [[TMP154:%.*]] = udiv i32 [[TMP153]], [[D]]1422; CHECK-NEXT:    [[TMP155:%.*]] = insertelement <32 x i32> [[TMP151]], i32 [[TMP154]], i32 301423; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE60]]1424; CHECK:       pred.udiv.continue60:1425; CHECK-NEXT:    [[TMP156:%.*]] = phi <32 x i32> [ [[TMP151]], [[PRED_UDIV_CONTINUE58]] ], [ [[TMP155]], [[PRED_UDIV_IF59]] ]1426; CHECK-NEXT:    [[TMP157:%.*]] = extractelement <32 x i1> [[TMP0]], i32 311427; CHECK-NEXT:    br i1 [[TMP157]], label [[PRED_UDIV_IF61:%.*]], label [[PRED_UDIV_CONTINUE62]]1428; CHECK:       pred.udiv.if61:1429; CHECK-NEXT:    [[TMP158:%.*]] = extractelement <32 x i32> [[TMP1]], i32 311430; CHECK-NEXT:    [[TMP159:%.*]] = udiv i32 [[TMP158]], [[D]]1431; CHECK-NEXT:    [[TMP160:%.*]] = insertelement <32 x i32> [[TMP156]], i32 [[TMP159]], i32 311432; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE62]]1433; CHECK:       pred.udiv.continue62:1434; CHECK-NEXT:    [[TMP161:%.*]] = phi <32 x i32> [ [[TMP156]], [[PRED_UDIV_CONTINUE60]] ], [ [[TMP160]], [[PRED_UDIV_IF61]] ]1435; CHECK-NEXT:    [[TMP162:%.*]] = zext <32 x i32> [[TMP161]] to <32 x i64>1436; CHECK-NEXT:    [[PREDPHI:%.*]] = select i1 [[C]], <32 x i64> zeroinitializer, <32 x i64> [[TMP162]]1437; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 321438; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <32 x i32> [[VEC_IND]], splat (i32 32)1439; CHECK-NEXT:    [[TMP163:%.*]] = icmp eq i32 [[INDEX_NEXT]], 9921440; CHECK-NEXT:    br i1 [[TMP163]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]1441; CHECK:       middle.block:1442; CHECK-NEXT:    [[TMP164:%.*]] = extractelement <32 x i64> [[PREDPHI]], i32 311443; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[VEC_EPILOG_ITER_CHECK:%.*]]1444; CHECK:       vec.epilog.iter.check:1445; CHECK-NEXT:    br i1 false, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]], !prof [[PROF17:![0-9]+]]1446; CHECK:       vec.epilog.ph:1447; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 992, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]1448; CHECK-NEXT:    [[BROADCAST_SPLATINSERT63:%.*]] = insertelement <8 x i1> poison, i1 [[C]], i64 01449; CHECK-NEXT:    [[BROADCAST_SPLAT64:%.*]] = shufflevector <8 x i1> [[BROADCAST_SPLATINSERT63]], <8 x i1> poison, <8 x i32> zeroinitializer1450; CHECK-NEXT:    [[TMP165:%.*]] = xor <8 x i1> [[BROADCAST_SPLAT64]], splat (i1 true)1451; CHECK-NEXT:    [[BROADCAST_SPLATINSERT65:%.*]] = insertelement <8 x i32> poison, i32 [[BC_RESUME_VAL]], i64 01452; CHECK-NEXT:    [[BROADCAST_SPLAT66:%.*]] = shufflevector <8 x i32> [[BROADCAST_SPLATINSERT65]], <8 x i32> poison, <8 x i32> zeroinitializer1453; CHECK-NEXT:    [[INDUCTION:%.*]] = add <8 x i32> [[BROADCAST_SPLAT66]], <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1454; CHECK-NEXT:    br label [[VEC_EPILOG_VECTOR_BODY:%.*]]1455; CHECK:       vec.epilog.vector.body:1456; CHECK-NEXT:    [[INDEX67:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT86:%.*]], [[PRED_UDIV_CONTINUE84:%.*]] ]1457; CHECK-NEXT:    [[VEC_IND68:%.*]] = phi <8 x i32> [ [[INDUCTION]], [[VEC_EPILOG_PH]] ], [ [[VEC_IND_NEXT87:%.*]], [[PRED_UDIV_CONTINUE84]] ]1458; CHECK-NEXT:    [[TMP166:%.*]] = call <8 x i32> @llvm.usub.sat.v8i32(<8 x i32> [[VEC_IND68]], <8 x i32> splat (i32 1))1459; CHECK-NEXT:    [[TMP167:%.*]] = extractelement <8 x i1> [[TMP165]], i32 01460; CHECK-NEXT:    br i1 [[TMP167]], label [[PRED_UDIV_IF69:%.*]], label [[PRED_UDIV_CONTINUE70:%.*]]1461; CHECK:       pred.udiv.if69:1462; CHECK-NEXT:    [[TMP168:%.*]] = extractelement <8 x i32> [[TMP166]], i32 01463; CHECK-NEXT:    [[TMP169:%.*]] = udiv i32 [[TMP168]], [[D]]1464; CHECK-NEXT:    [[TMP170:%.*]] = insertelement <8 x i32> poison, i32 [[TMP169]], i32 01465; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE70]]1466; CHECK:       pred.udiv.continue70:1467; CHECK-NEXT:    [[TMP171:%.*]] = phi <8 x i32> [ poison, [[VEC_EPILOG_VECTOR_BODY]] ], [ [[TMP170]], [[PRED_UDIV_IF69]] ]1468; CHECK-NEXT:    [[TMP172:%.*]] = extractelement <8 x i1> [[TMP165]], i32 11469; CHECK-NEXT:    br i1 [[TMP172]], label [[PRED_UDIV_IF71:%.*]], label [[PRED_UDIV_CONTINUE72:%.*]]1470; CHECK:       pred.udiv.if71:1471; CHECK-NEXT:    [[TMP173:%.*]] = extractelement <8 x i32> [[TMP166]], i32 11472; CHECK-NEXT:    [[TMP174:%.*]] = udiv i32 [[TMP173]], [[D]]1473; CHECK-NEXT:    [[TMP175:%.*]] = insertelement <8 x i32> [[TMP171]], i32 [[TMP174]], i32 11474; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE72]]1475; CHECK:       pred.udiv.continue72:1476; CHECK-NEXT:    [[TMP176:%.*]] = phi <8 x i32> [ [[TMP171]], [[PRED_UDIV_CONTINUE70]] ], [ [[TMP175]], [[PRED_UDIV_IF71]] ]1477; CHECK-NEXT:    [[TMP177:%.*]] = extractelement <8 x i1> [[TMP165]], i32 21478; CHECK-NEXT:    br i1 [[TMP177]], label [[PRED_UDIV_IF73:%.*]], label [[PRED_UDIV_CONTINUE74:%.*]]1479; CHECK:       pred.udiv.if73:1480; CHECK-NEXT:    [[TMP178:%.*]] = extractelement <8 x i32> [[TMP166]], i32 21481; CHECK-NEXT:    [[TMP179:%.*]] = udiv i32 [[TMP178]], [[D]]1482; CHECK-NEXT:    [[TMP180:%.*]] = insertelement <8 x i32> [[TMP176]], i32 [[TMP179]], i32 21483; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE74]]1484; CHECK:       pred.udiv.continue74:1485; CHECK-NEXT:    [[TMP181:%.*]] = phi <8 x i32> [ [[TMP176]], [[PRED_UDIV_CONTINUE72]] ], [ [[TMP180]], [[PRED_UDIV_IF73]] ]1486; CHECK-NEXT:    [[TMP182:%.*]] = extractelement <8 x i1> [[TMP165]], i32 31487; CHECK-NEXT:    br i1 [[TMP182]], label [[PRED_UDIV_IF75:%.*]], label [[PRED_UDIV_CONTINUE76:%.*]]1488; CHECK:       pred.udiv.if75:1489; CHECK-NEXT:    [[TMP183:%.*]] = extractelement <8 x i32> [[TMP166]], i32 31490; CHECK-NEXT:    [[TMP184:%.*]] = udiv i32 [[TMP183]], [[D]]1491; CHECK-NEXT:    [[TMP185:%.*]] = insertelement <8 x i32> [[TMP181]], i32 [[TMP184]], i32 31492; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE76]]1493; CHECK:       pred.udiv.continue76:1494; CHECK-NEXT:    [[TMP186:%.*]] = phi <8 x i32> [ [[TMP181]], [[PRED_UDIV_CONTINUE74]] ], [ [[TMP185]], [[PRED_UDIV_IF75]] ]1495; CHECK-NEXT:    [[TMP187:%.*]] = extractelement <8 x i1> [[TMP165]], i32 41496; CHECK-NEXT:    br i1 [[TMP187]], label [[PRED_UDIV_IF77:%.*]], label [[PRED_UDIV_CONTINUE78:%.*]]1497; CHECK:       pred.udiv.if77:1498; CHECK-NEXT:    [[TMP188:%.*]] = extractelement <8 x i32> [[TMP166]], i32 41499; CHECK-NEXT:    [[TMP189:%.*]] = udiv i32 [[TMP188]], [[D]]1500; CHECK-NEXT:    [[TMP190:%.*]] = insertelement <8 x i32> [[TMP186]], i32 [[TMP189]], i32 41501; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE78]]1502; CHECK:       pred.udiv.continue78:1503; CHECK-NEXT:    [[TMP191:%.*]] = phi <8 x i32> [ [[TMP186]], [[PRED_UDIV_CONTINUE76]] ], [ [[TMP190]], [[PRED_UDIV_IF77]] ]1504; CHECK-NEXT:    [[TMP192:%.*]] = extractelement <8 x i1> [[TMP165]], i32 51505; CHECK-NEXT:    br i1 [[TMP192]], label [[PRED_UDIV_IF79:%.*]], label [[PRED_UDIV_CONTINUE80:%.*]]1506; CHECK:       pred.udiv.if79:1507; CHECK-NEXT:    [[TMP193:%.*]] = extractelement <8 x i32> [[TMP166]], i32 51508; CHECK-NEXT:    [[TMP194:%.*]] = udiv i32 [[TMP193]], [[D]]1509; CHECK-NEXT:    [[TMP195:%.*]] = insertelement <8 x i32> [[TMP191]], i32 [[TMP194]], i32 51510; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE80]]1511; CHECK:       pred.udiv.continue80:1512; CHECK-NEXT:    [[TMP196:%.*]] = phi <8 x i32> [ [[TMP191]], [[PRED_UDIV_CONTINUE78]] ], [ [[TMP195]], [[PRED_UDIV_IF79]] ]1513; CHECK-NEXT:    [[TMP197:%.*]] = extractelement <8 x i1> [[TMP165]], i32 61514; CHECK-NEXT:    br i1 [[TMP197]], label [[PRED_UDIV_IF81:%.*]], label [[PRED_UDIV_CONTINUE82:%.*]]1515; CHECK:       pred.udiv.if81:1516; CHECK-NEXT:    [[TMP198:%.*]] = extractelement <8 x i32> [[TMP166]], i32 61517; CHECK-NEXT:    [[TMP199:%.*]] = udiv i32 [[TMP198]], [[D]]1518; CHECK-NEXT:    [[TMP200:%.*]] = insertelement <8 x i32> [[TMP196]], i32 [[TMP199]], i32 61519; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE82]]1520; CHECK:       pred.udiv.continue82:1521; CHECK-NEXT:    [[TMP201:%.*]] = phi <8 x i32> [ [[TMP196]], [[PRED_UDIV_CONTINUE80]] ], [ [[TMP200]], [[PRED_UDIV_IF81]] ]1522; CHECK-NEXT:    [[TMP202:%.*]] = extractelement <8 x i1> [[TMP165]], i32 71523; CHECK-NEXT:    br i1 [[TMP202]], label [[PRED_UDIV_IF83:%.*]], label [[PRED_UDIV_CONTINUE84]]1524; CHECK:       pred.udiv.if83:1525; CHECK-NEXT:    [[TMP203:%.*]] = extractelement <8 x i32> [[TMP166]], i32 71526; CHECK-NEXT:    [[TMP204:%.*]] = udiv i32 [[TMP203]], [[D]]1527; CHECK-NEXT:    [[TMP205:%.*]] = insertelement <8 x i32> [[TMP201]], i32 [[TMP204]], i32 71528; CHECK-NEXT:    br label [[PRED_UDIV_CONTINUE84]]1529; CHECK:       pred.udiv.continue84:1530; CHECK-NEXT:    [[TMP206:%.*]] = phi <8 x i32> [ [[TMP201]], [[PRED_UDIV_CONTINUE82]] ], [ [[TMP205]], [[PRED_UDIV_IF83]] ]1531; CHECK-NEXT:    [[TMP207:%.*]] = zext <8 x i32> [[TMP206]] to <8 x i64>1532; CHECK-NEXT:    [[PREDPHI85:%.*]] = select i1 [[C]], <8 x i64> zeroinitializer, <8 x i64> [[TMP207]]1533; CHECK-NEXT:    [[INDEX_NEXT86]] = add nuw i32 [[INDEX67]], 81534; CHECK-NEXT:    [[VEC_IND_NEXT87]] = add <8 x i32> [[VEC_IND68]], splat (i32 8)1535; CHECK-NEXT:    [[TMP208:%.*]] = icmp eq i32 [[INDEX_NEXT86]], 10001536; CHECK-NEXT:    br i1 [[TMP208]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP18:![0-9]+]]1537; CHECK:       vec.epilog.middle.block:1538; CHECK-NEXT:    [[TMP209:%.*]] = extractelement <8 x i64> [[PREDPHI85]], i32 71539; CHECK-NEXT:    br i1 false, label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]1540; CHECK:       vec.epilog.scalar.ph:1541; CHECK-NEXT:    [[BC_RESUME_VAL88:%.*]] = phi i32 [ 1000, [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ 992, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[ITER_CHECK:%.*]] ]1542; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]1543; CHECK:       loop.header:1544; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL88]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]1545; CHECK-NEXT:    br i1 [[C]], label [[LOOP_LATCH]], label [[THEN:%.*]]1546; CHECK:       then:1547; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @llvm.usub.sat.i32(i32 [[IV]], i32 1)1548; CHECK-NEXT:    [[UDIV:%.*]] = udiv i32 [[CALL]], [[D]]1549; CHECK-NEXT:    [[ZEXT:%.*]] = zext i32 [[UDIV]] to i641550; CHECK-NEXT:    br label [[LOOP_LATCH]]1551; CHECK:       loop.latch:1552; CHECK-NEXT:    [[MERGE:%.*]] = phi i64 [ [[ZEXT]], [[THEN]] ], [ 0, [[LOOP_HEADER]] ]1553; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 11554; CHECK-NEXT:    [[EC:%.*]] = icmp eq i32 [[IV]], 10001555; CHECK-NEXT:    br i1 [[EC]], label [[EXIT]], label [[LOOP_HEADER]], !llvm.loop [[LOOP19:![0-9]+]]1556; CHECK:       exit:1557; CHECK-NEXT:    [[MERGE_LCSSA:%.*]] = phi i64 [ [[MERGE]], [[LOOP_LATCH]] ], [ [[TMP164]], [[MIDDLE_BLOCK]] ], [ [[TMP209]], [[VEC_EPILOG_MIDDLE_BLOCK]] ]1558; CHECK-NEXT:    ret i64 [[MERGE_LCSSA]]1559;1560entry:1561  br label %loop.header1562 1563loop.header:1564  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]1565  br i1 %c, label %loop.latch, label %then1566 1567then:1568  %call = tail call i32 @llvm.usub.sat.i32(i32 %iv, i32 1)1569  %udiv = udiv i32 %call, %d1570  %zext = zext i32 %udiv to i641571  br label %loop.latch1572 1573loop.latch:1574  %merge = phi i64 [ %zext, %then ], [ 0, %loop.header ]1575  %iv.next = add i32 %iv, 11576  %ec = icmp eq i32 %iv, 10001577  br i1 %ec, label %exit, label %loop.header1578 1579exit:1580  ret i64 %merge1581}1582 1583attributes #0 = { "target-cpu"="znver4" }1584attributes #1 = { "target-features"="+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl" }1585attributes #2 = { "target-cpu"="znver3" }1586