101 lines · plain
1; RUN: opt < %s -passes=loop-simplify,lcssa -verify-loop-info -verify-dom-info -S \2; RUN: | grep -F "indirectbr ptr %x, [label %L0, label %L1]" \3; RUN: | count 64 5; LoopSimplify should not try to transform loops when indirectbr is involved.6 7define void @entry(ptr %x) {8entry:9 indirectbr ptr %x, [ label %L0, label %L1 ]10 11L0:12 br label %L013 14L1:15 ret void16}17 18define void @backedge(ptr %x) {19entry:20 br label %L021 22L0:23 br label %L124 25L1:26 indirectbr ptr %x, [ label %L0, label %L1 ]27}28 29define i64 @exit(ptr %x) {30entry:31 br label %L232 33L2:34 %z = bitcast i64 0 to i6435 indirectbr ptr %x, [ label %L0, label %L1 ]36 37L0:38 br label %L239 40L1:41 ret i64 %z42}43 44define i64 @criticalexit(ptr %x, i1 %a) {45entry:46 br i1 %a, label %L1, label %L247 48L2:49 %z = bitcast i64 0 to i6450 indirectbr ptr %x, [ label %L0, label %L1 ]51 52L0:53 br label %L254 55L1:56 %y = phi i64 [ %z, %L2 ], [ 1, %entry ]57 ret i64 %y58}59 60define i64 @exit_backedge(ptr %x) {61entry:62 br label %L063 64L0:65 %z = bitcast i64 0 to i6466 indirectbr ptr %x, [ label %L0, label %L1 ]67 68L1:69 ret i64 %z70}71 72define i64 @criticalexit_backedge(ptr %x, i1 %a) {73entry:74 br i1 %a, label %L0, label %L175 76L0:77 %z = bitcast i64 0 to i6478 indirectbr ptr %x, [ label %L0, label %L1 ]79 80L1:81 %y = phi i64 [ %z, %L0 ], [ 1, %entry ]82 ret i64 %y83}84 85define void @pr5502(ptr %arg, i1 %arg2) nounwind {86entry:87 br label %while.cond88 89while.cond:90 br i1 %arg2, label %while.body, label %while.end91 92while.body:93 indirectbr ptr %arg, [label %end_opcode, label %end_opcode]94 95end_opcode:96 br i1 false, label %end_opcode, label %while.cond97 98while.end:99 ret void100}101