@@ -221,21 +221,22 @@ define i32 @_Z1ii(i32 %p) {
221
221
; CHECK-NEXT: [[ENTRY:.*:]]
222
222
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[P]], 42
223
223
; 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 :.*:]]
228
228
; CHECK-NEXT: ret i32 42
229
229
;
230
230
entry:
231
231
%cmp = icmp eq i32 %p , 42
232
232
call void @llvm.assume (i1 %cmp )
233
233
234
- br i1 %cmp , label %bb2 , label %bb2
235
- bb2 :
234
+ br i1 %cmp , label %common , label %common
235
+ common :
236
236
call void @llvm.assume (i1 true )
237
- br i1 %cmp , label %bb2 , label %bb2
237
+ br i1 %cmp , label %common , label %common
238
238
239
+ exit:
239
240
ret i32 %p
240
241
}
241
242
@@ -357,8 +358,8 @@ define i8 @assume_ptr_eq_different_prov_matters(ptr %p, ptr %p2) {
357
358
ret i8 %v
358
359
}
359
360
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 (
362
363
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
363
364
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P]], [[P2]]
364
365
; 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) {
371
372
ret i1 %c
372
373
}
373
374
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 = ptr toaddr ptr %p2 to i64
402
+ ret i64 %int
403
+ }
404
+
374
405
define i8 @assume_ptr_eq_same_prov (ptr %p , i64 %x ) {
375
406
; CHECK-LABEL: define i8 @assume_ptr_eq_same_prov(
376
407
; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {
0 commit comments