110 lines · plain
1; RUN: opt -S -passes=loop-rotate -verify-memoryssa < %s | FileCheck %s2 3; CHECK-LABEL: @multiedge(4define void @multiedge(i1 %arg, i32 %arg2) {5entry:6 br label %retry7 8retry: ; preds = %sw.epilog, %entry9 br i1 %arg, label %cleanup, label %if.end10 11if.end: ; preds = %retry12 switch i32 %arg2, label %sw.epilog [13 i32 -3, label %cleanup14 i32 -5, label %cleanup15 i32 -16, label %cleanup16 i32 -25, label %cleanup17 ]18 19sw.epilog: ; preds = %if.end20 br label %retry21 22cleanup: ; preds = %if.end, %if.end, %if.end, %if.end, %retry23 ret void24}25 26; CHECK-LABEL: @read_line(27define internal fastcc i32 @read_line(ptr nocapture %f, i1 %arg) unnamed_addr {28entry:29 br label %for.cond30 31for.cond: ; preds = %if.end, %entry32 %call = call ptr @prepbuffer(ptr nonnull undef)33 %call1 = call ptr @fgets(ptr %call, i32 8192, ptr %f)34 br i1 %arg, label %if.then, label %if.end35 36if.then: ; preds = %for.cond37 ret i32 undef38 39if.end: ; preds = %for.cond40 %call4 = call i64 @strlen(ptr %call)41 br label %for.cond42}43 44declare dso_local ptr @prepbuffer(ptr) local_unnamed_addr45declare dso_local ptr @fgets(ptr, i32, ptr nocapture) local_unnamed_addr46declare dso_local i64 @strlen(ptr nocapture) local_unnamed_addr47 48 49; CHECK-LABEL: @loop350define dso_local fastcc void @loop3(i1 %arg) unnamed_addr {51entry:52 br label %for.cond53 54for.cond: ; preds = %for.body, %entry55 br i1 %arg, label %for.body, label %for.end8156 57for.body: ; preds = %for.cond58 %.idx122.val = load i32, ptr undef, align 859 call fastcc void @cont()60 br label %for.cond61 62for.end81: ; preds = %for.cond63 ret void64}65 66; CHECK-LABEL: @loop467define dso_local fastcc void @loop4(i1 %arg) unnamed_addr {68entry:69 br label %while.cond70 71while.cond: ; preds = %while.body, %entry72 br i1 %arg, label %while.end, label %while.body73 74while.body: ; preds = %while.cond75 call fastcc void @cont()76 br label %while.cond77 78while.end: ; preds = %while.cond79 call fastcc void @cont()80 call fastcc void @cont()81 ret void82}83 84; Function Attrs: inlinehint nounwind uwtable85declare dso_local fastcc void @cont() unnamed_addr86 87@glob_array = internal unnamed_addr constant [3 x i32] [i32 1, i32 0, i32 2], align 488; Test against failure in MemorySSAUpdater, when rotate clones instructions as Value.89; CHECK-LABEL: @loop590define dso_local fastcc void @loop5(i1 %arg) unnamed_addr {91entry:92 br label %for.body93 94do.cond: ; preds = %for.body95 unreachable96 97for.body: ; preds = %if.end, %entry98 %indvar = phi i64 [ %indvar.next, %if.end ], [ 0, %entry ]99 %array = getelementptr inbounds [3 x i32], ptr @glob_array, i64 0, i64 %indvar100 %0 = load i32, ptr %array, align 4101 br i1 %arg, label %do.cond, label %if.end102 103if.end: ; preds = %for.body104 store i32 undef, ptr undef, align 4105 %indvar.next = add nuw nsw i64 %indvar, 1106 br label %for.body107}108 109 110