@@ -760,9 +760,9 @@ define i1 @gep_diff_base_same_indices_nuw_nusw(ptr %x, ptr %y, i64 %z) {
760760
761761define i1 @gep_multiple_eq (ptr %base , i64 %idx , i64 %idx2 ) {
762762; 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]]
763+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
764+ ; CHECK-NEXT: [[DOTMASK :%.*]] = and i64 [[GEP1_IDX1 ]], 4611686018427387903
765+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[DOTMASK ]], 0
766766; CHECK-NEXT: ret i1 [[CMP]]
767767;
768768 %gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -773,9 +773,9 @@ define i1 @gep_multiple_eq(ptr %base, i64 %idx, i64 %idx2) {
773773
774774define i1 @gep_multiple_eq_commuted (ptr %base , i64 %idx , i64 %idx2 ) {
775775; 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]]
776+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
777+ ; CHECK-NEXT: [[DOTMASK :%.*]] = and i64 [[GEP1_IDX1 ]], 4611686018427387903
778+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[DOTMASK ]], 0
779779; CHECK-NEXT: ret i1 [[CMP]]
780780;
781781 %gep1 = getelementptr i32 , ptr %base , i64 %idx
@@ -786,9 +786,8 @@ define i1 @gep_multiple_eq_commuted(ptr %base, i64 %idx, i64 %idx2) {
786786
787787define i1 @gep_mugtiple_ugt_nuw (ptr %base , i64 %idx , i64 %idx2 ) {
788788; 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]]
789+ ; CHECK-NEXT: [[GEP1_IDX1:%.*]] = sub i64 0, [[IDX2:%.*]]
790+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IDX:%.*]], [[GEP1_IDX1]]
792791; CHECK-NEXT: ret i1 [[CMP]]
793792;
794793 %gep1 = getelementptr nuw i32 , ptr %base , i64 %idx
@@ -812,9 +811,9 @@ define i1 @gep_mugtiple_ugt_not_all_nuw(ptr %base, i64 %idx, i64 %idx2) {
812811
813812define i1 @gep_mugtiple_ugt_inbounds_nusw (ptr %base , i64 %idx , i64 %idx2 ) {
814813; 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]]
814+ ; CHECK-NEXT: [[GEP1_IDX1 :%.*]] = add i64 [[IDX :%.*]], [[IDX2 :%.*]]
815+ ; CHECK-NEXT: [[TMP1 :%.*]] = shl i64 [[GEP1_IDX1 ]], 2
816+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[TMP1 ]], 0
818817; CHECK-NEXT: ret i1 [[CMP]]
819818;
820819 %gep1 = getelementptr inbounds i32 , ptr %base , i64 %idx
0 commit comments