brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.1 KiB · a4a9de7 Raw
422 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3define double @test_mul_fast_flags(ptr %arr_d) {4; CHECK-LABEL: @test_mul_fast_flags(5; CHECK-NEXT:  entry:6; CHECK-NEXT:    br label [[FOR_BODY:%.*]]7; CHECK:       for.body:8; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]9; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 110; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 99911; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]12; CHECK:       end:13; CHECK-NEXT:    ret double 0.000000e+0014;15entry:16  br label %for.body17 18for.body:                                         ; preds = %entry, %for.body19  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]20  %f_prod.01 = phi double [ 0.000000e+00, %entry ], [ %mul, %for.body ]21  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.0222  %0 = load double, ptr %arrayidx, align 823  %mul = fmul fast double %f_prod.01, %024  %inc = add i64 %i.02, 125  %cmp = icmp ult i64 %inc, 100026  br i1 %cmp, label %for.body, label %end27 28end:                                              ; preds = %for.body29  %f_prod.0.lcssa = phi double [ %mul, %for.body ]30  ret double %f_prod.0.lcssa31}32 33define double @test_nsz_nnan_flags_enabled(ptr %arr_d) {34; CHECK-LABEL: @test_nsz_nnan_flags_enabled(35; CHECK-NEXT:  entry:36; CHECK-NEXT:    br label [[FOR_BODY:%.*]]37; CHECK:       for.body:38; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]39; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 140; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 99941; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]42; CHECK:       end:43; CHECK-NEXT:    ret double 0.000000e+0044;45entry:46  br label %for.body47 48for.body:                                         ; preds = %entry, %for.body49  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]50  %f_prod.01 = phi double [ 0.000000e+00, %entry ], [ %mul, %for.body ]51  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.0252  %0 = load double, ptr %arrayidx, align 853  %mul = fmul nsz nnan double %f_prod.01, %054  %inc = add i64 %i.02, 155  %cmp = icmp ult i64 %inc, 100056  br i1 %cmp, label %for.body, label %end57 58end:                                              ; preds = %for.body59  %f_prod.0.lcssa = phi double [ %mul, %for.body ]60  ret double %f_prod.0.lcssa61}62 63define double @test_nnan_flag_enabled(ptr %arr_d) {64; CHECK-LABEL: @test_nnan_flag_enabled(65; CHECK-NEXT:  entry:66; CHECK-NEXT:    br label [[FOR_BODY:%.*]]67; CHECK:       for.body:68; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]69; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]70; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]71; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 872; CHECK-NEXT:    [[MUL]] = fmul nnan double [[F_PROD_01]], [[TMP0]]73; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 174; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 99975; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]76; CHECK:       end:77; CHECK-NEXT:    ret double [[MUL]]78;79entry:80  br label %for.body81 82for.body:                                         ; preds = %entry, %for.body83  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]84  %f_prod.01 = phi double [ 0.000000e+00, %entry ], [ %mul, %for.body ]85  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.0286  %0 = load double, ptr %arrayidx, align 887  %mul = fmul nnan double %f_prod.01, %088  %inc = add i64 %i.02, 189  %cmp = icmp ult i64 %inc, 100090  br i1 %cmp, label %for.body, label %end91 92end:                                              ; preds = %for.body93  %f_prod.0.lcssa = phi double [ %mul, %for.body ]94  ret double %f_prod.0.lcssa95}96 97define double @test_ninf_flag_enabled(ptr %arr_d) {98; CHECK-LABEL: @test_ninf_flag_enabled(99; CHECK-NEXT:  entry:100; CHECK-NEXT:    br label [[FOR_BODY:%.*]]101; CHECK:       for.body:102; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]103; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]104; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]105; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8106; CHECK-NEXT:    [[MUL]] = fmul ninf double [[F_PROD_01]], [[TMP0]]107; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1108; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 999109; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]110; CHECK:       end:111; CHECK-NEXT:    ret double [[MUL]]112;113entry:114  br label %for.body115 116for.body:                                         ; preds = %entry, %for.body117  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]118  %f_prod.01 = phi double [ 0.000000e+00, %entry ], [ %mul, %for.body ]119  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.02120  %0 = load double, ptr %arrayidx, align 8121  %mul = fmul ninf double %f_prod.01, %0122  %inc = add i64 %i.02, 1123  %cmp = icmp ult i64 %inc, 1000124  br i1 %cmp, label %for.body, label %end125 126end:                                              ; preds = %for.body127  %f_prod.0.lcssa = phi double [ %mul, %for.body ]128  ret double %f_prod.0.lcssa129}130 131define double @test_nsz_flag_enabled(ptr %arr_d) {132; CHECK-LABEL: @test_nsz_flag_enabled(133; CHECK-NEXT:  entry:134; CHECK-NEXT:    br label [[FOR_BODY:%.*]]135; CHECK:       for.body:136; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]137; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]138; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]139; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8140; CHECK-NEXT:    [[MUL]] = fmul nsz double [[F_PROD_01]], [[TMP0]]141; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1142; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 999143; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]144; CHECK:       end:145; CHECK-NEXT:    ret double [[MUL]]146;147entry:148  br label %for.body149 150for.body:                                         ; preds = %entry, %for.body151  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]152  %f_prod.01 = phi double [ 0.000000e+00, %entry ], [ %mul, %for.body ]153  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.02154  %0 = load double, ptr %arrayidx, align 8155  %mul = fmul nsz double %f_prod.01, %0156  %inc = add i64 %i.02, 1157  %cmp = icmp ult i64 %inc, 1000158  br i1 %cmp, label %for.body, label %end159 160end:                                              ; preds = %for.body161  %f_prod.0.lcssa = phi double [ %mul, %for.body ]162  ret double %f_prod.0.lcssa163}164 165define double @test_phi_initalise_to_non_zero(ptr %arr_d) {166; CHECK-LABEL: @test_phi_initalise_to_non_zero(167; CHECK-NEXT:  entry:168; CHECK-NEXT:    br label [[FOR_BODY:%.*]]169; CHECK:       for.body:170; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]171; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 1.000000e+00, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]172; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]173; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8174; CHECK-NEXT:    [[MUL]] = fmul fast double [[F_PROD_01]], [[TMP0]]175; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1176; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 999177; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]178; CHECK:       end:179; CHECK-NEXT:    ret double [[MUL]]180;181entry:182  br label %for.body183 184for.body:                                         ; preds = %entry, %for.body185  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]186  %f_prod.01 = phi double [ 1.000000e+00, %entry ], [ %mul, %for.body ]187  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.02188  %0 = load double, ptr %arrayidx, align 8189  %mul = fmul fast double %f_prod.01, %0190  %inc = add i64 %i.02, 1191  %cmp = icmp ult i64 %inc, 1000192  br i1 %cmp, label %for.body, label %end193 194end:                                              ; preds = %for.body195  %f_prod.0.lcssa = phi double [ %mul, %for.body ]196  ret double %f_prod.0.lcssa197}198 199define double @test_multiple_phi_operands(ptr %arr_d, i1 %entry_cond) {200; CHECK-LABEL: @test_multiple_phi_operands(201; CHECK-NEXT:  entry:202; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]203; CHECK:       entry_2:204; CHECK-NEXT:    br label [[FOR_BODY]]205; CHECK:       for.body:206; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ 0, [[ENTRY_2]] ], [ [[INC:%.*]], [[FOR_BODY]] ]207; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ 0.000000e+00, [[ENTRY_2]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]208; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]209; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8210; CHECK-NEXT:    [[MUL]] = fmul fast double [[F_PROD_01]], [[TMP0]]211; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1212; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[I_02]], 999213; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]214; CHECK:       end:215; CHECK-NEXT:    ret double [[MUL]]216;217entry:218  br i1 %entry_cond, label %for.body, label %entry_2219 220entry_2:221  br label %for.body222 223for.body:                                         ; preds = %entry, %for.body224  %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]225  %f_prod.01 = phi double [ 0.0, %entry ], [0.0, %entry_2], [ %mul, %for.body ]226  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.02227  %0 = load double, ptr %arrayidx, align 8228  %mul = fmul fast double %f_prod.01, %0229  %inc = add i64 %i.02, 1230  %cmp = icmp ult i64 %inc, 1000231  br i1 %cmp, label %for.body, label %end232 233end:                                              ; preds = %for.body234  %f_prod.0.lcssa = phi double [ %mul, %for.body ]235  ret double %f_prod.0.lcssa236}237 238define double @test_multiple_phi_operands_with_non_zero(ptr %arr_d, i1 %entry_cond) {239; CHECK-LABEL: @test_multiple_phi_operands_with_non_zero(240; CHECK-NEXT:  entry:241; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]242; CHECK:       entry_2:243; CHECK-NEXT:    br label [[FOR_BODY]]244; CHECK:       for.body:245; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ 0, [[ENTRY_2]] ], [ [[INC:%.*]], [[FOR_BODY]] ]246; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi double [ 1.000000e+00, [[ENTRY]] ], [ 0.000000e+00, [[ENTRY_2]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]247; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw double, ptr [[ARR_D:%.*]], i64 [[I_02]]248; CHECK-NEXT:    [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8249; CHECK-NEXT:    [[MUL]] = fmul fast double [[F_PROD_01]], [[TMP0]]250; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1251; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[I_02]], 999252; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]253; CHECK:       end:254; CHECK-NEXT:    ret double [[MUL]]255;256entry:257  br i1 %entry_cond, label %for.body, label %entry_2258 259entry_2:260  br label %for.body261 262for.body:                                         ; preds = %entry, %for.body263  %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]264  %f_prod.01 = phi double [ 1.0, %entry ], [0.0, %entry_2], [ %mul, %for.body ]265  %arrayidx = getelementptr inbounds [1000 x double], ptr %arr_d, i64 0, i64 %i.02266  %0 = load double, ptr %arrayidx, align 8267  %mul = fmul fast double %f_prod.01, %0268  %inc = add i64 %i.02, 1269  %cmp = icmp ult i64 %inc, 1000270  br i1 %cmp, label %for.body, label %end271 272end:                                              ; preds = %for.body273  %f_prod.0.lcssa = phi double [ %mul, %for.body ]274  ret double %f_prod.0.lcssa275}276 277define i32 @test_int_phi_operands(ptr %arr_d) {278; CHECK-LABEL: @test_int_phi_operands(279; CHECK-NEXT:  entry:280; CHECK-NEXT:    br label [[FOR_BODY:%.*]]281; CHECK:       for.body:282; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]283; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]284; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR_D:%.*]], i64 [[I_02]]285; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4286; CHECK-NEXT:    [[MUL]] = mul nsw i32 [[F_PROD_01]], [[TMP0]]287; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1288; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 999289; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]290; CHECK:       end:291; CHECK-NEXT:    ret i32 [[MUL]]292;293entry:294  br label %for.body295 296for.body:                                         ; preds = %entry, %for.body297  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]298  %f_prod.01 = phi i32 [ 0, %entry ], [ %mul, %for.body ]299  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02300  %0 = load i32, ptr %arrayidx, align 4301  %mul = mul nsw i32 %f_prod.01, %0302  %inc = add i64 %i.02, 1303  %cmp = icmp ult i64 %inc, 1000304  br i1 %cmp, label %for.body, label %end305 306end:                                 ; preds = %for.body307  %f_prod.0.lcssa = phi i32 [ %mul, %for.body ]308  ret i32 %f_prod.0.lcssa309}310 311define i32 @test_int_phi_operands_initalise_to_non_zero(ptr %arr_d) {312; CHECK-LABEL: @test_int_phi_operands_initalise_to_non_zero(313; CHECK-NEXT:  entry:314; CHECK-NEXT:    br label [[FOR_BODY:%.*]]315; CHECK:       for.body:316; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]317; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi i32 [ 1, [[ENTRY]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]318; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR_D:%.*]], i64 [[I_02]]319; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4320; CHECK-NEXT:    [[MUL]] = mul i32 [[F_PROD_01]], [[TMP0]]321; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1322; CHECK-NEXT:    [[CMP:%.*]] = icmp samesign ult i64 [[I_02]], 999323; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]324; CHECK:       end:325; CHECK-NEXT:    ret i32 [[MUL]]326;327entry:328  br label %for.body329 330for.body:                                         ; preds = %entry, %for.body331  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]332  %f_prod.01 = phi i32 [ 1, %entry ], [ %mul, %for.body ]333  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02334  %0 = load i32, ptr %arrayidx, align 4335  %mul = mul i32 %f_prod.01, %0336  %inc = add i64 %i.02, 1337  %cmp = icmp ult i64 %inc, 1000338  br i1 %cmp, label %for.body, label %end339 340end:                                 ; preds = %for.body341  %f_prod.0.lcssa = phi i32 [ %mul, %for.body ]342  ret i32 %f_prod.0.lcssa343}344 345define i32 @test_multiple_int_phi_operands(ptr %arr_d, i1 %entry_cond) {346; CHECK-LABEL: @test_multiple_int_phi_operands(347; CHECK-NEXT:  entry:348; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]349; CHECK:       entry_2:350; CHECK-NEXT:    br label [[FOR_BODY]]351; CHECK:       for.body:352; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ 0, [[ENTRY_2]] ], [ [[INC:%.*]], [[FOR_BODY]] ]353; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ 0, [[ENTRY_2]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]354; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR_D:%.*]], i64 [[I_02]]355; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4356; CHECK-NEXT:    [[MUL]] = mul i32 [[F_PROD_01]], [[TMP0]]357; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1358; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[I_02]], 999359; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]360; CHECK:       end:361; CHECK-NEXT:    ret i32 [[MUL]]362;363entry:364  br i1 %entry_cond, label %for.body, label %entry_2365 366entry_2:367  br label %for.body368 369for.body:                                         ; preds = %entry, %for.body370  %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]371  %f_prod.01 = phi i32 [ 0, %entry ], [0, %entry_2], [ %mul, %for.body ]372  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02373  %0 = load i32, ptr %arrayidx, align 4374  %mul = mul i32 %f_prod.01, %0375  %inc = add i64 %i.02, 1376  %cmp = icmp ult i64 %inc, 1000377  br i1 %cmp, label %for.body, label %end378 379end:                                              ; preds = %for.body380  %f_prod.0.lcssa = phi i32 [ %mul, %for.body ]381  ret i32 %f_prod.0.lcssa382}383 384define i32 @test_multiple_int_phi_operands_initalise_to_non_zero(ptr %arr_d, i1 %entry_cond) {385; CHECK-LABEL: @test_multiple_int_phi_operands_initalise_to_non_zero(386; CHECK-NEXT:  entry:387; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]388; CHECK:       entry_2:389; CHECK-NEXT:    br label [[FOR_BODY]]390; CHECK:       for.body:391; CHECK-NEXT:    [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ 0, [[ENTRY_2]] ], [ [[INC:%.*]], [[FOR_BODY]] ]392; CHECK-NEXT:    [[F_PROD_01:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ 1, [[ENTRY_2]] ], [ [[MUL:%.*]], [[FOR_BODY]] ]393; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR_D:%.*]], i64 [[I_02]]394; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4395; CHECK-NEXT:    [[MUL]] = mul i32 [[F_PROD_01]], [[TMP0]]396; CHECK-NEXT:    [[INC]] = add nuw nsw i64 [[I_02]], 1397; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i64 [[I_02]], 999398; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]399; CHECK:       end:400; CHECK-NEXT:    ret i32 [[MUL]]401;402entry:403  br i1 %entry_cond, label %for.body, label %entry_2404 405entry_2:406  br label %for.body407 408for.body:                                         ; preds = %entry, %for.body409  %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]410  %f_prod.01 = phi i32 [ 0, %entry ], [1, %entry_2], [ %mul, %for.body ]411  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02412  %0 = load i32, ptr %arrayidx, align 4413  %mul = mul i32 %f_prod.01, %0414  %inc = add i64 %i.02, 1415  %cmp = icmp ult i64 %inc, 1000416  br i1 %cmp, label %for.body, label %end417 418end:                                              ; preds = %for.body419  %f_prod.0.lcssa = phi i32 [ %mul, %for.body ]420  ret i32 %f_prod.0.lcssa421}422