@@ -304,32 +304,43 @@ end:
304304define void @pr106083_invalidBBarg_fold (i1 %cmp1 , i1 %cmp2 , i1 %not , ptr %d ) {
305305; CHECK-LABEL: @pr106083_invalidBBarg_fold(
306306; CHECK-NEXT: bb:
307- ; CHECK-NEXT: br i1 [[CMP1:%.*]], label [[BB1:%.*]], label [[SEL_SI_UNFOLD_FALSE:%.*]]
308- ; CHECK: sel.si.unfold.false:
309- ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI1:%.*]] = phi i32 [ 1, [[BB:%.*]] ]
310- ; CHECK-NEXT: br label [[BB1]]
307+ ; CHECK-NEXT: br label [[BB1:%.*]]
311308; CHECK: BB1:
312- ; CHECK-NEXT: [[I:%.*]] = phi i16 [ 0, [[BB1_BACKEDGE:%.*]] ], [ 0, [[BB]] ], [ 1, [[BB7:%.*]] ], [ 0, [[SEL_SI_UNFOLD_FALSE]] ], [ 1, [[BB7_JT0:%.*]] ]
313- ; CHECK-NEXT: [[SEL_SI_UNFOLD_PHI:%.*]] = phi i32 [ [[SEL_SI_UNFOLD_PHI]], [[BB1_BACKEDGE]] ], [ [[SEL_SI_UNFOLD_PHI]], [[BB7]] ], [ 0, [[BB]] ], [ [[DOTSI_UNFOLD_PHI1]], [[SEL_SI_UNFOLD_FALSE]] ], [ [[SEL_SI_UNFOLD_PHI]], [[BB7_JT0]] ]
309+ ; CHECK-NEXT: [[I:%.*]] = phi i16 [ 0, [[BB1_BACKEDGE:%.*]] ], [ 0, [[BB:%.*]] ], [ 1, [[BB9:%.*]] ], [ 1, [[BB7_JT0:%.*]] ]
314310; CHECK-NEXT: br i1 [[NOT:%.*]], label [[BB7_JT0]], label [[BB2:%.*]]
315311; CHECK: BB2:
316312; CHECK-NEXT: store i16 0, ptr [[D:%.*]], align 2
317- ; CHECK-NEXT: br i1 [[CMP2:%.*]], label [[BB7]], label [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0:%.*]]
313+ ; CHECK-NEXT: br i1 [[CMP2:%.*]], label [[BB7:%.* ]], label [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0:%.*]]
318314; CHECK: spec.select.si.unfold.false:
319- ; CHECK-NEXT: br label [[BB7 ]]
315+ ; CHECK-NEXT: br label [[BB9 ]]
320316; CHECK: spec.select.si.unfold.false.jt0:
321317; CHECK-NEXT: [[DOTSI_UNFOLD_PHI_JT0:%.*]] = phi i32 [ 0, [[BB2]] ]
322318; CHECK-NEXT: br label [[BB7_JT0]]
319+ ; CHECK: sel.si.unfold.true:
320+ ; CHECK-NEXT: br i1 [[CMP1:%.*]], label [[BB9]], label [[SEL_SI_UNFOLD_FALSE_JT1:%.*]]
321+ ; CHECK: sel.si.unfold.true.jt0:
322+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI1:%.*]] = phi i32 [ 0, [[BB2]] ]
323+ ; CHECK-NEXT: br i1 [[CMP1]], label [[BB7_JT0]], label [[SEL_SI_UNFOLD_FALSE:%.*]]
324+ ; CHECK: sel.si.unfold.false:
325+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI2:%.*]] = phi i32 [ 1, [[BB7]] ]
326+ ; CHECK-NEXT: br label [[BB9]]
327+ ; CHECK: sel.si.unfold.false.jt1:
328+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI2_JT1:%.*]] = phi i32 [ 1, [[SEL_SI_UNFOLD_TRUE:%.*]] ]
329+ ; CHECK-NEXT: br label [[BB7_JT1:%.*]]
323330; CHECK: BB7:
324- ; CHECK-NEXT: [[D_PROMOTED4:%.*]] = phi i16 [ 1, [[BB2 ]] ], [ 1, [[SPEC_SELECT_SI_UNFOLD_FALSE:%.* ]] ]
325- ; CHECK-NEXT: [[_3:%.*]] = phi i32 [ [[SEL_SI_UNFOLD_PHI]] , [[BB2 ]] ], [ poison , [[SPEC_SELECT_SI_UNFOLD_FALSE ]] ]
331+ ; CHECK-NEXT: [[D_PROMOTED4:%.*]] = phi i16 [ 1, [[SPEC_SELECT_SI_UNFOLD_FALSE:%.* ]] ], [ 1, [[SEL_SI_UNFOLD_TRUE]] ], [ 1, [[SEL_SI_UNFOLD_FALSE ]] ]
332+ ; CHECK-NEXT: [[_3:%.*]] = phi i32 [ poison, [[SPEC_SELECT_SI_UNFOLD_FALSE]] ] , [ poison, [[SEL_SI_UNFOLD_TRUE ]] ], [ [[DOTSI_UNFOLD_PHI2]] , [[SEL_SI_UNFOLD_FALSE ]] ]
326333; CHECK-NEXT: switch i32 [[_3]], label [[BB1_BACKEDGE]] [
327334; CHECK-NEXT: i32 0, label [[BB1]]
328335; CHECK-NEXT: i32 1, label [[BB8:%.*]]
329336; CHECK-NEXT: ]
337+ ; CHECK: BB7.jt1:
338+ ; CHECK-NEXT: [[D_PROMOTED4_JT1:%.*]] = phi i16 [ 1, [[SEL_SI_UNFOLD_FALSE_JT1]] ]
339+ ; CHECK-NEXT: [[_3_JT1:%.*]] = phi i32 [ [[DOTSI_UNFOLD_PHI2_JT1]], [[SEL_SI_UNFOLD_FALSE_JT1]] ]
340+ ; CHECK-NEXT: br label [[BB8]]
330341; CHECK: BB7.jt0:
331- ; CHECK-NEXT: [[D_PROMOTED4_JT0:%.*]] = phi i16 [ 0, [[BB1]] ], [ 1, [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0]] ]
332- ; CHECK-NEXT: [[_3_JT0:%.*]] = phi i32 [ 0, [[BB1]] ], [ [[DOTSI_UNFOLD_PHI_JT0]], [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0]] ]
342+ ; CHECK-NEXT: [[D_PROMOTED4_JT0:%.*]] = phi i16 [ 0, [[BB1]] ], [ 1, [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0]] ], [ 1, [[BB7]] ]
343+ ; CHECK-NEXT: [[_3_JT0:%.*]] = phi i32 [ 0, [[BB1]] ], [ [[DOTSI_UNFOLD_PHI_JT0]], [[SPEC_SELECT_SI_UNFOLD_FALSE_JT0]] ], [ [[DOTSI_UNFOLD_PHI1]], [[BB7]] ]
333344; CHECK-NEXT: br label [[BB1]]
334345; CHECK: BB1.backedge:
335346; CHECK-NEXT: br label [[BB1]]
@@ -367,30 +378,40 @@ BB8: ; preds = %BB7
367378define void @pr106083_select_dead_uses (i1 %cmp1 , i1 %not , ptr %p ) {
368379; CHECK-LABEL: @pr106083_select_dead_uses(
369380; CHECK-NEXT: bb:
370- ; CHECK-NEXT: br i1 [[CMP1:%.*]], label [[DOTLOOPEXIT6:%.*]], label [[SPEC_SELECT_SI_UNFOLD_FALSE:%.*]]
371- ; CHECK: spec.select.si.unfold.false:
372- ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI1:%.*]] = phi i32 [ 1, [[BB:%.*]] ]
373- ; CHECK-NEXT: br label [[DOTLOOPEXIT6]]
381+ ; CHECK-NEXT: br label [[DOTLOOPEXIT6:%.*]]
374382; CHECK: .loopexit6:
375- ; CHECK-NEXT: [[SPEC_SELECT_SI_UNFOLD_PHI:%.*]] = phi i32 [ [[SPEC_SELECT_SI_UNFOLD_PHI]], [[SELECT_UNFOLD:%.*]] ], [ 0, [[BB]] ], [ [[DOTSI_UNFOLD_PHI1]], [[SPEC_SELECT_SI_UNFOLD_FALSE]] ]
376383; CHECK-NEXT: br i1 [[NOT:%.*]], label [[SELECT_UNFOLD_JT0:%.*]], label [[BB1:%.*]]
377384; CHECK: bb1:
378385; CHECK-NEXT: [[I:%.*]] = load i32, ptr [[P:%.*]], align 4
379386; CHECK-NEXT: [[NOT2:%.*]] = icmp eq i32 0, 0
380- ; CHECK-NEXT: br i1 [[NOT2]], label [[SELECT_UNFOLD]], label [[SPEC_SELECT7_SI_UNFOLD_FALSE_JT0:%.*]]
387+ ; CHECK-NEXT: br i1 [[NOT2]], label [[SELECT_UNFOLD:%.* ]], label [[SPEC_SELECT7_SI_UNFOLD_FALSE_JT0:%.*]]
381388; CHECK: spec.select7.si.unfold.false:
382- ; CHECK-NEXT: br label [[SELECT_UNFOLD ]]
389+ ; CHECK-NEXT: br label [[SELECT_UNFOLD1:%.* ]]
383390; CHECK: spec.select7.si.unfold.false.jt0:
384391; CHECK-NEXT: [[DOTSI_UNFOLD_PHI_JT0:%.*]] = phi i32 [ 0, [[BB1]] ]
385392; CHECK-NEXT: br label [[SELECT_UNFOLD_JT0]]
393+ ; CHECK: spec.select.si.unfold.true:
394+ ; CHECK-NEXT: br i1 [[CMP1:%.*]], label [[SELECT_UNFOLD1]], label [[SPEC_SELECT_SI_UNFOLD_FALSE_JT1:%.*]]
395+ ; CHECK: spec.select.si.unfold.true.jt0:
396+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI1:%.*]] = phi i32 [ 0, [[BB1]] ]
397+ ; CHECK-NEXT: br i1 [[CMP1]], label [[SELECT_UNFOLD_JT0]], label [[SPEC_SELECT_SI_UNFOLD_FALSE:%.*]]
398+ ; CHECK: spec.select.si.unfold.false:
399+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI2:%.*]] = phi i32 [ 1, [[SELECT_UNFOLD]] ]
400+ ; CHECK-NEXT: br label [[SELECT_UNFOLD1]]
401+ ; CHECK: spec.select.si.unfold.false.jt1:
402+ ; CHECK-NEXT: [[DOTSI_UNFOLD_PHI2_JT1:%.*]] = phi i32 [ 1, [[SPEC_SELECT_SI_UNFOLD_TRUE:%.*]] ]
403+ ; CHECK-NEXT: br label [[SELECT_UNFOLD_JT1:%.*]]
386404; CHECK: select.unfold:
387- ; CHECK-NEXT: [[_2:%.*]] = phi i32 [ [[SPEC_SELECT_SI_UNFOLD_PHI]] , [[BB1 ]] ], [ poison , [[SPEC_SELECT7_SI_UNFOLD_FALSE:%.* ]] ]
405+ ; CHECK-NEXT: [[_2:%.*]] = phi i32 [ poison, [[SPEC_SELECT7_SI_UNFOLD_FALSE:%.*]] ] , [ poison, [[SPEC_SELECT_SI_UNFOLD_TRUE ]] ], [ [[DOTSI_UNFOLD_PHI2]] , [[SPEC_SELECT_SI_UNFOLD_FALSE ]] ]
388406; CHECK-NEXT: switch i32 [[_2]], label [[BB2:%.*]] [
389407; CHECK-NEXT: i32 0, label [[DOTPREHEADER_PREHEADER:%.*]]
390408; CHECK-NEXT: i32 1, label [[DOTLOOPEXIT6]]
391409; CHECK-NEXT: ]
410+ ; CHECK: select.unfold.jt1:
411+ ; CHECK-NEXT: [[_2_JT1:%.*]] = phi i32 [ [[DOTSI_UNFOLD_PHI2_JT1]], [[SPEC_SELECT_SI_UNFOLD_FALSE_JT1]] ]
412+ ; CHECK-NEXT: br label [[DOTLOOPEXIT6]]
392413; CHECK: select.unfold.jt0:
393- ; CHECK-NEXT: [[_2_JT0:%.*]] = phi i32 [ 0, [[DOTLOOPEXIT6]] ], [ [[DOTSI_UNFOLD_PHI_JT0]], [[SPEC_SELECT7_SI_UNFOLD_FALSE_JT0]] ]
414+ ; CHECK-NEXT: [[_2_JT0:%.*]] = phi i32 [ 0, [[DOTLOOPEXIT6]] ], [ [[DOTSI_UNFOLD_PHI_JT0]], [[SPEC_SELECT7_SI_UNFOLD_FALSE_JT0]] ], [ [[DOTSI_UNFOLD_PHI1]], [[SELECT_UNFOLD]] ]
394415; CHECK-NEXT: br label [[DOTPREHEADER_PREHEADER]]
395416; CHECK: .preheader.preheader:
396417; CHECK-NEXT: ret void
0 commit comments