@@ -995,3 +995,33 @@ 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: [[D:%.*]] = sub nsw <2 x i64> [[IDX2:%.*]], [[IDX1:%.*]]
1002+ ; CHECK-NEXT: ret <2 x i64> [[D]]
1003+ ;
1004+ %gep1 = getelementptr inbounds i8 , ptr %base , <2 x i64 > %idx1
1005+ %gep2 = getelementptr inbounds i8 , ptr %base , <2 x i64 > %idx2
1006+ %gep1.int = ptrtoint <2 x ptr > %gep1 to <2 x i64 >
1007+ %gep2.int = ptrtoint <2 x ptr > %gep2 to <2 x i64 >
1008+ %d = sub <2 x i64 > %gep2.int , %gep1.int
1009+ ret <2 x i64 > %d
1010+ }
1011+
1012+ define <2 x i64 > @splat_geps_multiple (ptr %base , i64 %idx0 , <2 x i64 > %idx1 , <2 x i64 > %idx2 ) {
1013+ ; CHECK-LABEL: @splat_geps_multiple(
1014+ ; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <2 x i64> poison, i64 [[IDX0:%.*]], i64 0
1015+ ; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <2 x i64> [[DOTSPLATINSERT]], <2 x i64> poison, <2 x i32> zeroinitializer
1016+ ; CHECK-NEXT: [[TMP1:%.*]] = add nsw <2 x i64> [[DOTSPLAT]], [[IDX1:%.*]]
1017+ ; CHECK-NEXT: [[D:%.*]] = sub nsw <2 x i64> [[IDX2:%.*]], [[TMP1]]
1018+ ; CHECK-NEXT: ret <2 x i64> [[D]]
1019+ ;
1020+ %gep0 = getelementptr inbounds i8 , ptr %base , i64 %idx0
1021+ %gep1 = getelementptr inbounds i8 , ptr %gep0 , <2 x i64 > %idx1
1022+ %gep2 = getelementptr inbounds i8 , ptr %base , <2 x i64 > %idx2
1023+ %gep1.int = ptrtoint <2 x ptr > %gep1 to <2 x i64 >
1024+ %gep2.int = ptrtoint <2 x ptr > %gep2 to <2 x i64 >
1025+ %d = sub <2 x i64 > %gep2.int , %gep1.int
1026+ ret <2 x i64 > %d
1027+ }
0 commit comments