[llvm] [DFAJumpThreading] Remove incoming StartBlock from all phis when unfolding select (PR #71082)

via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 2 23:37:33 PDT 2023


================
@@ -316,3 +316,68 @@ for.cond:                                         ; preds = %lor.end, %entry
 lor.end:                                          ; preds = %for.cond
   br label %for.cond
 }
+
+define ptr @pr65222(i32 %flags, i1 %cmp82, i1 %tobool85.not, i1 %cond111) {
+; CHECK-LABEL: @pr65222(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[WHILE_COND:%.*]]
+; CHECK:       while.cond:
+; CHECK-NEXT:    [[INWORD_03:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ 0, [[IF_END143:%.*]] ], [ [[SPEC_SELECT:%.*]], [[SW_BB147:%.*]] ]
+; CHECK-NEXT:    [[START_04:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[FLAGS:%.*]], [[IF_END143]] ], [ 0, [[SW_BB147]] ]
+; CHECK-NEXT:    br i1 [[CMP82:%.*]], label [[IF_THEN84:%.*]], label [[IF_END143]]
+; CHECK:       if.then84:
+; CHECK-NEXT:    [[TOBOOL87_NOT:%.*]] = icmp eq i32 [[INWORD_03]], 0
+; CHECK-NEXT:    [[CMP89_INV:%.*]] = icmp slt i32 [[START_04]], 0
+; CHECK-NEXT:    br i1 [[TOBOOL85_NOT:%.*]], label [[SI_UNFOLD_TRUE:%.*]], label [[SI_UNFOLD_FALSE:%.*]]
+; CHECK:       si.unfold.true:
+; CHECK-NEXT:    br i1 [[CMP89_INV]], label [[IF_END143]], label [[SI_UNFOLD_FALSE2:%.*]]
+; CHECK:       si.unfold.false:
+; CHECK-NEXT:    br i1 [[TOBOOL87_NOT]], label [[IF_END143]], label [[SI_UNFOLD_FALSE1:%.*]]
+; CHECK:       si.unfold.false1:
+; CHECK-NEXT:    br label [[IF_END143]]
+; CHECK:       si.unfold.false2:
+; CHECK-NEXT:    br label [[IF_END143]]
+; CHECK:       if.end143:
+; CHECK-NEXT:    [[NOP_1:%.*]] = phi i32 [ [[FLAGS]], [[WHILE_COND]] ], [ 2, [[SI_UNFOLD_TRUE]] ], [ 2, [[SI_UNFOLD_FALSE]] ], [ 0, [[SI_UNFOLD_FALSE1]] ], [ 1, [[SI_UNFOLD_FALSE2]] ]
+; CHECK-NEXT:    [[INWORD_1:%.*]] = phi i32 [ [[FLAGS]], [[WHILE_COND]] ], [ 0, [[SI_UNFOLD_TRUE]] ], [ 0, [[SI_UNFOLD_FALSE]] ], [ 0, [[SI_UNFOLD_FALSE1]] ], [ 0, [[SI_UNFOLD_FALSE2]] ]
+; CHECK-NEXT:    switch i32 [[NOP_1]], label [[WHILE_COND]] [
+; CHECK-NEXT:      i32 1, label [[SW_BB173:%.*]]
+; CHECK-NEXT:      i32 0, label [[SW_BB147]]
+; CHECK-NEXT:    ]
+; CHECK:       sw.bb147:
+; CHECK-NEXT:    [[SPEC_SELECT]] = select i1 [[COND111:%.*]], i32 [[INWORD_1]], i32 0
+; CHECK-NEXT:    br label [[WHILE_COND]]
+; CHECK:       sw.bb173:
+; CHECK-NEXT:    ret ptr null
+;
+entry:
+  br label %while.cond
+
+while.cond:                                       ; preds = %sw.bb147, %if.end143, %entry
+  %inword.03 = phi i32 [ 0, %entry ], [ 0, %if.end143 ], [ %spec.select, %sw.bb147 ]
+  %start.04 = phi i32 [ 0, %entry ], [ %flags, %if.end143 ], [ 0, %sw.bb147 ]
+  br i1 %cmp82, label %if.then84, label %if.end143
+
+if.then84:                                        ; preds = %while.cond
+  %tobool87.not = icmp eq i32 %inword.03, 0
+  %cond = select i1 %tobool87.not, i32 2, i32 0
+  %cmp89.inv = icmp slt i32 %start.04, 0
+  %cond91 = select i1 %cmp89.inv, i32 2, i32 1
+  %nop.0 = select i1 %tobool85.not, i32 %cond91, i32 %cond
+  br label %if.end143
+
+if.end143:                                        ; preds = %if.then84, %while.cond
+  %nop.1 = phi i32 [ %nop.0, %if.then84 ], [ %flags, %while.cond ]
+  %inword.1 = phi i32 [ 0, %if.then84 ], [ %flags, %while.cond ]
+  switch i32 %nop.1, label %while.cond [
+  i32 1, label %sw.bb173
+  i32 0, label %sw.bb147
+  ]
+
+sw.bb147:                                         ; preds = %if.end143
+  %spec.select = select i1 %cond111, i32 %inword.1, i32 0
+  br label %while.cond
+
+sw.bb173:                                         ; preds = %if.end143
+  ret ptr null
+}
----------------
XChy wrote:

Manually reduced now.

https://github.com/llvm/llvm-project/pull/71082


More information about the llvm-commits mailing list