Alex MacLean 09e12d13a0 [LLVM][Uniformity] Fix error causing assert on some irreducible control flow
As the test case demonstrates, it is possible for a block to be identified as a
join point while not being the header of a reducible cycle. To address this,
when searching for the outermost cycle made divergent by branch outside it, we
first check for an irreducible outermost cycle before checking if the parent is
reducible.

Reviewed By: sameerds

Differential Revision: https://reviews.llvm.org/D158014
2023-08-18 09:47:49 +05:30

25 lines
778 B
LLVM

; RUN: opt %s -passes='print<uniformity>' -disable-output 2>&1 | FileCheck %s
target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
target triple = "nvptx64-nvidia-cuda"
; CHECK: CYCLES ASSSUMED DIVERGENT:
; CHECK-NEXT: depth=1: entries(if.end16 for.cond1) for.body4
define void @foo(i1 %b) {
entry:
br i1 %b, label %if.then, label %if.end16
if.then: ; preds = %entry
br label %for.cond1
for.cond1: ; preds = %if.end16, %for.body4, %if.then
br i1 false, label %for.body4, label %if.end16
for.body4: ; preds = %for.cond1
br label %for.cond1
if.end16: ; preds = %for.cond1, %entry
br label %for.cond1
}