[VectorCombine] foldInsExtVectorToShuffle - canonicalize new shuffle(undef,x) ->...
[llvm-project.git] / llvm / test / Transforms / LoopRotate / preserve-mssa.ll
blob4135c2966f1fdb987509fd0c9c8e302d4a1b0a8d
1 ; RUN: opt -S -passes=loop-rotate -verify-memoryssa < %s | FileCheck %s
3 ; CHECK-LABEL: @multiedge(
4 define void @multiedge(i1 %arg, i32 %arg2) {
5 entry:
6   br label %retry
8 retry:                                            ; preds = %sw.epilog, %entry
9   br i1 %arg, label %cleanup, label %if.end
11 if.end:                                           ; preds = %retry
12   switch i32 %arg2, label %sw.epilog [
13     i32 -3, label %cleanup
14     i32 -5, label %cleanup
15     i32 -16, label %cleanup
16     i32 -25, label %cleanup
17   ]
19 sw.epilog:                                        ; preds = %if.end
20   br label %retry
22 cleanup:                                          ; preds = %if.end, %if.end, %if.end, %if.end, %retry
23   ret void
26 ; CHECK-LABEL: @read_line(
27 define internal fastcc i32 @read_line(ptr nocapture %f, i1 %arg) unnamed_addr {
28 entry:
29   br label %for.cond
31 for.cond:                                         ; preds = %if.end, %entry
32   %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.end
36 if.then:                                          ; preds = %for.cond
37   ret i32 undef
39 if.end:                                           ; preds = %for.cond
40   %call4 = call i64 @strlen(ptr %call)
41   br label %for.cond
44 declare dso_local ptr @prepbuffer(ptr) local_unnamed_addr
45 declare dso_local ptr @fgets(ptr, i32, ptr nocapture) local_unnamed_addr
46 declare dso_local i64 @strlen(ptr nocapture) local_unnamed_addr
49 ; CHECK-LABEL: @loop3
50 define dso_local fastcc void @loop3(i1 %arg) unnamed_addr {
51 entry:
52   br label %for.cond
54 for.cond:                                         ; preds = %for.body, %entry
55   br i1 %arg, label %for.body, label %for.end81
57 for.body:                                         ; preds = %for.cond
58   %.idx122.val = load i32, ptr undef, align 8
59   call fastcc void @cont()
60   br label %for.cond
62 for.end81:                                        ; preds = %for.cond
63   ret void
66 ; CHECK-LABEL: @loop4
67 define dso_local fastcc void @loop4(i1 %arg) unnamed_addr {
68 entry:
69   br label %while.cond
71 while.cond:                                       ; preds = %while.body, %entry
72   br i1 %arg, label %while.end, label %while.body
74 while.body:                                       ; preds = %while.cond
75   call fastcc void @cont()
76   br label %while.cond
78 while.end:                                        ; preds = %while.cond
79   call fastcc void @cont()
80   call fastcc void @cont()
81   ret void
84 ; Function Attrs: inlinehint nounwind uwtable
85 declare dso_local fastcc void @cont() unnamed_addr
87 @glob_array = internal unnamed_addr constant [3 x i32] [i32 1, i32 0, i32 2], align 4
88 ; Test against failure in MemorySSAUpdater, when rotate clones instructions as Value.
89 ; CHECK-LABEL: @loop5
90 define dso_local fastcc void @loop5(i1 %arg) unnamed_addr {
91 entry:
92   br label %for.body
94 do.cond:                          ; preds = %for.body
95   unreachable
97 for.body:                               ; preds = %if.end, %entry
98   %indvar = phi i64 [ %indvar.next, %if.end ], [ 0, %entry ]
99   %array = getelementptr inbounds [3 x i32], ptr @glob_array, i64 0, i64 %indvar
100   %0 = load i32, ptr %array, align 4
101   br i1 %arg, label %do.cond, label %if.end
103 if.end:                                 ; preds = %for.body
104   store i32 undef, ptr undef, align 4
105   %indvar.next = add nuw nsw i64 %indvar, 1
106   br label %for.body