@@ -83,3 +83,109 @@ if.then: ; preds = %f.exit
8383if.end: ; preds = %f.exit
8484 ret i32 0
8585}
86+
87+ ; CHECK-LABEL: Function: reverse: 6 pointers, 0 call sites
88+ ; CHECK: MustAlias: [10 x i32]* %tab, i8* %0
89+ ; CHECK: MustAlias: [10 x i32]* %tab, i32* %arrayidx
90+ ; CHECK: MustAlias: i32* %arrayidx, i8* %0
91+ ; CHECK: PartialAlias: [10 x i32]* %tab, i32* %arrayidx1
92+ ; CHECK: NoAlias: i32* %arrayidx1, i8* %0
93+ ; CHECK: NoAlias: i32* %arrayidx, i32* %arrayidx1
94+ ; CHECK: MayAlias: [10 x i32]* %tab, i32* %p.addr.05.i
95+ ; CHECK: NoAlias: i32* %p.addr.05.i, i8* %0
96+ ; CHECK: NoAlias: i32* %arrayidx, i32* %p.addr.05.i
97+ ; CHECK: MayAlias: i32* %arrayidx1, i32* %p.addr.05.i
98+ ; CHECK: MayAlias: [10 x i32]* %tab, i32* %incdec.ptr.i
99+ ; CHECK: MayAlias: i32* %incdec.ptr.i, i8* %0
100+ ; CHECK: MayAlias: i32* %arrayidx, i32* %incdec.ptr.i
101+ ; CHECK: MayAlias: i32* %arrayidx1, i32* %incdec.ptr.i
102+ ; CHECK: NoAlias: i32* %incdec.ptr.i, i32* %p.addr.05.i
103+ define i32 @reverse () nounwind {
104+ entry:
105+ %tab = alloca [10 x i32 ], align 4
106+ %0 = bitcast [10 x i32 ]* %tab to i8*
107+ %arrayidx = getelementptr inbounds [10 x i32 ], [10 x i32 ]* %tab , i32 0 , i32 0
108+ store i32 0 , i32* %arrayidx , align 4
109+ %arrayidx1 = getelementptr inbounds [10 x i32 ], [10 x i32 ]* %tab , i32 0 , i32 9
110+ store i32 0 , i32* %arrayidx1 , align 4
111+ %1 = add i32 1 , 1
112+ %cmp4.i = icmp slt i32 %1 , 2
113+ br i1 %cmp4.i , label %while.body.i , label %f.exit
114+
115+ while.body.i: ; preds = %while.body.i, %entry
116+ %2 = phi i32 [ 1 , %while.body.i ], [ %1 , %entry ]
117+ %foo.06.i = phi i32 [ %sub.i , %while.body.i ], [ 2 , %entry ]
118+ %p.addr.05.i = phi i32* [ %incdec.ptr.i , %while.body.i ], [ %arrayidx1 , %entry ]
119+ %sub.i = sub nsw i32 %foo.06.i , %2
120+ %incdec.ptr.i = getelementptr inbounds i32 , i32* %p.addr.05.i , i32 -1
121+ store i32 %sub.i , i32* %p.addr.05.i , align 4
122+ %cmp.i = icmp sgt i32 %sub.i , 1
123+ br i1 %cmp.i , label %while.body.i , label %f.exit
124+
125+ f.exit: ; preds = %entry, %while.body.i
126+ %3 = load i32 , i32* %arrayidx1 , align 4
127+ %cmp = icmp eq i32 %3 , 2
128+ %4 = load i32 , i32* %arrayidx , align 4
129+ %cmp4 = icmp eq i32 %4 , 1
130+ %or.cond = and i1 %cmp , %cmp4
131+ br i1 %or.cond , label %if.end , label %if.then
132+
133+ if.then: ; preds = %f.exit
134+ unreachable
135+
136+ if.end: ; preds = %f.exit
137+ ret i32 0
138+ }
139+
140+ ; CHECK-LABEL: Function: negative: 6 pointers, 1 call sites
141+ ; CHECK: NoAlias: [3 x i16]* %int_arr.10, i16** %argv.6.par
142+ ; CHECK: NoAlias: i16* %_tmp1, i16** %argv.6.par
143+ ; CHECK: PartialAlias: [3 x i16]* %int_arr.10, i16* %_tmp1
144+ ; CHECK: NoAlias: i16* %ls1.9.0, i16** %argv.6.par
145+ ; CHECK: MayAlias: [3 x i16]* %int_arr.10, i16* %ls1.9.0
146+ ; CHECK: MayAlias: i16* %_tmp1, i16* %ls1.9.0
147+ ; CHECK: NoAlias: i16* %_tmp7, i16** %argv.6.par
148+ ; CHECK: MayAlias: [3 x i16]* %int_arr.10, i16* %_tmp7
149+ ; CHECK: MayAlias: i16* %_tmp1, i16* %_tmp7
150+ ; CHECK: NoAlias: i16* %_tmp7, i16* %ls1.9.0
151+ ; CHECK: NoAlias: i16* %_tmp11, i16** %argv.6.par
152+ ; CHECK: PartialAlias: [3 x i16]* %int_arr.10, i16* %_tmp11
153+ ; CHECK: NoAlias: i16* %_tmp1, i16* %_tmp11
154+ ; CHECK: NoAlias: i16* %_tmp11, i16* %ls1.9.0
155+ ; CHECK: MayAlias: i16* %_tmp11, i16* %_tmp7
156+ ; CHECK: Both ModRef: Ptr: i16** %argv.6.par <-> %_tmp16 = call i16 @call(i32 %_tmp13)
157+ ; CHECK: NoModRef: Ptr: [3 x i16]* %int_arr.10 <-> %_tmp16 = call i16 @call(i32 %_tmp13)
158+ ; CHECK: NoModRef: Ptr: i16* %_tmp1 <-> %_tmp16 = call i16 @call(i32 %_tmp13)
159+ ; CHECK: Both ModRef: Ptr: i16* %ls1.9.0 <-> %_tmp16 = call i16 @call(i32 %_tmp13)
160+ ; CHECK: Both ModRef: Ptr: i16* %_tmp7 <-> %_tmp16 = call i16 @call(i32 %_tmp13)
161+ ; CHECK: NoModRef: Ptr: i16* %_tmp11 <-> %_tmp16 = call i16 @call(i32 %_tmp13)
162+ define i16 @negative (i16 %argc.5.par , i16** nocapture readnone %argv.6.par ) {
163+ %int_arr.10 = alloca [3 x i16 ], align 1
164+ %_tmp1 = getelementptr inbounds [3 x i16 ], [3 x i16 ]* %int_arr.10 , i16 0 , i16 2
165+ br label %bb1
166+
167+ bb1: ; preds = %bb1, %0
168+ %i.7.0 = phi i16 [ 2 , %0 ], [ %_tmp5 , %bb1 ]
169+ %ls1.9.0 = phi i16* [ %_tmp1 , %0 ], [ %_tmp7 , %bb1 ]
170+ store i16 %i.7.0 , i16* %ls1.9.0 , align 1
171+ %_tmp5 = add nsw i16 %i.7.0 , -1
172+ %_tmp7 = getelementptr i16 , i16* %ls1.9.0 , i16 -1
173+ %_tmp9 = icmp sgt i16 %i.7.0 , 0
174+ br i1 %_tmp9 , label %bb1 , label %bb3
175+
176+ bb3: ; preds = %bb1
177+ %_tmp11 = getelementptr inbounds [3 x i16 ], [3 x i16 ]* %int_arr.10 , i16 0 , i16 1
178+ %_tmp12 = load i16 , i16* %_tmp11 , align 1
179+ %_tmp13 = sext i16 %_tmp12 to i32
180+ %_tmp16 = call i16 @call (i32 %_tmp13 )
181+ %_tmp18.not = icmp eq i16 %_tmp12 , 1
182+ br i1 %_tmp18.not , label %bb5 , label %bb4
183+
184+ bb4: ; preds = %bb3
185+ ret i16 1
186+
187+ bb5: ; preds = %bb3, %bb4
188+ ret i16 0
189+ }
190+
191+ declare i16 @call (i32 )
0 commit comments