brintos

brintos / llvm-project-archived public Read only

0
0
Text · 59.7 KiB · 855a0ce Raw
949 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-vectorize,dce,instcombine -force-vector-width=4 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-else-scalar-epilogue -prefer-predicated-reduction-select -S | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"5 6define i32 @reduction_sum_single(ptr noalias nocapture %A) {7; CHECK-LABEL: @reduction_sum_single(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]10; CHECK:       vector.ph:11; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]12; CHECK:       vector.body:13; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]14; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]15; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP25:%.*]], [[PRED_LOAD_CONTINUE6]] ]16; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)17; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 018; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]19; CHECK:       pred.load.if:20; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]21; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 422; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 023; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]24; CHECK:       pred.load.continue:25; CHECK-NEXT:    [[TMP5:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]26; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <4 x i1> [[TMP0]], i64 127; CHECK-NEXT:    br i1 [[TMP6]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]28; CHECK:       pred.load.if1:29; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]30; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP7]], i32 431; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 432; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP9]], i64 133; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]34; CHECK:       pred.load.continue2:35; CHECK-NEXT:    [[TMP11:%.*]] = phi <4 x i32> [ [[TMP5]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP10]], [[PRED_LOAD_IF1]] ]36; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <4 x i1> [[TMP0]], i64 237; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]38; CHECK:       pred.load.if3:39; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]40; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP13]], i32 841; CHECK-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 442; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <4 x i32> [[TMP11]], i32 [[TMP15]], i64 243; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]44; CHECK:       pred.load.continue4:45; CHECK-NEXT:    [[TMP17:%.*]] = phi <4 x i32> [ [[TMP11]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP16]], [[PRED_LOAD_IF3]] ]46; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <4 x i1> [[TMP0]], i64 347; CHECK-NEXT:    br i1 [[TMP18]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]48; CHECK:       pred.load.if5:49; CHECK-NEXT:    [[TMP19:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]50; CHECK-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP19]], i32 1251; CHECK-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 452; CHECK-NEXT:    [[TMP22:%.*]] = insertelement <4 x i32> [[TMP17]], i32 [[TMP21]], i64 353; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]54; CHECK:       pred.load.continue6:55; CHECK-NEXT:    [[TMP23:%.*]] = phi <4 x i32> [ [[TMP17]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP22]], [[PRED_LOAD_IF5]] ]56; CHECK-NEXT:    [[TMP24:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP23]], <4 x i32> zeroinitializer57; CHECK-NEXT:    [[TMP25]] = add <4 x i32> [[VEC_PHI]], [[TMP24]]58; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 459; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)60; CHECK-NEXT:    [[TMP26:%.*]] = icmp eq i32 [[INDEX_NEXT]], 26061; CHECK-NEXT:    br i1 [[TMP26]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]62; CHECK:       middle.block:63; CHECK-NEXT:    br label [[DOTLR_PH:%.*]]64; CHECK:       ._crit_edge:65; CHECK-NEXT:    [[SUM_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[TMP25]])66; CHECK-NEXT:    ret i32 [[SUM_0_LCSSA]]67;68entry:69  br label %.lr.ph70 71.lr.ph:                                           ; preds = %entry, %.lr.ph72  %indvars.iv = phi i32 [ %indvars.iv.next, %.lr.ph ], [ 0, %entry ]73  %sum.02 = phi i32 [ %l7, %.lr.ph ], [ 0, %entry ]74  %l2 = getelementptr inbounds i32, ptr %A, i32 %indvars.iv75  %l3 = load i32, ptr %l2, align 476  %l7 = add i32 %sum.02, %l377  %indvars.iv.next = add i32 %indvars.iv, 178  %exitcond = icmp eq i32 %indvars.iv.next, 25779  br i1 %exitcond, label %._crit_edge, label %.lr.ph80 81._crit_edge:                                      ; preds = %.lr.ph82  %sum.0.lcssa = phi i32 [ %l7, %.lr.ph ]83  ret i32 %sum.0.lcssa84}85 86define i32 @reduction_sum(ptr noalias nocapture %A, ptr noalias nocapture %B) {87; CHECK-LABEL: @reduction_sum(88; CHECK-NEXT:  entry:89; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]90; CHECK:       vector.ph:91; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]92; CHECK:       vector.body:93; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]94; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]95; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP43:%.*]], [[PRED_LOAD_CONTINUE6]] ]96; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i32> [[VEC_IND]], splat (i32 257)97; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 098; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]99; CHECK:       pred.load.if:100; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]101; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4102; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0103; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[INDEX]]104; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4105; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x i32> poison, i32 [[TMP6]], i64 0106; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]107; CHECK:       pred.load.continue:108; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]109; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]110; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1111; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]112; CHECK:       pred.load.if1:113; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1114; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP11]]115; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4116; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP8]], i32 [[TMP13]], i64 1117; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP11]]118; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4119; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP9]], i32 [[TMP16]], i64 1120; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]121; CHECK:       pred.load.continue2:122; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x i32> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]123; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x i32> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]124; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2125; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]126; CHECK:       pred.load.if3:127; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2128; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP21]]129; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4130; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> [[TMP18]], i32 [[TMP23]], i64 2131; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP21]]132; CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 4133; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i32> [[TMP19]], i32 [[TMP26]], i64 2134; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]135; CHECK:       pred.load.continue4:136; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x i32> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]137; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]138; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3139; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]140; CHECK:       pred.load.if5:141; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3142; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP31]]143; CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4144; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[TMP33]], i64 3145; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP31]]146; CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 4147; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x i32> [[TMP29]], i32 [[TMP36]], i64 3148; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]149; CHECK:       pred.load.continue6:150; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x i32> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]151; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x i32> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]152; CHECK-NEXT:    [[TMP40:%.*]] = add <4 x i32> [[VEC_PHI]], [[VEC_IND]]153; CHECK-NEXT:    [[TMP41:%.*]] = add <4 x i32> [[TMP40]], [[TMP38]]154; CHECK-NEXT:    [[TMP42:%.*]] = add <4 x i32> [[TMP41]], [[TMP39]]155; CHECK-NEXT:    [[TMP43]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP42]], <4 x i32> [[VEC_PHI]]156; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4157; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i32> [[VEC_IND]], splat (i32 4)158; CHECK-NEXT:    [[TMP44:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260159; CHECK-NEXT:    br i1 [[TMP44]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]160; CHECK:       middle.block:161; CHECK-NEXT:    br label [[DOTLR_PH:%.*]]162; CHECK:       ._crit_edge:163; CHECK-NEXT:    [[SUM_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[TMP43]])164; CHECK-NEXT:    ret i32 [[SUM_0_LCSSA]]165;166entry:167  br label %.lr.ph168 169.lr.ph:                                           ; preds = %entry, %.lr.ph170  %indvars.iv = phi i32 [ %indvars.iv.next, %.lr.ph ], [ 0, %entry ]171  %sum.02 = phi i32 [ %l9, %.lr.ph ], [ 0, %entry ]172  %l2 = getelementptr inbounds i32, ptr %A, i32 %indvars.iv173  %l3 = load i32, ptr %l2, align 4174  %l4 = getelementptr inbounds i32, ptr %B, i32 %indvars.iv175  %l5 = load i32, ptr %l4, align 4176  %l7 = add i32 %sum.02, %indvars.iv177  %l8 = add i32 %l7, %l3178  %l9 = add i32 %l8, %l5179  %indvars.iv.next = add i32 %indvars.iv, 1180  %exitcond = icmp eq i32 %indvars.iv.next, 257181  br i1 %exitcond, label %._crit_edge, label %.lr.ph182 183._crit_edge:                                      ; preds = %.lr.ph184  %sum.0.lcssa = phi i32 [ %l9, %.lr.ph ]185  ret i32 %sum.0.lcssa186}187 188define i32 @reduction_prod(ptr noalias nocapture %A, ptr noalias nocapture %B) {189; CHECK-LABEL: @reduction_prod(190; CHECK-NEXT:  entry:191; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]192; CHECK:       vector.ph:193; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]194; CHECK:       vector.body:195; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]196; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]197; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ splat (i32 1), [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]198; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)199; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0200; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]201; CHECK:       pred.load.if:202; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]203; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4204; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0205; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[INDEX]]206; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4207; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x i32> poison, i32 [[TMP6]], i64 0208; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]209; CHECK:       pred.load.continue:210; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]211; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]212; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1213; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]214; CHECK:       pred.load.if1:215; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1216; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP11]]217; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4218; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP8]], i32 [[TMP13]], i64 1219; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP11]]220; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4221; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP9]], i32 [[TMP16]], i64 1222; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]223; CHECK:       pred.load.continue2:224; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x i32> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]225; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x i32> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]226; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2227; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]228; CHECK:       pred.load.if3:229; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2230; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP21]]231; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4232; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> [[TMP18]], i32 [[TMP23]], i64 2233; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP21]]234; CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 4235; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i32> [[TMP19]], i32 [[TMP26]], i64 2236; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]237; CHECK:       pred.load.continue4:238; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x i32> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]239; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]240; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3241; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]242; CHECK:       pred.load.if5:243; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3244; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP31]]245; CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4246; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[TMP33]], i64 3247; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP31]]248; CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 4249; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x i32> [[TMP29]], i32 [[TMP36]], i64 3250; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]251; CHECK:       pred.load.continue6:252; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x i32> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]253; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x i32> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]254; CHECK-NEXT:    [[TMP40:%.*]] = mul <4 x i32> [[VEC_PHI]], [[TMP38]]255; CHECK-NEXT:    [[TMP41:%.*]] = mul <4 x i32> [[TMP40]], [[TMP39]]256; CHECK-NEXT:    [[TMP42]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP41]], <4 x i32> [[VEC_PHI]]257; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4258; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)259; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260260; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]261; CHECK:       middle.block:262; CHECK-NEXT:    br label [[DOTLR_PH:%.*]]263; CHECK:       ._crit_edge:264; CHECK-NEXT:    [[PROD_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> [[TMP42]])265; CHECK-NEXT:    ret i32 [[PROD_0_LCSSA]]266;267entry:268  br label %.lr.ph269 270.lr.ph:                                           ; preds = %entry, %.lr.ph271  %indvars.iv = phi i32 [ %indvars.iv.next, %.lr.ph ], [ 0, %entry ]272  %prod.02 = phi i32 [ %l9, %.lr.ph ], [ 1, %entry ]273  %l2 = getelementptr inbounds i32, ptr %A, i32 %indvars.iv274  %l3 = load i32, ptr %l2, align 4275  %l4 = getelementptr inbounds i32, ptr %B, i32 %indvars.iv276  %l5 = load i32, ptr %l4, align 4277  %l8 = mul i32 %prod.02, %l3278  %l9 = mul i32 %l8, %l5279  %indvars.iv.next = add i32 %indvars.iv, 1280  %exitcond = icmp eq i32 %indvars.iv.next, 257281  br i1 %exitcond, label %._crit_edge, label %.lr.ph282 283._crit_edge:                                      ; preds = %.lr.ph284  %prod.0.lcssa = phi i32 [ %l9, %.lr.ph ]285  ret i32 %prod.0.lcssa286}287 288define i32 @reduction_and(ptr nocapture %A, ptr nocapture %B) {289; CHECK-LABEL: @reduction_and(290; CHECK-NEXT:  entry:291; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]292; CHECK:       vector.ph:293; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]294; CHECK:       vector.body:295; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]296; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]297; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ splat (i32 -1), [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]298; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)299; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0300; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]301; CHECK:       pred.load.if:302; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]303; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4304; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0305; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[INDEX]]306; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4307; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x i32> poison, i32 [[TMP6]], i64 0308; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]309; CHECK:       pred.load.continue:310; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]311; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]312; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1313; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]314; CHECK:       pred.load.if1:315; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1316; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP11]]317; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4318; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP8]], i32 [[TMP13]], i64 1319; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP11]]320; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4321; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP9]], i32 [[TMP16]], i64 1322; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]323; CHECK:       pred.load.continue2:324; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x i32> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]325; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x i32> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]326; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2327; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]328; CHECK:       pred.load.if3:329; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2330; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP21]]331; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4332; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> [[TMP18]], i32 [[TMP23]], i64 2333; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP21]]334; CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 4335; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i32> [[TMP19]], i32 [[TMP26]], i64 2336; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]337; CHECK:       pred.load.continue4:338; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x i32> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]339; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]340; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3341; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]342; CHECK:       pred.load.if5:343; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3344; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP31]]345; CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4346; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[TMP33]], i64 3347; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP31]]348; CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 4349; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x i32> [[TMP29]], i32 [[TMP36]], i64 3350; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]351; CHECK:       pred.load.continue6:352; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x i32> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]353; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x i32> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]354; CHECK-NEXT:    [[TMP40:%.*]] = and <4 x i32> [[TMP38]], [[TMP39]]355; CHECK-NEXT:    [[TMP41:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP40]], <4 x i32> splat (i32 -1)356; CHECK-NEXT:    [[TMP42]] = and <4 x i32> [[VEC_PHI]], [[TMP41]]357; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4358; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)359; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260360; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]361; CHECK:       middle.block:362; CHECK-NEXT:    br label [[FOR_BODY:%.*]]363; CHECK:       for.end:364; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> [[TMP42]])365; CHECK-NEXT:    ret i32 [[RESULT_0_LCSSA]]366;367entry:368  br label %for.body369 370for.body:                                         ; preds = %entry, %for.body371  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]372  %result.08 = phi i32 [ %and, %for.body ], [ -1, %entry ]373  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %indvars.iv374  %l0 = load i32, ptr %arrayidx, align 4375  %arrayidx2 = getelementptr inbounds i32, ptr %B, i32 %indvars.iv376  %l1 = load i32, ptr %arrayidx2, align 4377  %add = and i32 %result.08, %l0378  %and = and i32 %add, %l1379  %indvars.iv.next = add i32 %indvars.iv, 1380  %exitcond = icmp eq i32 %indvars.iv.next, 257381  br i1 %exitcond, label %for.end, label %for.body382 383for.end:                                          ; preds = %for.body, %entry384  %result.0.lcssa = phi i32 [ %and, %for.body ]385  ret i32 %result.0.lcssa386}387 388define i32 @reduction_or(ptr nocapture %A, ptr nocapture %B) {389; CHECK-LABEL: @reduction_or(390; CHECK-NEXT:  entry:391; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]392; CHECK:       vector.ph:393; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]394; CHECK:       vector.body:395; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]396; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]397; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]398; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)399; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0400; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]401; CHECK:       pred.load.if:402; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]403; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4404; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0405; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[INDEX]]406; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4407; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x i32> poison, i32 [[TMP6]], i64 0408; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]409; CHECK:       pred.load.continue:410; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]411; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]412; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1413; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]414; CHECK:       pred.load.if1:415; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1416; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP11]]417; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4418; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP8]], i32 [[TMP13]], i64 1419; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP11]]420; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4421; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP9]], i32 [[TMP16]], i64 1422; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]423; CHECK:       pred.load.continue2:424; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x i32> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]425; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x i32> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]426; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2427; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]428; CHECK:       pred.load.if3:429; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2430; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP21]]431; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4432; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> [[TMP18]], i32 [[TMP23]], i64 2433; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP21]]434; CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 4435; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i32> [[TMP19]], i32 [[TMP26]], i64 2436; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]437; CHECK:       pred.load.continue4:438; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x i32> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]439; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]440; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3441; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]442; CHECK:       pred.load.if5:443; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3444; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP31]]445; CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4446; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[TMP33]], i64 3447; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP31]]448; CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 4449; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x i32> [[TMP29]], i32 [[TMP36]], i64 3450; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]451; CHECK:       pred.load.continue6:452; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x i32> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]453; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x i32> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]454; CHECK-NEXT:    [[TMP40:%.*]] = add nsw <4 x i32> [[TMP39]], [[TMP38]]455; CHECK-NEXT:    [[TMP41:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP40]], <4 x i32> zeroinitializer456; CHECK-NEXT:    [[TMP42]] = or <4 x i32> [[VEC_PHI]], [[TMP41]]457; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4458; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)459; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260460; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]461; CHECK:       middle.block:462; CHECK-NEXT:    br label [[FOR_BODY:%.*]]463; CHECK:       for.end:464; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> [[TMP42]])465; CHECK-NEXT:    ret i32 [[RESULT_0_LCSSA]]466;467entry:468  br label %for.body469 470for.body:                                         ; preds = %entry, %for.body471  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]472  %result.08 = phi i32 [ %or, %for.body ], [ 0, %entry ]473  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %indvars.iv474  %l0 = load i32, ptr %arrayidx, align 4475  %arrayidx2 = getelementptr inbounds i32, ptr %B, i32 %indvars.iv476  %l1 = load i32, ptr %arrayidx2, align 4477  %add = add nsw i32 %l1, %l0478  %or = or i32 %add, %result.08479  %indvars.iv.next = add i32 %indvars.iv, 1480  %exitcond = icmp eq i32 %indvars.iv.next, 257481  br i1 %exitcond, label %for.end, label %for.body482 483for.end:                                          ; preds = %for.body, %entry484  %result.0.lcssa = phi i32 [ %or, %for.body ]485  ret i32 %result.0.lcssa486}487 488define i32 @reduction_xor(ptr nocapture %A, ptr nocapture %B) {489; CHECK-LABEL: @reduction_xor(490; CHECK-NEXT:  entry:491; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]492; CHECK:       vector.ph:493; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]494; CHECK:       vector.body:495; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]496; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]497; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]498; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)499; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0500; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]501; CHECK:       pred.load.if:502; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]503; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4504; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0505; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[INDEX]]506; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4507; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x i32> poison, i32 [[TMP6]], i64 0508; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]509; CHECK:       pred.load.continue:510; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]511; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]512; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1513; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]514; CHECK:       pred.load.if1:515; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1516; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP11]]517; CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4518; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x i32> [[TMP8]], i32 [[TMP13]], i64 1519; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP11]]520; CHECK-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4521; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i32> [[TMP9]], i32 [[TMP16]], i64 1522; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]523; CHECK:       pred.load.continue2:524; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x i32> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]525; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x i32> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]526; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2527; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]528; CHECK:       pred.load.if3:529; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2530; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP21]]531; CHECK-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4532; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x i32> [[TMP18]], i32 [[TMP23]], i64 2533; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP21]]534; CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 4535; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i32> [[TMP19]], i32 [[TMP26]], i64 2536; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]537; CHECK:       pred.load.continue4:538; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x i32> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]539; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]540; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3541; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]542; CHECK:       pred.load.if5:543; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3544; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[TMP31]]545; CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 4546; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x i32> [[TMP28]], i32 [[TMP33]], i64 3547; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[TMP31]]548; CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 4549; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x i32> [[TMP29]], i32 [[TMP36]], i64 3550; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]551; CHECK:       pred.load.continue6:552; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x i32> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]553; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x i32> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]554; CHECK-NEXT:    [[TMP40:%.*]] = add nsw <4 x i32> [[TMP39]], [[TMP38]]555; CHECK-NEXT:    [[TMP41:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP40]], <4 x i32> zeroinitializer556; CHECK-NEXT:    [[TMP42]] = xor <4 x i32> [[VEC_PHI]], [[TMP41]]557; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4558; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)559; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260560; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]561; CHECK:       middle.block:562; CHECK-NEXT:    br label [[FOR_BODY:%.*]]563; CHECK:       for.end:564; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> [[TMP42]])565; CHECK-NEXT:    ret i32 [[RESULT_0_LCSSA]]566;567entry:568  br label %for.body569 570for.body:                                         ; preds = %entry, %for.body571  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]572  %result.08 = phi i32 [ %xor, %for.body ], [ 0, %entry ]573  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %indvars.iv574  %l0 = load i32, ptr %arrayidx, align 4575  %arrayidx2 = getelementptr inbounds i32, ptr %B, i32 %indvars.iv576  %l1 = load i32, ptr %arrayidx2, align 4577  %add = add nsw i32 %l1, %l0578  %xor = xor i32 %add, %result.08579  %indvars.iv.next = add i32 %indvars.iv, 1580  %exitcond = icmp eq i32 %indvars.iv.next, 257581  br i1 %exitcond, label %for.end, label %for.body582 583for.end:                                          ; preds = %for.body, %entry584  %result.0.lcssa = phi i32 [ %xor, %for.body ]585  ret i32 %result.0.lcssa586}587 588define float @reduction_fadd(ptr nocapture %A, ptr nocapture %B) {589; CHECK-LABEL: @reduction_fadd(590; CHECK-NEXT:  entry:591; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]592; CHECK:       vector.ph:593; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]594; CHECK:       vector.body:595; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]596; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]597; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x float> [ zeroinitializer, [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]598; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)599; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0600; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]601; CHECK:       pred.load.if:602; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i32 [[INDEX]]603; CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr [[TMP2]], align 4604; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x float> poison, float [[TMP3]], i64 0605; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i32 [[INDEX]]606; CHECK-NEXT:    [[TMP6:%.*]] = load float, ptr [[TMP5]], align 4607; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x float> poison, float [[TMP6]], i64 0608; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]609; CHECK:       pred.load.continue:610; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x float> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]611; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x float> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]612; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1613; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]614; CHECK:       pred.load.if1:615; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1616; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP11]]617; CHECK-NEXT:    [[TMP13:%.*]] = load float, ptr [[TMP12]], align 4618; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x float> [[TMP8]], float [[TMP13]], i64 1619; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP11]]620; CHECK-NEXT:    [[TMP16:%.*]] = load float, ptr [[TMP15]], align 4621; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x float> [[TMP9]], float [[TMP16]], i64 1622; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]623; CHECK:       pred.load.continue2:624; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x float> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]625; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x float> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]626; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2627; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]628; CHECK:       pred.load.if3:629; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2630; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP21]]631; CHECK-NEXT:    [[TMP23:%.*]] = load float, ptr [[TMP22]], align 4632; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x float> [[TMP18]], float [[TMP23]], i64 2633; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP21]]634; CHECK-NEXT:    [[TMP26:%.*]] = load float, ptr [[TMP25]], align 4635; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x float> [[TMP19]], float [[TMP26]], i64 2636; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]637; CHECK:       pred.load.continue4:638; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x float> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]639; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x float> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]640; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3641; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]642; CHECK:       pred.load.if5:643; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3644; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP31]]645; CHECK-NEXT:    [[TMP33:%.*]] = load float, ptr [[TMP32]], align 4646; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x float> [[TMP28]], float [[TMP33]], i64 3647; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP31]]648; CHECK-NEXT:    [[TMP36:%.*]] = load float, ptr [[TMP35]], align 4649; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x float> [[TMP29]], float [[TMP36]], i64 3650; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]651; CHECK:       pred.load.continue6:652; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x float> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]653; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x float> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]654; CHECK-NEXT:    [[TMP40:%.*]] = fadd fast <4 x float> [[VEC_PHI]], [[TMP38]]655; CHECK-NEXT:    [[TMP41:%.*]] = fadd fast <4 x float> [[TMP40]], [[TMP39]]656; CHECK-NEXT:    [[TMP42]] = select fast <4 x i1> [[TMP0]], <4 x float> [[TMP41]], <4 x float> [[VEC_PHI]]657; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4658; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)659; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260660; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]661; CHECK:       middle.block:662; CHECK-NEXT:    br label [[FOR_BODY:%.*]]663; CHECK:       for.end:664; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call fast float @llvm.vector.reduce.fadd.v4f32(float 0.000000e+00, <4 x float> [[TMP42]])665; CHECK-NEXT:    ret float [[RESULT_0_LCSSA]]666;667entry:668  br label %for.body669 670for.body:                                         ; preds = %entry, %for.body671  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]672  %result.08 = phi float [ %fadd, %for.body ], [ 0.0, %entry ]673  %arrayidx = getelementptr inbounds float, ptr %A, i32 %indvars.iv674  %l0 = load float, ptr %arrayidx, align 4675  %arrayidx2 = getelementptr inbounds float, ptr %B, i32 %indvars.iv676  %l1 = load float, ptr %arrayidx2, align 4677  %add = fadd fast float %result.08, %l0678  %fadd = fadd fast float %add, %l1679  %indvars.iv.next = add i32 %indvars.iv, 1680  %exitcond = icmp eq i32 %indvars.iv.next, 257681  br i1 %exitcond, label %for.end, label %for.body682 683for.end:                                          ; preds = %for.body, %entry684  %result.0.lcssa = phi float [ %fadd, %for.body ]685  ret float %result.0.lcssa686}687 688define float @reduction_fmul(ptr nocapture %A, ptr nocapture %B) {689; CHECK-LABEL: @reduction_fmul(690; CHECK-NEXT:  entry:691; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]692; CHECK:       vector.ph:693; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]694; CHECK:       vector.body:695; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]696; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]697; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x float> [ <float 0.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, [[VECTOR_PH]] ], [ [[TMP42:%.*]], [[PRED_LOAD_CONTINUE6]] ]698; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)699; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0700; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]701; CHECK:       pred.load.if:702; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i32 [[INDEX]]703; CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr [[TMP2]], align 4704; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x float> poison, float [[TMP3]], i64 0705; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i32 [[INDEX]]706; CHECK-NEXT:    [[TMP6:%.*]] = load float, ptr [[TMP5]], align 4707; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <4 x float> poison, float [[TMP6]], i64 0708; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]709; CHECK:       pred.load.continue:710; CHECK-NEXT:    [[TMP8:%.*]] = phi <4 x float> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]711; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x float> [ poison, [[VECTOR_BODY]] ], [ [[TMP7]], [[PRED_LOAD_IF]] ]712; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1713; CHECK-NEXT:    br i1 [[TMP10]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]714; CHECK:       pred.load.if1:715; CHECK-NEXT:    [[TMP11:%.*]] = or disjoint i32 [[INDEX]], 1716; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP11]]717; CHECK-NEXT:    [[TMP13:%.*]] = load float, ptr [[TMP12]], align 4718; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <4 x float> [[TMP8]], float [[TMP13]], i64 1719; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP11]]720; CHECK-NEXT:    [[TMP16:%.*]] = load float, ptr [[TMP15]], align 4721; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x float> [[TMP9]], float [[TMP16]], i64 1722; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]723; CHECK:       pred.load.continue2:724; CHECK-NEXT:    [[TMP18:%.*]] = phi <4 x float> [ [[TMP8]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]725; CHECK-NEXT:    [[TMP19:%.*]] = phi <4 x float> [ [[TMP9]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP17]], [[PRED_LOAD_IF1]] ]726; CHECK-NEXT:    [[TMP20:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2727; CHECK-NEXT:    br i1 [[TMP20]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]728; CHECK:       pred.load.if3:729; CHECK-NEXT:    [[TMP21:%.*]] = or disjoint i32 [[INDEX]], 2730; CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP21]]731; CHECK-NEXT:    [[TMP23:%.*]] = load float, ptr [[TMP22]], align 4732; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <4 x float> [[TMP18]], float [[TMP23]], i64 2733; CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP21]]734; CHECK-NEXT:    [[TMP26:%.*]] = load float, ptr [[TMP25]], align 4735; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x float> [[TMP19]], float [[TMP26]], i64 2736; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]737; CHECK:       pred.load.continue4:738; CHECK-NEXT:    [[TMP28:%.*]] = phi <4 x float> [ [[TMP18]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP24]], [[PRED_LOAD_IF3]] ]739; CHECK-NEXT:    [[TMP29:%.*]] = phi <4 x float> [ [[TMP19]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP27]], [[PRED_LOAD_IF3]] ]740; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3741; CHECK-NEXT:    br i1 [[TMP30]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]742; CHECK:       pred.load.if5:743; CHECK-NEXT:    [[TMP31:%.*]] = or disjoint i32 [[INDEX]], 3744; CHECK-NEXT:    [[TMP32:%.*]] = getelementptr inbounds float, ptr [[A]], i32 [[TMP31]]745; CHECK-NEXT:    [[TMP33:%.*]] = load float, ptr [[TMP32]], align 4746; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <4 x float> [[TMP28]], float [[TMP33]], i64 3747; CHECK-NEXT:    [[TMP35:%.*]] = getelementptr inbounds float, ptr [[B]], i32 [[TMP31]]748; CHECK-NEXT:    [[TMP36:%.*]] = load float, ptr [[TMP35]], align 4749; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <4 x float> [[TMP29]], float [[TMP36]], i64 3750; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]751; CHECK:       pred.load.continue6:752; CHECK-NEXT:    [[TMP38:%.*]] = phi <4 x float> [ [[TMP28]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP34]], [[PRED_LOAD_IF5]] ]753; CHECK-NEXT:    [[TMP39:%.*]] = phi <4 x float> [ [[TMP29]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP37]], [[PRED_LOAD_IF5]] ]754; CHECK-NEXT:    [[TMP40:%.*]] = fmul fast <4 x float> [[VEC_PHI]], [[TMP38]]755; CHECK-NEXT:    [[TMP41:%.*]] = fmul fast <4 x float> [[TMP40]], [[TMP39]]756; CHECK-NEXT:    [[TMP42]] = select fast <4 x i1> [[TMP0]], <4 x float> [[TMP41]], <4 x float> [[VEC_PHI]]757; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4758; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)759; CHECK-NEXT:    [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260760; CHECK-NEXT:    br i1 [[TMP43]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]761; CHECK:       middle.block:762; CHECK-NEXT:    br label [[FOR_BODY:%.*]]763; CHECK:       for.end:764; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call fast float @llvm.vector.reduce.fmul.v4f32(float 1.000000e+00, <4 x float> [[TMP42]])765; CHECK-NEXT:    ret float [[RESULT_0_LCSSA]]766;767entry:768  br label %for.body769 770for.body:                                         ; preds = %entry, %for.body771  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]772  %result.08 = phi float [ %fmul, %for.body ], [ 0.0, %entry ]773  %arrayidx = getelementptr inbounds float, ptr %A, i32 %indvars.iv774  %l0 = load float, ptr %arrayidx, align 4775  %arrayidx2 = getelementptr inbounds float, ptr %B, i32 %indvars.iv776  %l1 = load float, ptr %arrayidx2, align 4777  %add = fmul fast float %result.08, %l0778  %fmul = fmul fast float %add, %l1779  %indvars.iv.next = add i32 %indvars.iv, 1780  %exitcond = icmp eq i32 %indvars.iv.next, 257781  br i1 %exitcond, label %for.end, label %for.body782 783for.end:                                          ; preds = %for.body, %entry784  %result.0.lcssa = phi float [ %fmul, %for.body ]785  ret float %result.0.lcssa786}787 788define i32 @reduction_min(ptr nocapture %A, ptr nocapture %B) {789; CHECK-LABEL: @reduction_min(790; CHECK-NEXT:  entry:791; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]792; CHECK:       vector.ph:793; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]794; CHECK:       vector.body:795; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]796; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]797; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ splat (i32 1000), [[VECTOR_PH]] ], [ [[TMP25:%.*]], [[PRED_LOAD_CONTINUE6]] ]798; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)799; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0800; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]801; CHECK:       pred.load.if:802; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]803; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4804; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0805; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]806; CHECK:       pred.load.continue:807; CHECK-NEXT:    [[TMP5:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]808; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1809; CHECK-NEXT:    br i1 [[TMP6]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]810; CHECK:       pred.load.if1:811; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]812; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP7]], i32 4813; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4814; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP9]], i64 1815; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]816; CHECK:       pred.load.continue2:817; CHECK-NEXT:    [[TMP11:%.*]] = phi <4 x i32> [ [[TMP5]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP10]], [[PRED_LOAD_IF1]] ]818; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2819; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]820; CHECK:       pred.load.if3:821; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]822; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP13]], i32 8823; CHECK-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 4824; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <4 x i32> [[TMP11]], i32 [[TMP15]], i64 2825; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]826; CHECK:       pred.load.continue4:827; CHECK-NEXT:    [[TMP17:%.*]] = phi <4 x i32> [ [[TMP11]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP16]], [[PRED_LOAD_IF3]] ]828; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3829; CHECK-NEXT:    br i1 [[TMP18]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]830; CHECK:       pred.load.if5:831; CHECK-NEXT:    [[TMP19:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]832; CHECK-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP19]], i32 12833; CHECK-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 4834; CHECK-NEXT:    [[TMP22:%.*]] = insertelement <4 x i32> [[TMP17]], i32 [[TMP21]], i64 3835; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]836; CHECK:       pred.load.continue6:837; CHECK-NEXT:    [[TMP23:%.*]] = phi <4 x i32> [ [[TMP17]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP22]], [[PRED_LOAD_IF5]] ]838; CHECK-NEXT:    [[TMP24:%.*]] = call <4 x i32> @llvm.smin.v4i32(<4 x i32> [[VEC_PHI]], <4 x i32> [[TMP23]])839; CHECK-NEXT:    [[TMP25]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP24]], <4 x i32> [[VEC_PHI]]840; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4841; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)842; CHECK-NEXT:    [[TMP26:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260843; CHECK-NEXT:    br i1 [[TMP26]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]844; CHECK:       middle.block:845; CHECK-NEXT:    br label [[FOR_BODY:%.*]]846; CHECK:       for.end:847; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> [[TMP25]])848; CHECK-NEXT:    ret i32 [[RESULT_0_LCSSA]]849;850entry:851  br label %for.body852 853for.body:                                         ; preds = %entry, %for.body854  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]855  %result.08 = phi i32 [ %v0, %for.body ], [ 1000, %entry ]856  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %indvars.iv857  %l0 = load i32, ptr %arrayidx, align 4858  %c0 = icmp slt i32 %result.08, %l0859  %v0 = select i1 %c0, i32 %result.08, i32 %l0860  %indvars.iv.next = add i32 %indvars.iv, 1861  %exitcond = icmp eq i32 %indvars.iv.next, 257862  br i1 %exitcond, label %for.end, label %for.body863 864for.end:                                          ; preds = %for.body, %entry865  %result.0.lcssa = phi i32 [ %v0, %for.body ]866  ret i32 %result.0.lcssa867}868 869define i32 @reduction_max(ptr nocapture %A, ptr nocapture %B) {870; CHECK-LABEL: @reduction_max(871; CHECK-NEXT:  entry:872; CHECK-NEXT:    br label [[VECTOR_PH:%.*]]873; CHECK:       vector.ph:874; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]875; CHECK:       vector.body:876; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[PRED_LOAD_CONTINUE6:%.*]] ]877; CHECK-NEXT:    [[VEC_IND:%.*]] = phi <4 x i16> [ <i16 0, i16 1, i16 2, i16 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[PRED_LOAD_CONTINUE6]] ]878; CHECK-NEXT:    [[VEC_PHI:%.*]] = phi <4 x i32> [ splat (i32 1000), [[VECTOR_PH]] ], [ [[TMP25:%.*]], [[PRED_LOAD_CONTINUE6]] ]879; CHECK-NEXT:    [[TMP0:%.*]] = icmp ult <4 x i16> [[VEC_IND]], splat (i16 257)880; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i1> [[TMP0]], i64 0881; CHECK-NEXT:    br i1 [[TMP1]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]882; CHECK:       pred.load.if:883; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[INDEX]]884; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4885; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x i32> poison, i32 [[TMP3]], i64 0886; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE]]887; CHECK:       pred.load.continue:888; CHECK-NEXT:    [[TMP5:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP4]], [[PRED_LOAD_IF]] ]889; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <4 x i1> [[TMP0]], i64 1890; CHECK-NEXT:    br i1 [[TMP6]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]891; CHECK:       pred.load.if1:892; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]893; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr i8, ptr [[TMP7]], i32 4894; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4895; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <4 x i32> [[TMP5]], i32 [[TMP9]], i64 1896; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE2]]897; CHECK:       pred.load.continue2:898; CHECK-NEXT:    [[TMP11:%.*]] = phi <4 x i32> [ [[TMP5]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP10]], [[PRED_LOAD_IF1]] ]899; CHECK-NEXT:    [[TMP12:%.*]] = extractelement <4 x i1> [[TMP0]], i64 2900; CHECK-NEXT:    br i1 [[TMP12]], label [[PRED_LOAD_IF3:%.*]], label [[PRED_LOAD_CONTINUE4:%.*]]901; CHECK:       pred.load.if3:902; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]903; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr i8, ptr [[TMP13]], i32 8904; CHECK-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 4905; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <4 x i32> [[TMP11]], i32 [[TMP15]], i64 2906; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE4]]907; CHECK:       pred.load.continue4:908; CHECK-NEXT:    [[TMP17:%.*]] = phi <4 x i32> [ [[TMP11]], [[PRED_LOAD_CONTINUE2]] ], [ [[TMP16]], [[PRED_LOAD_IF3]] ]909; CHECK-NEXT:    [[TMP18:%.*]] = extractelement <4 x i1> [[TMP0]], i64 3910; CHECK-NEXT:    br i1 [[TMP18]], label [[PRED_LOAD_IF5:%.*]], label [[PRED_LOAD_CONTINUE6]]911; CHECK:       pred.load.if5:912; CHECK-NEXT:    [[TMP19:%.*]] = getelementptr i32, ptr [[A]], i32 [[INDEX]]913; CHECK-NEXT:    [[TMP20:%.*]] = getelementptr i8, ptr [[TMP19]], i32 12914; CHECK-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 4915; CHECK-NEXT:    [[TMP22:%.*]] = insertelement <4 x i32> [[TMP17]], i32 [[TMP21]], i64 3916; CHECK-NEXT:    br label [[PRED_LOAD_CONTINUE6]]917; CHECK:       pred.load.continue6:918; CHECK-NEXT:    [[TMP23:%.*]] = phi <4 x i32> [ [[TMP17]], [[PRED_LOAD_CONTINUE4]] ], [ [[TMP22]], [[PRED_LOAD_IF5]] ]919; CHECK-NEXT:    [[TMP24:%.*]] = call <4 x i32> @llvm.umax.v4i32(<4 x i32> [[VEC_PHI]], <4 x i32> [[TMP23]])920; CHECK-NEXT:    [[TMP25]] = select <4 x i1> [[TMP0]], <4 x i32> [[TMP24]], <4 x i32> [[VEC_PHI]]921; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4922; CHECK-NEXT:    [[VEC_IND_NEXT]] = add <4 x i16> [[VEC_IND]], splat (i16 4)923; CHECK-NEXT:    [[TMP26:%.*]] = icmp eq i32 [[INDEX_NEXT]], 260924; CHECK-NEXT:    br i1 [[TMP26]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]925; CHECK:       middle.block:926; CHECK-NEXT:    br label [[FOR_BODY:%.*]]927; CHECK:       for.end:928; CHECK-NEXT:    [[RESULT_0_LCSSA:%.*]] = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> [[TMP25]])929; CHECK-NEXT:    ret i32 [[RESULT_0_LCSSA]]930;931entry:932  br label %for.body933 934for.body:                                         ; preds = %entry, %for.body935  %indvars.iv = phi i32 [ %indvars.iv.next, %for.body ], [ 0, %entry ]936  %result.08 = phi i32 [ %v0, %for.body ], [ 1000, %entry ]937  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %indvars.iv938  %l0 = load i32, ptr %arrayidx, align 4939  %c0 = icmp ugt i32 %result.08, %l0940  %v0 = select i1 %c0, i32 %result.08, i32 %l0941  %indvars.iv.next = add i32 %indvars.iv, 1942  %exitcond = icmp eq i32 %indvars.iv.next, 257943  br i1 %exitcond, label %for.end, label %for.body944 945for.end:                                          ; preds = %for.body, %entry946  %result.0.lcssa = phi i32 [ %v0, %for.body ]947  ret i32 %result.0.lcssa948}949