@@ -1278,8 +1278,8 @@ define <2 x float> @fsub_splat_constant1(<2 x float> %x) {
1278
1278
1279
1279
define <2 x float > @fneg (<2 x float > %x ) {
1280
1280
; CHECK-LABEL: @fneg(
1281
- ; CHECK-NEXT: [[TMP1:%.*]] = fneg <2 x float> [[X:%.*]]
1282
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x float> [[TMP1]], <2 x float> poison, <2 x i32> zeroinitializer
1281
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> zeroinitializer
1282
+ ; CHECK-NEXT: [[R:%.*]] = fneg <2 x float> [[TMP1]]
1283
1283
; CHECK-NEXT: ret <2 x float> [[R]]
1284
1284
;
1285
1285
%splat = shufflevector <2 x float > %x , <2 x float > undef , <2 x i32 > zeroinitializer
@@ -1791,8 +1791,8 @@ define <4 x i32> @PR46872(<4 x i32> %x) {
1791
1791
1792
1792
define <2 x float > @fneg_unary_shuf (<2 x float > %x ) {
1793
1793
; CHECK-LABEL: @fneg_unary_shuf(
1794
- ; CHECK-NEXT: [[NX :%.*]] = fneg nnan nsz <2 x float> [[X:%.*]]
1795
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x float> [[NX]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
1794
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> <i32 1, i32 0>
1795
+ ; CHECK-NEXT: [[R:%.*]] = fneg nnan nsz <2 x float> [[TMP1]]
1796
1796
; CHECK-NEXT: ret <2 x float> [[R]]
1797
1797
;
1798
1798
%nx = fneg nsz nnan <2 x float > %x
@@ -1802,8 +1802,8 @@ define <2 x float> @fneg_unary_shuf(<2 x float> %x) {
1802
1802
1803
1803
define <4 x half > @fneg_unary_shuf_widen (<2 x half > %x ) {
1804
1804
; CHECK-LABEL: @fneg_unary_shuf_widen(
1805
- ; CHECK-NEXT: [[NX :%.*]] = fneg ninf <2 x half> [[X:%.*]]
1806
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x half> [[NX]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 undef>
1805
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <2 x half> [[X:%.*]], <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 undef>
1806
+ ; CHECK-NEXT: [[R:%.*]] = fneg ninf <4 x half> [[TMP1]]
1807
1807
; CHECK-NEXT: ret <4 x half> [[R]]
1808
1808
;
1809
1809
%nx = fneg ninf <2 x half > %x
@@ -1813,15 +1813,17 @@ define <4 x half> @fneg_unary_shuf_widen(<2 x half> %x) {
1813
1813
1814
1814
define <2 x double > @fneg_unary_shuf_narrow (<4 x double > %x ) {
1815
1815
; CHECK-LABEL: @fneg_unary_shuf_narrow(
1816
- ; CHECK-NEXT: [[NX :%.*]] = fneg nsz <4 x double> [[X:%.*]]
1817
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x double> [[NX]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
1816
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x double> [[X:%.*]], <4 x double> poison, <2 x i32> <i32 3, i32 0>
1817
+ ; CHECK-NEXT: [[R:%.*]] = fneg nsz <2 x double> [[TMP1]]
1818
1818
; CHECK-NEXT: ret <2 x double> [[R]]
1819
1819
;
1820
1820
%nx = fneg nsz <4 x double > %x
1821
1821
%r = shufflevector <4 x double > %nx , <4 x double > poison, <2 x i32 > <i32 3 , i32 0 >
1822
1822
ret <2 x double > %r
1823
1823
}
1824
1824
1825
+ ; negative test - extra use prevents canonicalization
1826
+
1825
1827
define <2 x float > @fneg_unary_shuf_use (<2 x float > %x ) {
1826
1828
; CHECK-LABEL: @fneg_unary_shuf_use(
1827
1829
; CHECK-NEXT: [[NX:%.*]] = fneg nsz <2 x float> [[X:%.*]]
@@ -1835,11 +1837,12 @@ define <2 x float> @fneg_unary_shuf_use(<2 x float> %x) {
1835
1837
ret <2 x float > %r
1836
1838
}
1837
1839
1840
+ ; intersect FMF
1841
+
1838
1842
define <4 x float > @fneg_shuf (<4 x float > %x , <4 x float > %y ) {
1839
1843
; CHECK-LABEL: @fneg_shuf(
1840
- ; CHECK-NEXT: [[NX:%.*]] = fneg ninf nsz <4 x float> [[X:%.*]]
1841
- ; CHECK-NEXT: [[NY:%.*]] = fneg nnan ninf <4 x float> [[Y:%.*]]
1842
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x float> [[NX]], <4 x float> [[NY]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1844
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x float> [[X:%.*]], <4 x float> [[Y:%.*]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1845
+ ; CHECK-NEXT: [[R:%.*]] = fneg ninf <4 x float> [[TMP1]]
1843
1846
; CHECK-NEXT: ret <4 x float> [[R]]
1844
1847
;
1845
1848
%nx = fneg nsz ninf <4 x float > %x
@@ -1848,12 +1851,14 @@ define <4 x float> @fneg_shuf(<4 x float> %x, <4 x float> %y) {
1848
1851
ret <4 x float > %r
1849
1852
}
1850
1853
1854
+ ; length-changing shuffle and extra use are ok
1855
+
1851
1856
define <4 x float > @fneg_shuf_widen_use1 (<2 x float > %x , <2 x float > %y ) {
1852
1857
; CHECK-LABEL: @fneg_shuf_widen_use1(
1853
1858
; CHECK-NEXT: [[NX:%.*]] = fneg nnan <2 x float> [[X:%.*]]
1854
1859
; CHECK-NEXT: call void @use(<2 x float> [[NX]])
1855
- ; CHECK-NEXT: [[NY :%.*]] = fneg nnan <2 x float> [[Y:%.*]]
1856
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x float> [[NX]], <2 x float> [[NY]], <4 x i32> <i32 undef, i32 1, i32 2, i32 3>
1860
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <2 x float> [[X]], <2 x float> [[Y:%.*]], <4 x i32> <i32 undef, i32 1, i32 2, i32 3>
1861
+ ; CHECK-NEXT: [[R:%.*]] = fneg nnan <4 x float> [[TMP1]]
1857
1862
; CHECK-NEXT: ret <4 x float> [[R]]
1858
1863
;
1859
1864
%nx = fneg nnan <2 x float > %x
@@ -1863,12 +1868,14 @@ define <4 x float> @fneg_shuf_widen_use1(<2 x float> %x, <2 x float> %y) {
1863
1868
ret <4 x float > %r
1864
1869
}
1865
1870
1871
+ ; length-changing shuffle and extra use still ok
1872
+
1866
1873
define <2 x float > @fneg_shuf_narrow_use2 (<4 x float > %x , <4 x float > %y ) {
1867
1874
; CHECK-LABEL: @fneg_shuf_narrow_use2(
1868
- ; CHECK-NEXT: [[NX:%.*]] = fneg nnan nsz <4 x float> [[X:%.*]]
1869
1875
; CHECK-NEXT: [[NY:%.*]] = fneg nnan nsz <4 x float> [[Y:%.*]]
1870
1876
; CHECK-NEXT: call void @use4(<4 x float> [[NY]])
1871
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x float> [[NX]], <4 x float> [[NY]], <2 x i32> <i32 3, i32 5>
1877
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x float> [[X:%.*]], <4 x float> [[Y]], <2 x i32> <i32 3, i32 5>
1878
+ ; CHECK-NEXT: [[R:%.*]] = fneg nnan nsz <2 x float> [[TMP1]]
1872
1879
; CHECK-NEXT: ret <2 x float> [[R]]
1873
1880
;
1874
1881
%nx = fneg nsz nnan <4 x float > %x
@@ -1878,6 +1885,8 @@ define <2 x float> @fneg_shuf_narrow_use2(<4 x float> %x, <4 x float> %y) {
1878
1885
ret <2 x float > %r
1879
1886
}
1880
1887
1888
+ ; negative test - too many extra uses
1889
+
1881
1890
define <2 x float > @fneg_shuf_use3 (<2 x float > %x , <2 x float > %y ) {
1882
1891
; CHECK-LABEL: @fneg_shuf_use3(
1883
1892
; CHECK-NEXT: [[NX:%.*]] = fneg nnan <2 x float> [[X:%.*]]
0 commit comments