@@ -1629,22 +1629,8 @@ define <4 x float> @pr64460_1(<4 x bfloat> %a) {
1629
1629
;
1630
1630
; SSE2-LABEL: pr64460_1:
1631
1631
; SSE2: # %bb.0:
1632
- ; SSE2-NEXT: pextrw $1, %xmm0, %eax
1633
- ; SSE2-NEXT: shll $16, %eax
1634
- ; SSE2-NEXT: movd %eax, %xmm2
1635
- ; SSE2-NEXT: movd %xmm0, %eax
1636
- ; SSE2-NEXT: shll $16, %eax
1637
- ; SSE2-NEXT: movd %eax, %xmm1
1638
- ; SSE2-NEXT: pextrw $3, %xmm0, %eax
1639
- ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1640
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1641
- ; SSE2-NEXT: shll $16, %eax
1642
- ; SSE2-NEXT: movd %eax, %xmm2
1643
- ; SSE2-NEXT: movd %xmm0, %eax
1644
- ; SSE2-NEXT: shll $16, %eax
1645
- ; SSE2-NEXT: movd %eax, %xmm0
1646
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1647
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1632
+ ; SSE2-NEXT: pxor %xmm1, %xmm1
1633
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1648
1634
; SSE2-NEXT: movdqa %xmm1, %xmm0
1649
1635
; SSE2-NEXT: retq
1650
1636
;
@@ -1666,41 +1652,11 @@ define <8 x float> @pr64460_2(<8 x bfloat> %a) {
1666
1652
;
1667
1653
; SSE2-LABEL: pr64460_2:
1668
1654
; SSE2: # %bb.0:
1669
- ; SSE2-NEXT: movq %xmm0, %rdx
1670
- ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1671
- ; SSE2-NEXT: movq %xmm0, %rcx
1672
- ; SSE2-NEXT: movq %rcx, %rax
1673
- ; SSE2-NEXT: shrq $32, %rax
1674
- ; SSE2-NEXT: movq %rdx, %rsi
1675
- ; SSE2-NEXT: shrq $32, %rsi
1676
- ; SSE2-NEXT: movl %edx, %edi
1677
- ; SSE2-NEXT: andl $-65536, %edi # imm = 0xFFFF0000
1678
- ; SSE2-NEXT: movd %edi, %xmm1
1679
- ; SSE2-NEXT: movl %edx, %edi
1680
- ; SSE2-NEXT: shll $16, %edi
1681
- ; SSE2-NEXT: movd %edi, %xmm0
1682
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1683
- ; SSE2-NEXT: shrq $48, %rdx
1684
- ; SSE2-NEXT: shll $16, %edx
1685
- ; SSE2-NEXT: movd %edx, %xmm1
1686
- ; SSE2-NEXT: shll $16, %esi
1687
- ; SSE2-NEXT: movd %esi, %xmm2
1688
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1689
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1690
- ; SSE2-NEXT: movl %ecx, %edx
1691
- ; SSE2-NEXT: andl $-65536, %edx # imm = 0xFFFF0000
1692
- ; SSE2-NEXT: movd %edx, %xmm2
1693
- ; SSE2-NEXT: movl %ecx, %edx
1694
- ; SSE2-NEXT: shll $16, %edx
1695
- ; SSE2-NEXT: movd %edx, %xmm1
1696
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1697
- ; SSE2-NEXT: shrq $48, %rcx
1698
- ; SSE2-NEXT: shll $16, %ecx
1699
- ; SSE2-NEXT: movd %ecx, %xmm2
1700
- ; SSE2-NEXT: shll $16, %eax
1701
- ; SSE2-NEXT: movd %eax, %xmm3
1702
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
1703
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
1655
+ ; SSE2-NEXT: pxor %xmm1, %xmm1
1656
+ ; SSE2-NEXT: pxor %xmm2, %xmm2
1657
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
1658
+ ; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1659
+ ; SSE2-NEXT: movdqa %xmm2, %xmm0
1704
1660
; SSE2-NEXT: retq
1705
1661
;
1706
1662
; AVX-LABEL: pr64460_2:
@@ -1721,76 +1677,16 @@ define <16 x float> @pr64460_3(<16 x bfloat> %a) {
1721
1677
;
1722
1678
; SSE2-LABEL: pr64460_3:
1723
1679
; SSE2: # %bb.0:
1724
- ; SSE2-NEXT: movq %xmm1, %rdi
1725
- ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm1 = xmm1[1,1]
1726
- ; SSE2-NEXT: movq %xmm1, %rcx
1727
- ; SSE2-NEXT: movq %rcx, %rax
1728
- ; SSE2-NEXT: shrq $32, %rax
1729
- ; SSE2-NEXT: movq %xmm0, %r9
1730
- ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1731
- ; SSE2-NEXT: movq %xmm0, %rsi
1732
- ; SSE2-NEXT: movq %rsi, %rdx
1733
- ; SSE2-NEXT: shrq $32, %rdx
1734
- ; SSE2-NEXT: movq %rdi, %r8
1735
- ; SSE2-NEXT: shrq $32, %r8
1736
- ; SSE2-NEXT: movq %r9, %r10
1737
- ; SSE2-NEXT: shrq $32, %r10
1738
- ; SSE2-NEXT: movl %r9d, %r11d
1739
- ; SSE2-NEXT: andl $-65536, %r11d # imm = 0xFFFF0000
1740
- ; SSE2-NEXT: movd %r11d, %xmm1
1741
- ; SSE2-NEXT: movl %r9d, %r11d
1742
- ; SSE2-NEXT: shll $16, %r11d
1743
- ; SSE2-NEXT: movd %r11d, %xmm0
1744
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1745
- ; SSE2-NEXT: shrq $48, %r9
1746
- ; SSE2-NEXT: shll $16, %r9d
1747
- ; SSE2-NEXT: movd %r9d, %xmm1
1748
- ; SSE2-NEXT: shll $16, %r10d
1749
- ; SSE2-NEXT: movd %r10d, %xmm2
1750
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1751
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1752
- ; SSE2-NEXT: movl %edi, %r9d
1753
- ; SSE2-NEXT: andl $-65536, %r9d # imm = 0xFFFF0000
1754
- ; SSE2-NEXT: movd %r9d, %xmm1
1755
- ; SSE2-NEXT: movl %edi, %r9d
1756
- ; SSE2-NEXT: shll $16, %r9d
1757
- ; SSE2-NEXT: movd %r9d, %xmm2
1758
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1759
- ; SSE2-NEXT: shrq $48, %rdi
1760
- ; SSE2-NEXT: shll $16, %edi
1761
- ; SSE2-NEXT: movd %edi, %xmm1
1762
- ; SSE2-NEXT: shll $16, %r8d
1763
- ; SSE2-NEXT: movd %r8d, %xmm3
1764
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1765
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1766
- ; SSE2-NEXT: movl %esi, %edi
1767
- ; SSE2-NEXT: andl $-65536, %edi # imm = 0xFFFF0000
1768
- ; SSE2-NEXT: movd %edi, %xmm3
1769
- ; SSE2-NEXT: movl %esi, %edi
1770
- ; SSE2-NEXT: shll $16, %edi
1771
- ; SSE2-NEXT: movd %edi, %xmm1
1772
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
1773
- ; SSE2-NEXT: shrq $48, %rsi
1774
- ; SSE2-NEXT: shll $16, %esi
1775
- ; SSE2-NEXT: movd %esi, %xmm3
1776
- ; SSE2-NEXT: shll $16, %edx
1777
- ; SSE2-NEXT: movd %edx, %xmm4
1778
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
1779
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
1780
- ; SSE2-NEXT: movl %ecx, %edx
1781
- ; SSE2-NEXT: andl $-65536, %edx # imm = 0xFFFF0000
1782
- ; SSE2-NEXT: movd %edx, %xmm4
1783
- ; SSE2-NEXT: movl %ecx, %edx
1784
- ; SSE2-NEXT: shll $16, %edx
1785
- ; SSE2-NEXT: movd %edx, %xmm3
1786
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
1787
- ; SSE2-NEXT: shrq $48, %rcx
1788
- ; SSE2-NEXT: shll $16, %ecx
1789
- ; SSE2-NEXT: movd %ecx, %xmm4
1790
- ; SSE2-NEXT: shll $16, %eax
1791
- ; SSE2-NEXT: movd %eax, %xmm5
1792
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1793
- ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
1680
+ ; SSE2-NEXT: pxor %xmm3, %xmm3
1681
+ ; SSE2-NEXT: pxor %xmm5, %xmm5
1682
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1],xmm5[2],xmm0[2],xmm5[3],xmm0[3]
1683
+ ; SSE2-NEXT: pxor %xmm4, %xmm4
1684
+ ; SSE2-NEXT: punpckhwd {{.*#+}} xmm4 = xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
1685
+ ; SSE2-NEXT: pxor %xmm2, %xmm2
1686
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
1687
+ ; SSE2-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
1688
+ ; SSE2-NEXT: movdqa %xmm5, %xmm0
1689
+ ; SSE2-NEXT: movdqa %xmm4, %xmm1
1794
1690
; SSE2-NEXT: retq
1795
1691
;
1796
1692
; F16-LABEL: pr64460_3:
@@ -1822,47 +1718,17 @@ define <8 x double> @pr64460_4(<8 x bfloat> %a) {
1822
1718
;
1823
1719
; SSE2-LABEL: pr64460_4:
1824
1720
; SSE2: # %bb.0:
1825
- ; SSE2-NEXT: movq %xmm0, %rsi
1826
- ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1827
- ; SSE2-NEXT: movq %xmm0, %rdx
1828
- ; SSE2-NEXT: movq %rdx, %rax
1829
- ; SSE2-NEXT: shrq $32, %rax
1830
- ; SSE2-NEXT: movq %rdx, %rcx
1831
- ; SSE2-NEXT: shrq $48, %rcx
1832
- ; SSE2-NEXT: movq %rsi, %rdi
1833
- ; SSE2-NEXT: shrq $32, %rdi
1834
- ; SSE2-NEXT: movq %rsi, %r8
1835
- ; SSE2-NEXT: shrq $48, %r8
1836
- ; SSE2-NEXT: movl %esi, %r9d
1837
- ; SSE2-NEXT: andl $-65536, %r9d # imm = 0xFFFF0000
1838
- ; SSE2-NEXT: movd %r9d, %xmm0
1839
- ; SSE2-NEXT: cvtss2sd %xmm0, %xmm1
1840
- ; SSE2-NEXT: shll $16, %esi
1841
- ; SSE2-NEXT: movd %esi, %xmm0
1842
- ; SSE2-NEXT: cvtss2sd %xmm0, %xmm0
1843
- ; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1844
- ; SSE2-NEXT: shll $16, %r8d
1845
- ; SSE2-NEXT: movd %r8d, %xmm1
1846
- ; SSE2-NEXT: cvtss2sd %xmm1, %xmm2
1847
- ; SSE2-NEXT: shll $16, %edi
1848
- ; SSE2-NEXT: movd %edi, %xmm1
1849
- ; SSE2-NEXT: cvtss2sd %xmm1, %xmm1
1850
- ; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1851
- ; SSE2-NEXT: movl %edx, %esi
1852
- ; SSE2-NEXT: andl $-65536, %esi # imm = 0xFFFF0000
1853
- ; SSE2-NEXT: movd %esi, %xmm2
1854
- ; SSE2-NEXT: cvtss2sd %xmm2, %xmm3
1855
- ; SSE2-NEXT: shll $16, %edx
1856
- ; SSE2-NEXT: movd %edx, %xmm2
1857
- ; SSE2-NEXT: cvtss2sd %xmm2, %xmm2
1858
- ; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1859
- ; SSE2-NEXT: shll $16, %ecx
1860
- ; SSE2-NEXT: movd %ecx, %xmm3
1861
- ; SSE2-NEXT: cvtss2sd %xmm3, %xmm4
1862
- ; SSE2-NEXT: shll $16, %eax
1863
- ; SSE2-NEXT: movd %eax, %xmm3
1864
- ; SSE2-NEXT: cvtss2sd %xmm3, %xmm3
1865
- ; SSE2-NEXT: movlhps {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1721
+ ; SSE2-NEXT: pxor %xmm3, %xmm3
1722
+ ; SSE2-NEXT: pxor %xmm1, %xmm1
1723
+ ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1724
+ ; SSE2-NEXT: cvtps2pd %xmm1, %xmm4
1725
+ ; SSE2-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1726
+ ; SSE2-NEXT: cvtps2pd %xmm3, %xmm2
1727
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1728
+ ; SSE2-NEXT: cvtps2pd %xmm0, %xmm1
1729
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[2,3,2,3]
1730
+ ; SSE2-NEXT: cvtps2pd %xmm0, %xmm3
1731
+ ; SSE2-NEXT: movaps %xmm4, %xmm0
1866
1732
; SSE2-NEXT: retq
1867
1733
;
1868
1734
; F16-LABEL: pr64460_4:
@@ -1874,45 +1740,11 @@ define <8 x double> @pr64460_4(<8 x bfloat> %a) {
1874
1740
;
1875
1741
; AVXNC-LABEL: pr64460_4:
1876
1742
; AVXNC: # %bb.0:
1877
- ; AVXNC-NEXT: vpextrw $3, %xmm0, %eax
1878
- ; AVXNC-NEXT: shll $16, %eax
1879
- ; AVXNC-NEXT: vmovd %eax, %xmm1
1880
- ; AVXNC-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1
1881
- ; AVXNC-NEXT: vpextrw $2, %xmm0, %eax
1882
- ; AVXNC-NEXT: shll $16, %eax
1883
- ; AVXNC-NEXT: vmovd %eax, %xmm2
1884
- ; AVXNC-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2
1885
- ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm1 = xmm2[0],xmm1[0]
1886
- ; AVXNC-NEXT: vpextrw $1, %xmm0, %eax
1887
- ; AVXNC-NEXT: shll $16, %eax
1888
- ; AVXNC-NEXT: vmovd %eax, %xmm2
1889
- ; AVXNC-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2
1890
- ; AVXNC-NEXT: vmovd %xmm0, %eax
1891
- ; AVXNC-NEXT: shll $16, %eax
1892
- ; AVXNC-NEXT: vmovd %eax, %xmm3
1893
- ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1894
- ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm2 = xmm3[0],xmm2[0]
1895
- ; AVXNC-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm2
1896
- ; AVXNC-NEXT: vpextrw $7, %xmm0, %eax
1897
- ; AVXNC-NEXT: shll $16, %eax
1898
- ; AVXNC-NEXT: vmovd %eax, %xmm1
1899
- ; AVXNC-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1
1900
- ; AVXNC-NEXT: vpextrw $6, %xmm0, %eax
1901
- ; AVXNC-NEXT: shll $16, %eax
1902
- ; AVXNC-NEXT: vmovd %eax, %xmm3
1903
- ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1904
- ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm1 = xmm3[0],xmm1[0]
1905
- ; AVXNC-NEXT: vpextrw $5, %xmm0, %eax
1906
- ; AVXNC-NEXT: shll $16, %eax
1907
- ; AVXNC-NEXT: vmovd %eax, %xmm3
1908
- ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1909
- ; AVXNC-NEXT: vpextrw $4, %xmm0, %eax
1910
- ; AVXNC-NEXT: shll $16, %eax
1911
- ; AVXNC-NEXT: vmovd %eax, %xmm0
1912
- ; AVXNC-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0
1913
- ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm3[0]
1914
- ; AVXNC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1
1915
- ; AVXNC-NEXT: vmovaps %ymm2, %ymm0
1743
+ ; AVXNC-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1744
+ ; AVXNC-NEXT: vpslld $16, %ymm0, %ymm1
1745
+ ; AVXNC-NEXT: vcvtps2pd %xmm1, %ymm0
1746
+ ; AVXNC-NEXT: vextracti128 $1, %ymm1, %xmm1
1747
+ ; AVXNC-NEXT: vcvtps2pd %xmm1, %ymm1
1916
1748
; AVXNC-NEXT: retq
1917
1749
%b = fpext <8 x bfloat> %a to <8 x double >
1918
1750
ret <8 x double > %b
0 commit comments