@@ -788,9 +788,9 @@ define i1 @gep_diff_base_same_indices_nuw_nusw(ptr %x, ptr %y, i64 %z) {
788
788
789
789
define i1 @gep_multiple_eq (ptr %base , i64 %idx , i64 %idx2 ) {
790
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]]
791
+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
792
+ ; CHECK-NEXT: [[DOTMASK :%.*]] = and i64 [[GEP1_IDX1 ]], 4611686018427387903
793
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[DOTMASK ]], 0
794
794
; CHECK-NEXT: ret i1 [[CMP]]
795
795
;
796
796
%gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -801,9 +801,9 @@ define i1 @gep_multiple_eq(ptr %base, i64 %idx, i64 %idx2) {
801
801
802
802
define i1 @gep_multiple_eq_commuted (ptr %base , i64 %idx , i64 %idx2 ) {
803
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]]
804
+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
805
+ ; CHECK-NEXT: [[DOTMASK :%.*]] = and i64 [[GEP1_IDX1 ]], 4611686018427387903
806
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[DOTMASK ]], 0
807
807
; CHECK-NEXT: ret i1 [[CMP]]
808
808
;
809
809
%gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -814,9 +814,8 @@ define i1 @gep_multiple_eq_commuted(ptr %base, i64 %idx, i64 %idx2) {
814
814
815
815
define i1 @gep_mugtiple_ugt_nuw (ptr %base , i64 %idx , i64 %idx2 ) {
816
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]]
817
+ ; CHECK-NEXT: [[GEP1_IDX1:%.*]] = sub i64 0, [[IDX2:%.*]]
818
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IDX:%.*]], [[GEP1_IDX1]]
820
819
; CHECK-NEXT: ret i1 [[CMP]]
821
820
;
822
821
%gep1 = getelementptr nuw i32 , ptr %base , i64 %idx
@@ -840,9 +839,9 @@ define i1 @gep_mugtiple_ugt_not_all_nuw(ptr %base, i64 %idx, i64 %idx2) {
840
839
841
840
define i1 @gep_mugtiple_ugt_inbounds_nusw (ptr %base , i64 %idx , i64 %idx2 ) {
842
841
; 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]]
842
+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
843
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl i64 [[GEP1_IDX1 ]], 2
844
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[TMP1 ]], 0
846
845
; CHECK-NEXT: ret i1 [[CMP]]
847
846
;
848
847
%gep1 = getelementptr inbounds i32 , ptr %base , i64 %idx
0 commit comments