@@ -357,3 +357,36 @@ finally:
357357 %val3 = phi <8 x i32 > [ %val1 , %then ], [ %val2 , %else ]
358358 ret <8 x i32 > %val3
359359}
360+
361+ define <8 x i32 > @shuffle_v4_v8i32_cond_r1_4 (ptr addrspace (1 ) nocapture readonly %arg0 , i1 %cond ) local_unnamed_addr {
362+ ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_cond_r1_4(
363+ ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr {
364+ ; CHECK-NEXT: [[ENTRY:.*:]]
365+ ; CHECK-NEXT: [[VAL0:%.*]] = load <4 x i32>, ptr addrspace(1) [[ARG0]], align 32
366+ ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]]
367+ ; CHECK: [[THEN]]:
368+ ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <4 x i32> [[VAL0]], <4 x i32> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2>
369+ ; CHECK-NEXT: br label %[[FINALLY:.*]]
370+ ; CHECK: [[ELSE]]:
371+ ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <4 x i32> [[VAL0]], <4 x i32> poison, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 4, i32 4, i32 4, i32 4>
372+ ; CHECK-NEXT: br label %[[FINALLY]]
373+ ; CHECK: [[FINALLY]]:
374+ ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ]
375+ ; CHECK-NEXT: ret <8 x i32> [[VAL3]]
376+ ;
377+ entry:
378+ %val0 = load <4 x i32 >, ptr addrspace (1 ) %arg0 , align 32
379+ br i1 %cond , label %then , label %else
380+
381+ then:
382+ %val1 = shufflevector <4 x i32 > %val0 , <4 x i32 > poison, <8 x i32 > <i32 1 , i32 1 , i32 1 , i32 1 , i32 2 , i32 2 , i32 2 , i32 2 >
383+ br label %finally
384+
385+ else:
386+ %val2 = shufflevector <4 x i32 > %val0 , <4 x i32 > poison, <8 x i32 > <i32 3 , i32 3 , i32 3 , i32 3 , i32 4 , i32 4 , i32 4 , i32 4 >
387+ br label %finally
388+
389+ finally:
390+ %val3 = phi <8 x i32 > [ %val1 , %then ], [ %val2 , %else ]
391+ ret <8 x i32 > %val3
392+ }
0 commit comments