@@ -480,6 +480,36 @@ define double @bitcast_extelt8(<1 x i64> %A) {
480480 ret double %bc
481481}
482482
483+ ; Extract a subvector from a vector, extracted element wider than source.
484+
485+ define <2 x i64 > @bitcast_extelt9 (<8 x i32 > %A ) {
486+ ; CHECK-LABEL: @bitcast_extelt9(
487+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <8 x i32> [[A:%.*]] to <2 x i128>
488+ ; CHECK-NEXT: [[EXT:%.*]] = extractelement <2 x i128> [[BC1]], i64 1
489+ ; CHECK-NEXT: [[BC2:%.*]] = bitcast i128 [[EXT]] to <2 x i64>
490+ ; CHECK-NEXT: ret <2 x i64> [[BC2]]
491+ ;
492+ %bc1 = bitcast <8 x i32 > %A to <2 x i128 >
493+ %ext = extractelement <2 x i128 > %bc1 , i64 1
494+ %bc2 = bitcast i128 %ext to <2 x i64 >
495+ ret <2 x i64 > %bc2
496+ }
497+
498+ ; Extract a subvector from a vector, extracted element narrower than source.
499+
500+ define <2 x i8 > @bitcast_extelt10 (<8 x i32 > %A ) {
501+ ; CHECK-LABEL: @bitcast_extelt10(
502+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <8 x i32> [[A:%.*]] to <16 x i16>
503+ ; CHECK-NEXT: [[EXT:%.*]] = extractelement <16 x i16> [[BC1]], i64 3
504+ ; CHECK-NEXT: [[BC2:%.*]] = bitcast i16 [[EXT]] to <2 x i8>
505+ ; CHECK-NEXT: ret <2 x i8> [[BC2]]
506+ ;
507+ %bc1 = bitcast <8 x i32 > %A to <16 x i16 >
508+ %ext = extractelement <16 x i16 > %bc1 , i64 3
509+ %bc2 = bitcast i16 %ext to <2 x i8 >
510+ ret <2 x i8 > %bc2
511+ }
512+
483513define <2 x i32 > @test4 (i32 %A , i32 %B ){
484514; CHECK-LABEL: @test4(
485515; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i32> poison, i32 [[A:%.*]], i64 0
0 commit comments