@@ -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