@@ -811,6 +811,46 @@ define i1 @nocaptureInboundsGEPICmpRev(ptr %x) {
811811 ret i1 %2
812812}
813813
814+ define i1 @notInboundsGEPICmp (ptr %x ) {
815+ ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
816+ ; FNATTRS-LABEL: define i1 @notInboundsGEPICmp
817+ ; FNATTRS-SAME: (ptr readnone captures(address) [[X:%.*]]) #[[ATTR0]] {
818+ ; FNATTRS-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[X]], i32 5
819+ ; FNATTRS-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP1]], null
820+ ; FNATTRS-NEXT: ret i1 [[TMP2]]
821+ ;
822+ ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
823+ ; ATTRIBUTOR-LABEL: define i1 @notInboundsGEPICmp
824+ ; ATTRIBUTOR-SAME: (ptr nofree readnone [[X:%.*]]) #[[ATTR0]] {
825+ ; ATTRIBUTOR-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[X]], i32 5
826+ ; ATTRIBUTOR-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP1]], null
827+ ; ATTRIBUTOR-NEXT: ret i1 [[TMP2]]
828+ ;
829+ %1 = getelementptr i32 , ptr %x , i32 5
830+ %2 = icmp eq ptr %1 , null
831+ ret i1 %2
832+ }
833+
834+ define i1 @inboundsGEPICmpNullPointerDefined (ptr %x ) null_pointer_is_valid {
835+ ; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
836+ ; FNATTRS-LABEL: define i1 @inboundsGEPICmpNullPointerDefined
837+ ; FNATTRS-SAME: (ptr readnone captures(address) [[X:%.*]]) #[[ATTR16:[0-9]+]] {
838+ ; FNATTRS-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[X]], i32 5
839+ ; FNATTRS-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP1]], null
840+ ; FNATTRS-NEXT: ret i1 [[TMP2]]
841+ ;
842+ ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
843+ ; ATTRIBUTOR-LABEL: define i1 @inboundsGEPICmpNullPointerDefined
844+ ; ATTRIBUTOR-SAME: (ptr nofree readnone [[X:%.*]]) #[[ATTR12:[0-9]+]] {
845+ ; ATTRIBUTOR-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[X]], i32 5
846+ ; ATTRIBUTOR-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP1]], null
847+ ; ATTRIBUTOR-NEXT: ret i1 [[TMP2]]
848+ ;
849+ %1 = getelementptr i32 , ptr %x , i32 5
850+ %2 = icmp eq ptr %1 , null
851+ ret i1 %2
852+ }
853+
814854define i1 @nocaptureDereferenceableOrNullICmp (ptr dereferenceable_or_null (4 ) %x ) {
815855; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
816856; FNATTRS-LABEL: define noundef i1 @nocaptureDereferenceableOrNullICmp
@@ -831,13 +871,13 @@ define i1 @nocaptureDereferenceableOrNullICmp(ptr dereferenceable_or_null(4) %x)
831871define i1 @captureDereferenceableOrNullICmp (ptr dereferenceable_or_null (4 ) %x ) null_pointer_is_valid {
832872; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
833873; FNATTRS-LABEL: define noundef i1 @captureDereferenceableOrNullICmp
834- ; FNATTRS-SAME: (ptr readnone captures(address_is_null) dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR16:[0-9]+ ]] {
874+ ; FNATTRS-SAME: (ptr readnone captures(address_is_null) dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR16]] {
835875; FNATTRS-NEXT: [[TMP1:%.*]] = icmp eq ptr [[X]], null
836876; FNATTRS-NEXT: ret i1 [[TMP1]]
837877;
838878; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind null_pointer_is_valid willreturn memory(none)
839879; ATTRIBUTOR-LABEL: define i1 @captureDereferenceableOrNullICmp
840- ; ATTRIBUTOR-SAME: (ptr nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR12:[0-9]+ ]] {
880+ ; ATTRIBUTOR-SAME: (ptr nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR12]] {
841881; ATTRIBUTOR-NEXT: [[TMP1:%.*]] = icmp eq ptr [[X]], null
842882; ATTRIBUTOR-NEXT: ret i1 [[TMP1]]
843883;
0 commit comments