[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Analysis / MemorySSA / pr42940.ll
blobccd3007c45ad1b5d807c4f6f907ecd4b9735cee6
1 ; RUN: opt -licm -enable-mssa-loop-dependency -verify-memoryssa  -S %s | FileCheck %s
2 ; REQUIRES: asserts
4 target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
5 target triple = "s390x-ibm-linux"
7 @g_77 = external dso_local global i16, align 2
9 ; CHECK-LABEL: @f1()
10 define void @f1() {
11 entry:
12   store i16 undef, i16* @g_77, align 2
13   br label %loop_pre
15 unreachablelabel: ; No predecessors
16   br label %loop_pre
18 loop_pre:
19   br label %for.cond.header
21 for.cond.header:
22   store i32 0, i32* undef, align 4
23   br i1 undef, label %for.body, label %for.end
25 for.body:
26   %tmp1 = load volatile i16, i16* undef, align 2
27   br label %for.end
29 for.end:
30   br i1 undef, label %func.exit, label %for.cond.header
32 func.exit:
33   ret void
36 @g_159 = external dso_local global i32, align 4
38 ; CHECK-LABEL: @f2()
39 define void @f2() {
40 entry:
41   br label %for.header.first
43 for.header.first:
44   br label %for.body.first
46 for.body.first:
47   store i32 0, i32* @g_159, align 4
48   br i1 undef, label %for.body.first, label %for.end.first
50 for.end.first:
51   br i1 undef, label %lor.end, label %for.header.first
53 lor.end:
54   br label %for.pre
56 unreachablelabel: ; No predecessors
57   br label %for.pre
59 for.pre:
60   br label %for.header.second
62 for.header.second:
63   store i32 undef, i32* undef, align 4
64   br label %for.header.second
67 @g_271 = external dso_local global i8, align 2
68 @g_427 = external dso_local unnamed_addr global [9 x i16], align 2
70 ; CHECK-LABEL: @f3()
71 define  void @f3() {
72 entry:
73   br label %for.preheader
75 for.preheader:
76   store volatile i8 undef, i8* @g_271, align 2
77   br i1 undef, label %for.preheader, label %for.end
79 for.end:
80   br label %lbl_1058.i
82 unreachablelabel: ; No predecessors
83   br label %lbl_1058.i
85 lbl_1058.i:
86   br label %for.cond3.preheader.i
88 for.cond3.preheader.i:
89   %tmp1 = load i16, i16* getelementptr inbounds ([9 x i16], [9 x i16]* @g_427, i64 0, i64 2), align 2
90   %conv620.i129 = zext i16 %tmp1 to i32
91   %cmp621.i130 = icmp ugt i32 undef, %conv620.i129
92   %conv622.i131 = zext i1 %cmp621.i130 to i32
93   store i32 %conv622.i131, i32* undef, align 4
94   br i1 undef, label %func.exit, label %for.cond3.preheader.i
96 func.exit:
97   ret void
100 @g_6 = external dso_local unnamed_addr global [3 x i32], align 4
101 @g_244 = external dso_local global i64, align 8
102 @g_1164 = external dso_local global i64, align 8
104 ; CHECK-LABEL: @f4()
105 define void @f4() {
106 entry:
107   br label %for.cond8.preheader
109 for.cond8.preheader:
110   store i32 0, i32* getelementptr inbounds ([3 x i32], [3 x i32]* @g_6, i64 0, i64 2), align 4
111   br i1 undef, label %if.end, label %for.cond8.preheader
113 if.end:
114   br i1 undef, label %cleanup1270, label %for.cond504.preheader
116 for.cond504.preheader:
117   store i64 undef, i64* @g_244, align 8
118   br label %cleanup1270
120 for.cond559.preheader:
121   store i64 undef, i64* @g_1164, align 8
122   br i1 undef, label %for.cond559.preheader, label %cleanup1270
124 cleanup1270:
125   ret void
128 @g_1504 = external dso_local local_unnamed_addr global i16****, align 8
130 define void @f5() {
132   tail call fastcc void @f21()
133   br label %bb12.outer
135 bb12.outer.loopexit:                              ; No predecessors!
136   br label %bb12.outer
138 bb12.outer:                                       ; preds = %bb12.outer.loopexit, %bb
139   br i1 undef, label %bb12.outer.split.us, label %bb12.preheader
141 bb12.preheader:                                   ; preds = %bb12.outer
142   br label %bb12
144 bb12.outer.split.us:                              ; preds = %bb12.outer
145   br label %bb16.us.us
147 bb16.us.us:                                       ; preds = %bb16.us.us, %bb12.outer.split.us
148   br label %bb16.us.us
150 bb12:                                             ; preds = %bb77.1, %bb12.preheader
151   br i1 undef, label %bb25.preheader, label %bb77
153 bb25.preheader:                                   ; preds = %bb12.1, %bb12
154   br label %bb25
156 bb25:                                             ; preds = %l0, %bb25.preheader
157   br i1 undef, label %bb62, label %bb71.thread
159 bb62:                                             ; preds = %bb25
160   br i1 undef, label %bb92.loopexit, label %l0
162 l0:                                                ; preds = %bb62
163   br label %bb25
165 bb71.thread:                                      ; preds = %bb25
166   br label %bb92
168 bb77:                                             ; preds = %bb12
169   %tmp78 = load i16****, i16***** @g_1504, align 8
170   %tmp79 = load volatile i16***, i16**** %tmp78, align 8
171   br i1 undef, label %bb91, label %bb12.1
173 bb91:                                             ; preds = %bb77.1, %bb77
174   unreachable
176 bb92.loopexit:                                    ; preds = %bb62
177   br label %bb92
179 bb92:                                             ; preds = %bb92.loopexit, %bb71.thread
180   ret void
182 bb12.1:                                           ; preds = %bb77
183   br i1 undef, label %bb25.preheader, label %bb77.1
185 bb77.1:                                           ; preds = %bb12.1
186   br i1 undef, label %bb91, label %bb12
189 declare void @f21()