@@ -1663,8 +1663,7 @@ entry:
1663
1663
define <2 x float > @test_vmul_laneq3_f32_bitcast (<2 x float > %a , <2 x double > %v ) {
1664
1664
; CHECK-LABEL: test_vmul_laneq3_f32_bitcast:
1665
1665
; CHECK: // %bb.0:
1666
- ; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8
1667
- ; CHECK-NEXT: fmul v0.2s, v0.2s, v1.s[1]
1666
+ ; CHECK-NEXT: fmul v0.2s, v0.2s, v1.s[3]
1668
1667
; CHECK-NEXT: ret
1669
1668
%extract = shufflevector <2 x double > %v , <2 x double > undef , <1 x i32 > <i32 1 >
1670
1669
%bc = bitcast <1 x double > %extract to <2 x float >
@@ -1676,8 +1675,7 @@ define <2 x float> @test_vmul_laneq3_f32_bitcast(<2 x float> %a, <2 x double> %v
1676
1675
define <2 x float > @test_vmul_laneq2_f32_bitcast (<2 x float > %a , <2 x double > %v ) {
1677
1676
; CHECK-LABEL: test_vmul_laneq2_f32_bitcast:
1678
1677
; CHECK: // %bb.0:
1679
- ; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8
1680
- ; CHECK-NEXT: fmul v0.2s, v0.2s, v1.s[0]
1678
+ ; CHECK-NEXT: fmul v0.2s, v0.2s, v1.s[2]
1681
1679
; CHECK-NEXT: ret
1682
1680
%extract = shufflevector <2 x double > %v , <2 x double > undef , <1 x i32 > <i32 1 >
1683
1681
%bc = bitcast <1 x double > %extract to <2 x float >
@@ -1689,8 +1687,7 @@ define <2 x float> @test_vmul_laneq2_f32_bitcast(<2 x float> %a, <2 x double> %v
1689
1687
define <4 x i16 > @test_vadd_laneq5_i16_bitcast (<4 x i16 > %a , <2 x double > %v ) {
1690
1688
; CHECK-LABEL: test_vadd_laneq5_i16_bitcast:
1691
1689
; CHECK: // %bb.0:
1692
- ; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8
1693
- ; CHECK-NEXT: dup v1.4h, v1.h[1]
1690
+ ; CHECK-NEXT: dup v1.4h, v1.h[5]
1694
1691
; CHECK-NEXT: add v0.4h, v1.4h, v0.4h
1695
1692
; CHECK-NEXT: ret
1696
1693
%extract = shufflevector <2 x double > %v , <2 x double > undef , <1 x i32 > <i32 1 >
@@ -1700,6 +1697,8 @@ define <4 x i16> @test_vadd_laneq5_i16_bitcast(<4 x i16> %a, <2 x double> %v) {
1700
1697
ret <4 x i16 > %r
1701
1698
}
1702
1699
1700
+ ; TODO: The pattern in LowerVECTOR_SHUFFLE does not match what we are looking for.
1701
+
1703
1702
define <4 x i16 > @test_vadd_lane2_i16_bitcast_bigger_aligned (<4 x i16 > %a , <16 x i8 > %v ) {
1704
1703
; CHECK-LABEL: test_vadd_lane2_i16_bitcast_bigger_aligned:
1705
1704
; CHECK: // %bb.0:
@@ -1717,8 +1716,7 @@ define <4 x i16> @test_vadd_lane2_i16_bitcast_bigger_aligned(<4 x i16> %a, <16 x
1717
1716
define <4 x i16 > @test_vadd_lane5_i16_bitcast_bigger_aligned (<4 x i16 > %a , <16 x i8 > %v ) {
1718
1717
; CHECK-LABEL: test_vadd_lane5_i16_bitcast_bigger_aligned:
1719
1718
; CHECK: // %bb.0:
1720
- ; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8
1721
- ; CHECK-NEXT: dup v1.4h, v1.h[1]
1719
+ ; CHECK-NEXT: dup v1.4h, v1.h[5]
1722
1720
; CHECK-NEXT: add v0.4h, v1.4h, v0.4h
1723
1721
; CHECK-NEXT: ret
1724
1722
%extract = shufflevector <16 x i8 > %v , <16 x i8 > undef , <8 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
@@ -1728,6 +1726,8 @@ define <4 x i16> @test_vadd_lane5_i16_bitcast_bigger_aligned(<4 x i16> %a, <16 x
1728
1726
ret <4 x i16 > %r
1729
1727
}
1730
1728
1729
+ ; Negative test - can't dup bytes {3,4} of v8i16.
1730
+
1731
1731
define <4 x i16 > @test_vadd_lane_i16_bitcast_bigger_unaligned (<4 x i16 > %a , <16 x i8 > %v ) {
1732
1732
; CHECK-LABEL: test_vadd_lane_i16_bitcast_bigger_unaligned:
1733
1733
; CHECK: // %bb.0:
0 commit comments