@@ -316,6 +316,56 @@ exit:
316316 ret i1 %cmp
317317}
318318
319+ define i1 @known_non_equal_phis_max_recursion_limit (i1 %cond , i32 %switch.cond ) {
320+ ; CHECK-LABEL: @known_non_equal_phis_max_recursion_limit(
321+ ; CHECK-NEXT: entry:
322+ ; CHECK-NEXT: br label [[BB0:%.*]]
323+ ; CHECK: bb0:
324+ ; CHECK-NEXT: [[PHIA_0:%.*]] = phi i32 [ [[PHIA_1:%.*]], [[BB1:%.*]] ], [ 0, [[ENTRY:%.*]] ]
325+ ; CHECK-NEXT: [[PHIB_0:%.*]] = phi i32 [ [[PHIB_1:%.*]], [[BB1]] ], [ 0, [[ENTRY]] ]
326+ ; CHECK-NEXT: br i1 [[COND:%.*]], label [[SWITCH_BLOCK:%.*]], label [[EXIT:%.*]]
327+ ; CHECK: switch.block:
328+ ; CHECK-NEXT: switch i32 [[SWITCH_COND:%.*]], label [[BB1]] [
329+ ; CHECK-NEXT: i32 0, label [[EPILOGUE:%.*]]
330+ ; CHECK-NEXT: i32 1, label [[EPILOGUE]]
331+ ; CHECK-NEXT: ]
332+ ; CHECK: bb1:
333+ ; CHECK-NEXT: [[PHIA_1]] = phi i32 [ [[PHIA_0]], [[SWITCH_BLOCK]] ], [ 0, [[EPILOGUE]] ]
334+ ; CHECK-NEXT: [[PHIB_1]] = phi i32 [ [[PHIB_0]], [[SWITCH_BLOCK]] ], [ 0, [[EPILOGUE]] ]
335+ ; CHECK-NEXT: br label [[BB0]]
336+ ; CHECK: epilogue:
337+ ; CHECK-NEXT: br label [[BB1]]
338+ ; CHECK: exit:
339+ ; CHECK-NEXT: [[RET:%.*]] = icmp eq i32 [[PHIA_0]], [[PHIB_0]]
340+ ; CHECK-NEXT: ret i1 [[RET]]
341+ ;
342+ entry:
343+ br label %bb0
344+
345+ bb0:
346+ %phiA.0 = phi i32 [ %phiA.1 , %bb1 ], [ 0 , %entry ]
347+ %phiB.0 = phi i32 [ %phiB.1 , %bb1 ], [ 0 , %entry ]
348+ br i1 %cond , label %switch.block , label %exit
349+
350+ switch .block:
351+ switch i32 %switch.cond , label %bb1 [
352+ i32 0 , label %epilogue
353+ i32 1 , label %epilogue
354+ ]
355+
356+ bb1:
357+ %phiA.1 = phi i32 [ %phiA.0 , %switch.block ], [ 0 , %epilogue ]
358+ %phiB.1 = phi i32 [ %phiB.0 , %switch.block ], [ 0 , %epilogue ]
359+ br label %bb0
360+
361+ epilogue:
362+ br label %bb1
363+
364+ exit:
365+ %ret = icmp eq i32 %phiA.0 , %phiB.0
366+ ret i1 %ret
367+ }
368+
319369define i1 @known_non_equal_phis_fail (i8 %p , ptr %pq , i8 %n , i8 %r ) {
320370; CHECK-LABEL: @known_non_equal_phis_fail(
321371; CHECK-NEXT: entry:
0 commit comments