@@ -1823,3 +1823,70 @@ define <4 x i64> @shift32_v4i64(<4 x i64> %a) nounwind {
1823
1823
%shift = shl <4 x i64 > %a , <i64 32 , i64 32 , i64 32 , i64 32 >
1824
1824
ret <4 x i64 > %shift
1825
1825
}
1826
+
1827
+ define <4 x i64 > @shift32_v4i64_concat (<2 x i64 > %lo , <2 x i64 > %hi ) nounwind {
1828
+ ; AVX1-LABEL: shift32_v4i64_concat:
1829
+ ; AVX1: # %bb.0:
1830
+ ; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1831
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1832
+ ; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
1833
+ ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]
1834
+ ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
1835
+ ; AVX1-NEXT: retq
1836
+ ;
1837
+ ; AVX2-LABEL: shift32_v4i64_concat:
1838
+ ; AVX2: # %bb.0:
1839
+ ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1840
+ ; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
1841
+ ; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0
1842
+ ; AVX2-NEXT: retq
1843
+ ;
1844
+ ; XOPAVX1-LABEL: shift32_v4i64_concat:
1845
+ ; XOPAVX1: # %bb.0:
1846
+ ; XOPAVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1847
+ ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1848
+ ; XOPAVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
1849
+ ; XOPAVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]
1850
+ ; XOPAVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
1851
+ ; XOPAVX1-NEXT: retq
1852
+ ;
1853
+ ; XOPAVX2-LABEL: shift32_v4i64_concat:
1854
+ ; XOPAVX2: # %bb.0:
1855
+ ; XOPAVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1856
+ ; XOPAVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
1857
+ ; XOPAVX2-NEXT: vpsllq $32, %ymm0, %ymm0
1858
+ ; XOPAVX2-NEXT: retq
1859
+ ;
1860
+ ; AVX512-LABEL: shift32_v4i64_concat:
1861
+ ; AVX512: # %bb.0:
1862
+ ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1863
+ ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
1864
+ ; AVX512-NEXT: vpsllq $32, %ymm0, %ymm0
1865
+ ; AVX512-NEXT: retq
1866
+ ;
1867
+ ; AVX512VL-LABEL: shift32_v4i64_concat:
1868
+ ; AVX512VL: # %bb.0:
1869
+ ; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1870
+ ; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
1871
+ ; AVX512VL-NEXT: vpsllq $32, %ymm0, %ymm0
1872
+ ; AVX512VL-NEXT: retq
1873
+ ;
1874
+ ; X86-AVX1-LABEL: shift32_v4i64_concat:
1875
+ ; X86-AVX1: # %bb.0:
1876
+ ; X86-AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1877
+ ; X86-AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1878
+ ; X86-AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
1879
+ ; X86-AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[0,2],ymm1[4,6],ymm0[4,6]
1880
+ ; X86-AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]
1881
+ ; X86-AVX1-NEXT: retl
1882
+ ;
1883
+ ; X86-AVX2-LABEL: shift32_v4i64_concat:
1884
+ ; X86-AVX2: # %bb.0:
1885
+ ; X86-AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1886
+ ; X86-AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
1887
+ ; X86-AVX2-NEXT: vpsllq $32, %ymm0, %ymm0
1888
+ ; X86-AVX2-NEXT: retl
1889
+ %a = shufflevector <2 x i64 > %lo , <2 x i64 > %hi , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
1890
+ %shift = shl <4 x i64 > %a , <i64 32 , i64 32 , i64 32 , i64 32 >
1891
+ ret <4 x i64 > %shift
1892
+ }
0 commit comments