Skip to content

Commit ef78325

Browse files
committed
[BasicAA] Add test to cover GetIndexDifference change in D99424.
Precommit test case for a change to GetIndexDifference in D99424.
1 parent d6cb014 commit ef78325

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

llvm/test/Analysis/BasicAA/gep-modulo.ll

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ define void @may_overflow_i32_sext([16 x i8]* %ptr, i32 %idx) {
192192
; CHECK-LABEL: Function: may_overflow_i32_sext: 3 pointers, 0 call sites
193193
; CHECK-NEXT: MayAlias: [16 x i8]* %ptr, i8* %gep.idx
194194
; CHECK-NEXT: PartialAlias (off 3): [16 x i8]* %ptr, i8* %gep.3
195-
; CHECK-NEXT: MayAlias: i8* %gep.3, i8* %gep.idx
195+
; CHECK-NEXT: MayAlias: i8* %gep.3, i8* %gep.idx
196196
;
197197
%mul = mul i32 %idx, 678152731
198198
%sub = sub i32 %mul, 1582356375
@@ -208,7 +208,7 @@ define void @nuw_nsw_i32_sext([16 x i8]* %ptr, i32 %idx) {
208208
; CHECK-LABEL: Function: nuw_nsw_i32_sext: 3 pointers, 0 call sites
209209
; CHECK-NEXT: NoAlias: [16 x i8]* %ptr, i8* %gep.idx
210210
; CHECK-NEXT: PartialAlias (off 3): [16 x i8]* %ptr, i8* %gep.3
211-
; CHECK-NEXT: NoAlias: i8* %gep.3, i8* %gep.idx
211+
; CHECK-NEXT: NoAlias: i8* %gep.3, i8* %gep.idx
212212
;
213213
%mul = mul nuw nsw i32 %idx, 678152731
214214
%sub = sub nuw nsw i32 %mul, 1582356375
@@ -225,7 +225,7 @@ define void @may_overflow_i32_zext([16 x i8]* %ptr, i32 %idx) {
225225
; CHECK-LABEL: Function: may_overflow_i32_zext: 3 pointers, 0 call sites
226226
; CHECK-NEXT: MayAlias: [16 x i8]* %ptr, i8* %gep.idx
227227
; CHECK-NEXT: PartialAlias (off 3): [16 x i8]* %ptr, i8* %gep.3
228-
; CHECK-NEXT: MayAlias: i8* %gep.3, i8* %gep.idx
228+
; CHECK-NEXT: MayAlias: i8* %gep.3, i8* %gep.idx
229229
;
230230
%mul = mul i32 %idx, 678152731
231231
%sub = sub i32 %mul, 1582356375
@@ -241,7 +241,7 @@ define void @nuw_nsw_i32_zext([16 x i8]* %ptr, i32 %idx) {
241241
; CHECK-LABEL: Function: nuw_nsw_i32_zext: 3 pointers, 0 call sites
242242
; CHECK-NEXT: NoAlias: [16 x i8]* %ptr, i8* %gep.idx
243243
; CHECK-NEXT: PartialAlias (off 3): [16 x i8]* %ptr, i8* %gep.3
244-
; CHECK-NEXT: NoAlias: i8* %gep.3, i8* %gep.idx
244+
; CHECK-NEXT: NoAlias: i8* %gep.3, i8* %gep.idx
245245
;
246246
%mul = mul nuw nsw i32 %idx, 678152731
247247
%sub = sub nuw nsw i32 %mul, 1582356375
@@ -252,3 +252,22 @@ define void @nuw_nsw_i32_zext([16 x i8]* %ptr, i32 %idx) {
252252
store i8 1, i8* %gep.3, align 1
253253
ret void
254254
}
255+
256+
; %mul.1 and %sub.2 are equal, if %idx = 9, because %mul.1 overflows. Hence
257+
; %gep.mul.1 and %gep.sub.2 may alias.
258+
define void @may_overflow_pointer_diff([16 x i8]* %ptr, i64 %idx) {
259+
; CHECK-LABEL: Function: may_overflow_pointer_diff: 3 pointers, 0 call sites
260+
; CHECK-NEXT: MayAlias: [16 x i8]* %ptr, i8* %gep.mul.1
261+
; CHECK-NEXT: MayAlias: [16 x i8]* %ptr, i8* %gep.sub.2
262+
; CHECK-NEXT: NoAlias: i8* %gep.mul.1, i8* %gep.sub.2
263+
;
264+
%mul.1 = mul i64 %idx, 6148914691236517207
265+
%gep.mul.1 = getelementptr [16 x i8], [16 x i8]* %ptr, i32 0, i64 %mul.1
266+
store i8 1, i8* %gep.mul.1, align 1
267+
%mul.2 = mul nsw i64 %idx, 3
268+
%sub.2 = sub nsw i64 %mul.2, 12
269+
%gep.sub.2= getelementptr [16 x i8], [16 x i8]* %ptr, i32 0, i64 %sub.2
270+
store i8 0, i8* %gep.sub.2, align 1
271+
272+
ret void
273+
}

0 commit comments

Comments
 (0)