Skip to content

Commit e43da72

Browse files
committed
[GVN] Add additional pointer replacement tests (NFC)
Cover the ptrtoint special case and add ptrtoaddr test.
1 parent 2a02d57 commit e43da72

File tree

1 file changed

+40
-9
lines changed

1 file changed

+40
-9
lines changed

llvm/test/Transforms/GVN/assume-equal.ll

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,21 +221,22 @@ define i32 @_Z1ii(i32 %p) {
221221
; CHECK-NEXT: [[ENTRY:.*:]]
222222
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[P]], 42
223223
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
224-
; CHECK-NEXT: br i1 true, label %[[BB2:.*]], label %[[BB2]]
225-
; CHECK: [[BB2]]:
226-
; CHECK-NEXT: br i1 true, label %[[BB2]], label %[[BB2]]
227-
; CHECK: [[BB0:.*:]]
224+
; CHECK-NEXT: br i1 true, label %[[COMMON:.*]], label %[[COMMON]]
225+
; CHECK: [[COMMON]]:
226+
; CHECK-NEXT: br i1 true, label %[[COMMON]], label %[[COMMON]]
227+
; CHECK: [[EXIT:.*:]]
228228
; CHECK-NEXT: ret i32 42
229229
;
230230
entry:
231231
%cmp = icmp eq i32 %p, 42
232232
call void @llvm.assume(i1 %cmp)
233233

234-
br i1 %cmp, label %bb2, label %bb2
235-
bb2:
234+
br i1 %cmp, label %common, label %common
235+
common:
236236
call void @llvm.assume(i1 true)
237-
br i1 %cmp, label %bb2, label %bb2
237+
br i1 %cmp, label %common, label %common
238238

239+
exit:
239240
ret i32 %p
240241
}
241242

@@ -357,8 +358,8 @@ define i8 @assume_ptr_eq_different_prov_matters(ptr %p, ptr %p2) {
357358
ret i8 %v
358359
}
359360

360-
define i1 @assume_ptr_eq_different_prov_does_not_matter(ptr %p, ptr %p2) {
361-
; CHECK-LABEL: define i1 @assume_ptr_eq_different_prov_does_not_matter(
361+
define i1 @assume_ptr_eq_different_prov_does_not_matter_icmp(ptr %p, ptr %p2) {
362+
; CHECK-LABEL: define i1 @assume_ptr_eq_different_prov_does_not_matter_icmp(
362363
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
363364
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P]], [[P2]]
364365
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
@@ -371,6 +372,36 @@ define i1 @assume_ptr_eq_different_prov_does_not_matter(ptr %p, ptr %p2) {
371372
ret i1 %c
372373
}
373374

375+
; This is not correct, as it may change the provenance exposed by ptrtoint.
376+
; We still allow it for now.
377+
define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint(ptr %p, ptr %p2) {
378+
; CHECK-LABEL: define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint(
379+
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
380+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P]], [[P2]]
381+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
382+
; CHECK-NEXT: [[INT:%.*]] = ptrtoint ptr [[P]] to i64
383+
; CHECK-NEXT: ret i64 [[INT]]
384+
;
385+
%cmp = icmp eq ptr %p, %p2
386+
call void @llvm.assume(i1 %cmp)
387+
%int = ptrtoint ptr %p2 to i64
388+
ret i64 %int
389+
}
390+
391+
define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %p2) {
392+
; CHECK-LABEL: define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr(
393+
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
394+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P]], [[P2]]
395+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
396+
; CHECK-NEXT: [[INT:%.*]] = ptrtoaddr ptr [[P2]] to i64
397+
; CHECK-NEXT: ret i64 [[INT]]
398+
;
399+
%cmp = icmp eq ptr %p, %p2
400+
call void @llvm.assume(i1 %cmp)
401+
%int = ptrtoaddr ptr %p2 to i64
402+
ret i64 %int
403+
}
404+
374405
define i8 @assume_ptr_eq_same_prov(ptr %p, i64 %x) {
375406
; CHECK-LABEL: define i8 @assume_ptr_eq_same_prov(
376407
; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {

0 commit comments

Comments
 (0)