; RUN: opt < %s -loop-simplify -lcssa -verify-loop-info -verify-dom-info -S \ ; RUN: | grep -F "indirectbr i8* %x, [label %L0, label %L1]" \ ; RUN: | count 6 ; LoopSimplify should not try to transform loops when indirectbr is involved. define void @entry(i8* %x) { entry: indirectbr i8* %x, [ label %L0, label %L1 ] L0: br label %L0 L1: ret void } define void @backedge(i8* %x) { entry: br label %L0 L0: br label %L1 L1: indirectbr i8* %x, [ label %L0, label %L1 ] } define i64 @exit(i8* %x) { entry: br label %L2 L2: %z = bitcast i64 0 to i64 indirectbr i8* %x, [ label %L0, label %L1 ] L0: br label %L2 L1: ret i64 %z } define i64 @criticalexit(i8* %x, i1 %a) { entry: br i1 %a, label %L1, label %L2 L2: %z = bitcast i64 0 to i64 indirectbr i8* %x, [ label %L0, label %L1 ] L0: br label %L2 L1: %y = phi i64 [ %z, %L2 ], [ 1, %entry ] ret i64 %y } define i64 @exit_backedge(i8* %x) { entry: br label %L0 L0: %z = bitcast i64 0 to i64 indirectbr i8* %x, [ label %L0, label %L1 ] L1: ret i64 %z } define i64 @criticalexit_backedge(i8* %x, i1 %a) { entry: br i1 %a, label %L0, label %L1 L0: %z = bitcast i64 0 to i64 indirectbr i8* %x, [ label %L0, label %L1 ] L1: %y = phi i64 [ %z, %L0 ], [ 1, %entry ] ret i64 %y } define void @pr5502() nounwind { entry: br label %while.cond while.cond: br i1 undef, label %while.body, label %while.end while.body: indirectbr i8* undef, [label %end_opcode, label %end_opcode] end_opcode: br i1 false, label %end_opcode, label %while.cond while.end: ret void }