@@ -261,6 +261,45 @@ define <1 x ptr> @shuffle_gep(ptr %x1, ptr %x2) {
261261 ret <1 x ptr > %ret
262262}
263263
264+ define <1 x ptr > @shuffle_gep_inbounds (ptr %x1 , ptr %x2 ) {
265+ ; CHECK-LABEL: @shuffle_gep_inbounds(
266+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <1 x ptr> poison, ptr [[X2:%.*]], i64 0
267+ ; CHECK-NEXT: [[RET:%.*]] = getelementptr inbounds i8, <1 x ptr> [[TMP1]], i64 5
268+ ; CHECK-NEXT: ret <1 x ptr> [[RET]]
269+ ;
270+ %ins.1 = insertelement <2 x ptr > poison, ptr %x1 , i32 0
271+ %ins.2 = insertelement <2 x ptr > %ins.1 , ptr %x2 , i32 1
272+ %gep = getelementptr inbounds i8 , <2 x ptr > %ins.2 , i64 5
273+ %ret = shufflevector <2 x ptr > %gep , <2 x ptr > poison, <1 x i32 > <i32 1 >
274+ ret <1 x ptr > %ret
275+ }
276+
277+ define <1 x ptr > @shuffle_gep_nuw (ptr %x1 , ptr %x2 ) {
278+ ; CHECK-LABEL: @shuffle_gep_nuw(
279+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <1 x ptr> poison, ptr [[X2:%.*]], i64 0
280+ ; CHECK-NEXT: [[RET:%.*]] = getelementptr nuw i8, <1 x ptr> [[TMP1]], i64 5
281+ ; CHECK-NEXT: ret <1 x ptr> [[RET]]
282+ ;
283+ %ins.1 = insertelement <2 x ptr > poison, ptr %x1 , i32 0
284+ %ins.2 = insertelement <2 x ptr > %ins.1 , ptr %x2 , i32 1
285+ %gep = getelementptr nuw i8 , <2 x ptr > %ins.2 , i64 5
286+ %ret = shufflevector <2 x ptr > %gep , <2 x ptr > poison, <1 x i32 > <i32 1 >
287+ ret <1 x ptr > %ret
288+ }
289+
290+ define <1 x ptr > @shuffle_gep_nusw (ptr %x1 , ptr %x2 ) {
291+ ; CHECK-LABEL: @shuffle_gep_nusw(
292+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <1 x ptr> poison, ptr [[X2:%.*]], i64 0
293+ ; CHECK-NEXT: [[RET:%.*]] = getelementptr nusw i8, <1 x ptr> [[TMP1]], i64 5
294+ ; CHECK-NEXT: ret <1 x ptr> [[RET]]
295+ ;
296+ %ins.1 = insertelement <2 x ptr > poison, ptr %x1 , i32 0
297+ %ins.2 = insertelement <2 x ptr > %ins.1 , ptr %x2 , i32 1
298+ %gep = getelementptr nusw i8 , <2 x ptr > %ins.2 , i64 5
299+ %ret = shufflevector <2 x ptr > %gep , <2 x ptr > poison, <1 x i32 > <i32 1 >
300+ ret <1 x ptr > %ret
301+ }
302+
264303; Increasing length of vector ops is not a good canonicalization.
265304
266305define <3 x i32 > @add_wider (i32 %y , i32 %z ) {
0 commit comments