; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 ; RUN: opt -passes=vector-combine -S < %s | FileCheck %s define <8 x half> @shuffle_v4_v8f16_r0_1_volatile(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r0_1_volatile( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x half> [[TMP0]], <4 x half> poison, <8 x i32> ; CHECK-NEXT: ret <8 x half> [[TMP1]] ; entry: %val0 = load volatile <4 x half>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> ret <8 x half> %val1 } define <8 x half> @shuffle_v4_v8f16_r0_1(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r0_1( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <2 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x half> [[TMP0]], <2 x half> poison, <8 x i32> ; CHECK-NEXT: ret <8 x half> [[TMP1]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> ret <8 x half> %val1 } define <8 x half> @shuffle_v4_v8f16_r0_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r0_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <8 x i32> ; CHECK-NEXT: ret <8 x half> [[TMP1]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> ret <8 x half> %val1 } define <4 x half> @shuffle_v4_v4f16_r1_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <4 x half> @shuffle_v4_v4f16_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <4 x i32> ; CHECK-NEXT: ret <4 x half> [[TMP1]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <4 x i32> ret <4 x half> %val1 } define <8 x half> @shuffle_v4_v8f16_r1_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <8 x i32> ; CHECK-NEXT: ret <8 x half> [[TMP1]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> ret <8 x half> %val1 } define <8 x half> @shuffle_v4_v8f16_cond_r0_1(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_cond_r0_1( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <2 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <2 x half> [[TMP0]], <2 x half> poison, <8 x i32> zeroinitializer ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <2 x half> [[TMP0]], <2 x half> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x half> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x half> [[VAL3]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x half> [ %val1, %then ], [ %val2, %else ] ret <8 x half> %val3 } define <4 x half> @shuffle_v4_v4f16_cond_r1_2(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <4 x half> @shuffle_v4_v4f16_cond_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <4 x i32> ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <4 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <4 x half> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <4 x half> [[VAL3]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <4 x i32> br label %finally else: %val2 = shufflevector <4 x half> %val0, <4 x half> poison, <4 x i32> br label %finally finally: %val3 = phi <4 x half> [ %val1, %then ], [ %val2, %else ] ret <4 x half> %val3 } define <8 x half> @shuffle_v4_v8f16_cond_r1_2(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_cond_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x half>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <3 x half> [[TMP0]], <3 x half> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x half> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x half> [[VAL3]] ; entry: %val0 = load <4 x half>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x half> [ %val1, %then ], [ %val2, %else ] ret <8 x half> %val3 } define <8 x i32> @shuffle_v4_v8i32_r0_1(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_r0_1( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <8 x i32> ; CHECK-NEXT: ret <8 x i32> [[TMP1]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> ret <8 x i32> %val1 } define <8 x i32> @shuffle_v4_v8i32_r0_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_r0_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> ; CHECK-NEXT: ret <8 x i32> [[TMP1]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> ret <8 x i32> %val1 } define <4 x i32> @shuffle_v4_v4i32_r1_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <4 x i32> @shuffle_v4_v4i32_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <4 x i32> ; CHECK-NEXT: ret <4 x i32> [[TMP1]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <4 x i32> ret <4 x i32> %val1 } define <8 x i32> @shuffle_v4_v8i32_r1_2(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> ; CHECK-NEXT: ret <8 x i32> [[TMP1]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> ret <8 x i32> %val1 } define <8 x i32> @shuffle_v4_v8i32_cond_r0_1(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_cond_r0_1( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <8 x i32> zeroinitializer ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x i32> [[VAL3]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x i32> [ %val1, %then ], [ %val2, %else ] ret <8 x i32> %val3 } define <8 x i32> @shuffle_v4_v8i32_cond_r0_2(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_cond_r0_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> zeroinitializer ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x i32> [[VAL3]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x i32> [ %val1, %then ], [ %val2, %else ] ret <8 x i32> %val3 } define <4 x i32> @shuffle_v4_v4i32_cond_r1_2(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <4 x i32> @shuffle_v4_v4i32_cond_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <4 x i32> ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <4 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <4 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <4 x i32> [[VAL3]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <4 x i32> br label %finally else: %val2 = shufflevector <4 x i32> %val0, <4 x i32> poison, <4 x i32> br label %finally finally: %val3 = phi <4 x i32> [ %val1, %then ], [ %val2, %else ] ret <4 x i32> %val3 } define <8 x i32> @shuffle_v4_v8i32_cond_r1_2(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_cond_r1_2( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP0:%.*]] = load <3 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <3 x i32> [[TMP0]], <3 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x i32> [[VAL3]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x i32> [ %val1, %then ], [ %val2, %else ] ret <8 x i32> %val3 } define <8 x i32> @shuffle_v4_v8i32_cond_r1_4(ptr addrspace(1) nocapture readonly %arg0, i1 %cond) local_unnamed_addr { ; CHECK-LABEL: define <8 x i32> @shuffle_v4_v8i32_cond_r1_4( ; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]], i1 [[COND:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[VAL0:%.*]] = load <4 x i32>, ptr addrspace(1) [[ARG0]], align 32 ; CHECK-NEXT: br i1 [[COND]], label %[[THEN:.*]], label %[[ELSE:.*]] ; CHECK: [[THEN]]: ; CHECK-NEXT: [[VAL1:%.*]] = shufflevector <4 x i32> [[VAL0]], <4 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY:.*]] ; CHECK: [[ELSE]]: ; CHECK-NEXT: [[VAL2:%.*]] = shufflevector <4 x i32> [[VAL0]], <4 x i32> poison, <8 x i32> ; CHECK-NEXT: br label %[[FINALLY]] ; CHECK: [[FINALLY]]: ; CHECK-NEXT: [[VAL3:%.*]] = phi <8 x i32> [ [[VAL1]], %[[THEN]] ], [ [[VAL2]], %[[ELSE]] ] ; CHECK-NEXT: ret <8 x i32> [[VAL3]] ; entry: %val0 = load <4 x i32>, ptr addrspace(1) %arg0, align 32 br i1 %cond, label %then, label %else then: %val1 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally else: %val2 = shufflevector <4 x i32> %val0, <4 x i32> poison, <8 x i32> br label %finally finally: %val3 = phi <8 x i32> [ %val1, %then ], [ %val2, %else ] ret <8 x i32> %val3 } define <16 x i8> @shuffle_v16_v16i8_r0_31(ptr %arg) { ; CHECK-LABEL: define <16 x i8> @shuffle_v16_v16i8_r0_31( ; CHECK-SAME: ptr [[ARG:%.*]]) { ; CHECK-NEXT: [[LOAD:%.*]] = load <16 x i8>, ptr [[ARG]], align 1 ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <16 x i8> [[LOAD]], <16 x i8> poison, <16 x i32> ; CHECK-NEXT: ret <16 x i8> [[SHUF]] ; %load= load <16 x i8>, ptr %arg, align 1 %shuf = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> ret <16 x i8> %shuf }