; RUN: opt -S -loop-rotate -verify-memoryssa < %s | FileCheck %s ; CHECK-LABEL: @multiedge( define void @multiedge() { entry: br label %retry retry: ; preds = %sw.epilog, %entry br i1 undef, label %cleanup, label %if.end if.end: ; preds = %retry switch i32 undef, label %sw.epilog [ i32 -3, label %cleanup i32 -5, label %cleanup i32 -16, label %cleanup i32 -25, label %cleanup ] sw.epilog: ; preds = %if.end br label %retry cleanup: ; preds = %if.end, %if.end, %if.end, %if.end, %retry ret void } ; CHECK-LABEL: @read_line( define internal fastcc i32 @read_line(i8* nocapture %f) unnamed_addr { entry: br label %for.cond for.cond: ; preds = %if.end, %entry %call = call i8* @prepbuffer(i8* nonnull undef) %call1 = call i8* @fgets(i8* %call, i32 8192, i8* %f) br i1 undef, label %if.then, label %if.end if.then: ; preds = %for.cond ret i32 undef if.end: ; preds = %for.cond %call4 = call i64 @strlen(i8* %call) br label %for.cond } declare dso_local i8* @prepbuffer(i8*) local_unnamed_addr declare dso_local i8* @fgets(i8*, i32, i8* nocapture) local_unnamed_addr declare dso_local i64 @strlen(i8* nocapture) local_unnamed_addr ; CHECK-LABEL: @loop3 define dso_local fastcc void @loop3() unnamed_addr { entry: br label %for.cond for.cond: ; preds = %for.body, %entry br i1 undef, label %for.body, label %for.end81 for.body: ; preds = %for.cond %.idx122.val = load i32, i32* undef, align 8 call fastcc void @cont() br label %for.cond for.end81: ; preds = %for.cond ret void } ; CHECK-LABEL: @loop4 define dso_local fastcc void @loop4() unnamed_addr { entry: br label %while.cond while.cond: ; preds = %while.body, %entry br i1 undef, label %while.end, label %while.body while.body: ; preds = %while.cond call fastcc void @cont() br label %while.cond while.end: ; preds = %while.cond call fastcc void @cont() call fastcc void @cont() ret void } ; Function Attrs: inlinehint nounwind uwtable declare dso_local fastcc void @cont() unnamed_addr @glob_array = internal unnamed_addr constant [3 x i32] [i32 1, i32 0, i32 2], align 4 ; Test against failure in MemorySSAUpdater, when rotate clones instructions as Value. ; CHECK-LABEL: @loop5 define dso_local fastcc void @loop5() unnamed_addr { entry: br label %for.body do.cond: ; preds = %for.body unreachable for.body: ; preds = %if.end, %entry %indvar = phi i64 [ %indvar.next, %if.end ], [ 0, %entry ] %array = getelementptr inbounds [3 x i32], [3 x i32]* @glob_array, i64 0, i64 %indvar %0 = load i32, i32* %array, align 4 br i1 undef, label %do.cond, label %if.end if.end: ; preds = %for.body store i32 undef, i32* undef, align 4 %indvar.next = add nuw nsw i64 %indvar, 1 br label %for.body }