@@ -183,15 +183,15 @@ define void @f3(ptr %x_addr, ptr %y_addr, ptr %tmp_addr) {
183
183
; CHECK-NEXT: %s3.zext = zext i8 %s3 to i16
184
184
; CHECK-NEXT: --> (1 + (zext i8 (4 + (32 * %x) + (36 * %y)) to i16))<nuw><nsw> U: [1,254) S: [1,257)
185
185
; CHECK-NEXT: %ptr = bitcast ptr @z_addr to ptr
186
- ; CHECK-NEXT: --> @z_addr U: [0,-3 ) S: [-9223372036854775808,9223372036854775805)
186
+ ; CHECK-NEXT: --> @z_addr U: [4,-19 ) S: [-9223372036854775808,9223372036854775805)
187
187
; CHECK-NEXT: %int0 = ptrtoint ptr %ptr to i32
188
188
; CHECK-NEXT: --> (trunc i64 (ptrtoint ptr @z_addr to i64) to i32) U: [0,-3) S: [-2147483648,2147483645)
189
189
; CHECK-NEXT: %int5 = add i32 %int0, 5
190
190
; CHECK-NEXT: --> (5 + (trunc i64 (ptrtoint ptr @z_addr to i64) to i32)) U: [5,2) S: [-2147483643,-2147483646)
191
191
; CHECK-NEXT: %int.zext = zext i32 %int5 to i64
192
192
; CHECK-NEXT: --> (1 + (zext i32 (4 + (trunc i64 (ptrtoint ptr @z_addr to i64) to i32)) to i64))<nuw><nsw> U: [1,4294967294) S: [1,4294967297)
193
193
; CHECK-NEXT: %ptr_noalign = bitcast ptr @z_addr_noalign to ptr
194
- ; CHECK-NEXT: --> @z_addr_noalign U: full-set S: full-set
194
+ ; CHECK-NEXT: --> @z_addr_noalign U: [1,-16) S: full-set
195
195
; CHECK-NEXT: %int0_na = ptrtoint ptr %ptr_noalign to i32
196
196
; CHECK-NEXT: --> (trunc i64 (ptrtoint ptr @z_addr_noalign to i64) to i32) U: full-set S: full-set
197
197
; CHECK-NEXT: %int5_na = add i32 %int0_na, 5
@@ -362,3 +362,40 @@ loop:
362
362
exit2:
363
363
ret i1 false
364
364
}
365
+
366
+
367
+ define void @dereferenceable_arg (ptr dereferenceable (128 ) %len_addr , ptr dereferenceable (128 ) align (8 ) %len_addr2 , ptr dereferenceable (13 ) align (1 ) %len_addr3 ) {
368
+ ; CHECK-LABEL: 'dereferenceable_arg'
369
+ ; CHECK-NEXT: Classifying expressions for: @dereferenceable_arg
370
+ ; CHECK-NEXT: %ptr = bitcast ptr %len_addr to ptr
371
+ ; CHECK-NEXT: --> %len_addr U: [1,-128) S: full-set
372
+ ; CHECK-NEXT: %ptr2 = bitcast ptr %len_addr2 to ptr
373
+ ; CHECK-NEXT: --> %len_addr2 U: [8,-135) S: [-9223372036854775808,9223372036854775801)
374
+ ; CHECK-NEXT: %ptr3 = bitcast ptr %len_addr3 to ptr
375
+ ; CHECK-NEXT: --> %len_addr3 U: [1,-13) S: full-set
376
+ ; CHECK-NEXT: Determining loop execution counts for: @dereferenceable_arg
377
+ ;
378
+ entry:
379
+ %ptr = bitcast ptr %len_addr to ptr
380
+ %ptr2 = bitcast ptr %len_addr2 to ptr
381
+ %ptr3 = bitcast ptr %len_addr3 to ptr
382
+
383
+ ret void
384
+ }
385
+
386
+
387
+ define void @dereferenceable_or_null_arg (ptr dereferenceable_or_null (128 ) %len_addr , ptr dereferenceable_or_null (128 ) align (8 ) %len_addr2 ) {
388
+ ; CHECK-LABEL: 'dereferenceable_or_null_arg'
389
+ ; CHECK-NEXT: Classifying expressions for: @dereferenceable_or_null_arg
390
+ ; CHECK-NEXT: %ptr = bitcast ptr %len_addr to ptr
391
+ ; CHECK-NEXT: --> %len_addr U: [0,-128) S: full-set
392
+ ; CHECK-NEXT: %ptr2 = bitcast ptr %len_addr2 to ptr
393
+ ; CHECK-NEXT: --> %len_addr2 U: [0,-135) S: [-9223372036854775808,9223372036854775801)
394
+ ; CHECK-NEXT: Determining loop execution counts for: @dereferenceable_or_null_arg
395
+ ;
396
+ entry:
397
+ %ptr = bitcast ptr %len_addr to ptr
398
+ %ptr2 = bitcast ptr %len_addr2 to ptr
399
+
400
+ ret void
401
+ }
0 commit comments