Skip to content

Commit df5e53f

Browse files
committed
Add icmp gep chain tests
1 parent bedd7dd commit df5e53f

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
@@ -785,3 +785,68 @@ define i1 @gep_diff_base_same_indices_nuw_nusw(ptr %x, ptr %y, i64 %z) {
785785
%cmp = icmp ult ptr %gep1, %gep2
786786
ret i1 %cmp
787787
}
788+
789+
define i1 @gep_multiple_eq(ptr %base, i64 %idx, i64 %idx2) {
790+
; CHECK-LABEL: @gep_multiple_eq(
791+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
792+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
793+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP2]], [[BASE]]
794+
; CHECK-NEXT: ret i1 [[CMP]]
795+
;
796+
%gep1 = getelementptr i32, ptr %base, i64 %idx
797+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
798+
%cmp = icmp eq ptr %gep2, %base
799+
ret i1 %cmp
800+
}
801+
802+
define i1 @gep_multiple_eq_commuted(ptr %base, i64 %idx, i64 %idx2) {
803+
; CHECK-LABEL: @gep_multiple_eq_commuted(
804+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
805+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
806+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[BASE]], [[GEP2]]
807+
; CHECK-NEXT: ret i1 [[CMP]]
808+
;
809+
%gep1 = getelementptr i32, ptr %base, i64 %idx
810+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
811+
%cmp = icmp eq ptr %base, %gep2
812+
ret i1 %cmp
813+
}
814+
815+
define i1 @gep_mugtiple_ugt_nuw(ptr %base, i64 %idx, i64 %idx2) {
816+
; CHECK-LABEL: @gep_mugtiple_ugt_nuw(
817+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr nuw i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
818+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nuw i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
819+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
820+
; CHECK-NEXT: ret i1 [[CMP]]
821+
;
822+
%gep1 = getelementptr nuw i32, ptr %base, i64 %idx
823+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %idx2
824+
%cmp = icmp ugt ptr %gep2, %base
825+
ret i1 %cmp
826+
}
827+
828+
define i1 @gep_mugtiple_ugt_not_all_nuw(ptr %base, i64 %idx, i64 %idx2) {
829+
; CHECK-LABEL: @gep_mugtiple_ugt_not_all_nuw(
830+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr nuw i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
831+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
832+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
833+
; CHECK-NEXT: ret i1 [[CMP]]
834+
;
835+
%gep1 = getelementptr nuw i32, ptr %base, i64 %idx
836+
%gep2 = getelementptr i32, ptr %gep1, i64 %idx2
837+
%cmp = icmp ugt ptr %gep2, %base
838+
ret i1 %cmp
839+
}
840+
841+
define i1 @gep_mugtiple_ugt_inbounds_nusw(ptr %base, i64 %idx, i64 %idx2) {
842+
; CHECK-LABEL: @gep_mugtiple_ugt_inbounds_nusw(
843+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
844+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nusw i32, ptr [[GEP1]], i64 [[IDX2:%.*]]
845+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt ptr [[GEP2]], [[BASE]]
846+
; CHECK-NEXT: ret i1 [[CMP]]
847+
;
848+
%gep1 = getelementptr inbounds i32, ptr %base, i64 %idx
849+
%gep2 = getelementptr nusw i32, ptr %gep1, i64 %idx2
850+
%cmp = icmp ugt ptr %gep2, %base
851+
ret i1 %cmp
852+
}

0 commit comments

Comments
 (0)