Skip to content

Commit b1e4bf8

Browse files
committed
Add icmp gep chain tests
1 parent 2019553 commit b1e4bf8

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-gep.ll

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,3 +757,68 @@ define i1 @gep_diff_base_same_indices_nuw_nusw(ptr %x, ptr %y, i64 %z) {
757757
%cmp = icmp ult ptr %gep1, %gep2
758758
ret i1 %cmp
759759
}
760+
761+
define i1 @gep_multiple_eq(ptr %base, i64 %idx, i64 %idx2) {
762+
; CHECK-LABEL: @gep_multiple_eq(
763+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
764+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
765+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP2]], [[BASE]]
766+
; CHECK-NEXT: ret i1 [[CMP]]
767+
;
768+
%gep1 = getelementptr i32, ptr %base, i64 %idx
769+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
770+
%cmp = icmp eq ptr %gep2, %base
771+
ret i1 %cmp
772+
}
773+
774+
define i1 @gep_multiple_eq_commuted(ptr %base, i64 %idx, i64 %idx2) {
775+
; CHECK-LABEL: @gep_multiple_eq_commuted(
776+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
777+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
778+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[BASE]], [[GEP2]]
779+
; CHECK-NEXT: ret i1 [[CMP]]
780+
;
781+
%gep1 = getelementptr i32, ptr %base, i64 %idx
782+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
783+
%cmp = icmp eq ptr %base, %gep2
784+
ret i1 %cmp
785+
}
786+
787+
define i1 @gep_mugtiple_ugt_nuw(ptr %base, i64 %idx, i64 %idx2) {
788+
; CHECK-LABEL: @gep_mugtiple_ugt_nuw(
789+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr nuw i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
790+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nuw i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
791+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
792+
; CHECK-NEXT: ret i1 [[CMP]]
793+
;
794+
%gep1 = getelementptr nuw i32, ptr %base, i64 %idx
795+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %idx2
796+
%cmp = icmp ugt ptr %gep2, %base
797+
ret i1 %cmp
798+
}
799+
800+
define i1 @gep_mugtiple_ugt_not_all_nuw(ptr %base, i64 %idx, i64 %idx2) {
801+
; CHECK-LABEL: @gep_mugtiple_ugt_not_all_nuw(
802+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr nuw i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
803+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
804+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
805+
; CHECK-NEXT: ret i1 [[CMP]]
806+
;
807+
%gep1 = getelementptr nuw i32, ptr %base, i64 %idx
808+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
809+
%cmp = icmp ugt ptr %gep2, %base
810+
ret i1 %cmp
811+
}
812+
813+
define i1 @gep_mugtiple_ugt_inbounds_nusw(ptr %base, i64 %idx, i64 %idx2) {
814+
; CHECK-LABEL: @gep_mugtiple_ugt_inbounds_nusw(
815+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
816+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nusw i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
817+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
818+
; CHECK-NEXT: ret i1 [[CMP]]
819+
;
820+
%gep1 = getelementptr inbounds i32, ptr %base, i64 %idx
821+
%gep2 = getelementptr nusw i32, ptr %gep1, i64 %idx2
822+
%cmp = icmp ugt ptr %gep2, %base
823+
ret i1 %cmp
824+
}

0 commit comments

Comments
 (0)