Skip to content

Commit d80ab81

Browse files
committed
Add tests for diff of splat geps
1 parent b8e3e07 commit d80ab81

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,3 +995,39 @@ define i64 @multiple_geps_inbounds_nuw(ptr %base, i64 %idx, i64 %idx2) {
995995
%d = sub i64 %i2, %i1
996996
ret i64 %d
997997
}
998+
999+
define <2 x i64> @splat_geps(ptr %base, <2 x i64> %idx1, <2 x i64> %idx2) {
1000+
; CHECK-LABEL: @splat_geps(
1001+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], <2 x i64> [[IDX1:%.*]]
1002+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[BASE]], <2 x i64> [[IDX2:%.*]]
1003+
; CHECK-NEXT: [[GEP1_INT:%.*]] = ptrtoint <2 x ptr> [[GEP1]] to <2 x i64>
1004+
; CHECK-NEXT: [[GEP2_INT:%.*]] = ptrtoint <2 x ptr> [[GEP2]] to <2 x i64>
1005+
; CHECK-NEXT: [[D:%.*]] = sub <2 x i64> [[GEP2_INT]], [[GEP1_INT]]
1006+
; CHECK-NEXT: ret <2 x i64> [[D]]
1007+
;
1008+
%gep1 = getelementptr inbounds i8, ptr %base, <2 x i64> %idx1
1009+
%gep2 = getelementptr inbounds i8, ptr %base, <2 x i64> %idx2
1010+
%gep1.int = ptrtoint <2 x ptr> %gep1 to <2 x i64>
1011+
%gep2.int = ptrtoint <2 x ptr> %gep2 to <2 x i64>
1012+
%d = sub <2 x i64> %gep2.int, %gep1.int
1013+
ret <2 x i64> %d
1014+
}
1015+
1016+
define <2 x i64> @splat_geps_multiple(ptr %base, i64 %idx0, <2 x i64> %idx1, <2 x i64> %idx2) {
1017+
; CHECK-LABEL: @splat_geps_multiple(
1018+
; CHECK-NEXT: [[GEP0:%.*]] = getelementptr inbounds i8, ptr [[BASE:%.*]], i64 [[IDX0:%.*]]
1019+
; CHECK-NEXT: [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[GEP0]], <2 x i64> [[IDX1:%.*]]
1020+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[BASE]], <2 x i64> [[IDX2:%.*]]
1021+
; CHECK-NEXT: [[GEP1_INT:%.*]] = ptrtoint <2 x ptr> [[GEP1]] to <2 x i64>
1022+
; CHECK-NEXT: [[GEP2_INT:%.*]] = ptrtoint <2 x ptr> [[GEP2]] to <2 x i64>
1023+
; CHECK-NEXT: [[D:%.*]] = sub <2 x i64> [[GEP2_INT]], [[GEP1_INT]]
1024+
; CHECK-NEXT: ret <2 x i64> [[D]]
1025+
;
1026+
%gep0 = getelementptr inbounds i8, ptr %base, i64 %idx0
1027+
%gep1 = getelementptr inbounds i8, ptr %gep0, <2 x i64> %idx1
1028+
%gep2 = getelementptr inbounds i8, ptr %base, <2 x i64> %idx2
1029+
%gep1.int = ptrtoint <2 x ptr> %gep1 to <2 x i64>
1030+
%gep2.int = ptrtoint <2 x ptr> %gep2 to <2 x i64>
1031+
%d = sub <2 x i64> %gep2.int, %gep1.int
1032+
ret <2 x i64> %d
1033+
}

0 commit comments

Comments
 (0)