@@ -1662,19 +1662,46 @@ define <4 x double> @broadcast_v4f64_v2f64_4u61(ptr %vp, <4 x double> %default)
1662
1662
ret <4 x double > %res
1663
1663
}
1664
1664
1665
+ ; TODO: prefer vblend vs vunpckh on AVX1 targets
1665
1666
define <8 x float > @broadcast_v8f32_v2f32_u1uu0uEu (ptr %vp , <8 x float > %default ) {
1666
- ; X86-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1667
- ; X86: # %bb.0:
1668
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1669
- ; X86-NEXT: vbroadcastsd (%eax), %ymm1
1670
- ; X86-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
1671
- ; X86-NEXT: retl
1667
+ ; X86-AVX1- LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1668
+ ; X86-AVX1 : # %bb.0:
1669
+ ; X86-AVX1- NEXT: movl {{[0-9]+}}(%esp), %eax
1670
+ ; X86-AVX1- NEXT: vbroadcastsd (%eax), %ymm1
1671
+ ; X86-AVX1- NEXT: vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
1672
+ ; X86-AVX1- NEXT: retl
1672
1673
;
1673
- ; X64-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1674
- ; X64: # %bb.0:
1675
- ; X64-NEXT: vbroadcastsd (%rdi), %ymm1
1676
- ; X64-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
1677
- ; X64-NEXT: retq
1674
+ ; X86-AVX2-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1675
+ ; X86-AVX2: # %bb.0:
1676
+ ; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax
1677
+ ; X86-AVX2-NEXT: vbroadcastsd (%eax), %ymm1
1678
+ ; X86-AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6,7]
1679
+ ; X86-AVX2-NEXT: retl
1680
+ ;
1681
+ ; X86-AVX512-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1682
+ ; X86-AVX512: # %bb.0:
1683
+ ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1684
+ ; X86-AVX512-NEXT: vbroadcastsd (%eax), %ymm1
1685
+ ; X86-AVX512-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6,7]
1686
+ ; X86-AVX512-NEXT: retl
1687
+ ;
1688
+ ; X64-AVX1-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1689
+ ; X64-AVX1: # %bb.0:
1690
+ ; X64-AVX1-NEXT: vbroadcastsd (%rdi), %ymm1
1691
+ ; X64-AVX1-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]
1692
+ ; X64-AVX1-NEXT: retq
1693
+ ;
1694
+ ; X64-AVX2-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1695
+ ; X64-AVX2: # %bb.0:
1696
+ ; X64-AVX2-NEXT: vbroadcastsd (%rdi), %ymm1
1697
+ ; X64-AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6,7]
1698
+ ; X64-AVX2-NEXT: retq
1699
+ ;
1700
+ ; X64-AVX512-LABEL: broadcast_v8f32_v2f32_u1uu0uEu:
1701
+ ; X64-AVX512: # %bb.0:
1702
+ ; X64-AVX512-NEXT: vbroadcastsd (%rdi), %ymm1
1703
+ ; X64-AVX512-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6,7]
1704
+ ; X64-AVX512-NEXT: retq
1678
1705
%vec = load <2 x float >, ptr %vp
1679
1706
%shuf = shufflevector <2 x float > %vec , <2 x float > undef , <8 x i32 > <i32 undef , i32 1 , i32 undef , i32 undef , i32 0 , i32 2 , i32 3 , i32 undef >
1680
1707
%res = select <8 x i1 > <i1 1 , i1 1 , i1 1 , i1 1 , i1 1 , i1 1 , i1 0 , i1 1 >, <8 x float > %shuf , <8 x float > %default
0 commit comments