@@ -83,3 +83,109 @@ if.then: ; preds = %f.exit
83
83
if.end: ; preds = %f.exit
84
84
ret i32 0
85
85
}
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