@@ -788,9 +788,9 @@ define i1 @gep_diff_base_same_indices_nuw_nusw(ptr %x, ptr %y, i64 %z) {
788788
789789define i1 @gep_multiple_eq (ptr %base , i64 %idx , i64 %idx2 ) {
790790; 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
794794; CHECK-NEXT: ret i1 [[CMP]]
795795;
796796 %gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -801,9 +801,9 @@ define i1 @gep_multiple_eq(ptr %base, i64 %idx, i64 %idx2) {
801801
802802define i1 @gep_multiple_eq_commuted (ptr %base , i64 %idx , i64 %idx2 ) {
803803; 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
807807; CHECK-NEXT: ret i1 [[CMP]]
808808;
809809 %gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -814,9 +814,8 @@ define i1 @gep_multiple_eq_commuted(ptr %base, i64 %idx, i64 %idx2) {
814814
815815define i1 @gep_mugtiple_ugt_nuw (ptr %base , i64 %idx , i64 %idx2 ) {
816816; 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]]
820819; CHECK-NEXT: ret i1 [[CMP]]
821820;
822821 %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) {
840839
841840define i1 @gep_mugtiple_ugt_inbounds_nusw (ptr %base , i64 %idx , i64 %idx2 ) {
842841; 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
846845; CHECK-NEXT: ret i1 [[CMP]]
847846;
848847 %gep1 = getelementptr inbounds i32 , ptr %base , i64 %idx
0 commit comments