Skip to content

Commit ef9d39d

Browse files
committed
[InstCombine] add tests for shuffle with fneg operand(s); NFC
issue #45631
1 parent 042bd21 commit ef9d39d

File tree

1 file changed

+108
-2
lines changed

1 file changed

+108
-2
lines changed

llvm/test/Transforms/InstCombine/vec_shuffle.ll

Lines changed: 108 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ define <4 x i32> @shuffle_17and(<4 x i32> %v1, <4 x i32> %v2) {
403403
}
404404

405405
declare void @use(<2 x float>)
406+
declare void @use4(<4 x float>)
406407

407408
; One extra use is ok to transform.
408409

@@ -749,8 +750,8 @@ define <8 x i8> @pr19730(<16 x i8> %in0) {
749750

750751
define i32 @pr19737(<4 x i32> %in0) {
751752
; CHECK-LABEL: @pr19737(
752-
; CHECK-NEXT: [[RV:%.*]] = extractelement <4 x i32> [[IN0:%.*]], i64 0
753-
; CHECK-NEXT: ret i32 [[RV]]
753+
; CHECK-NEXT: [[TMP1:%.*]] = extractelement <4 x i32> [[IN0:%.*]], i64 0
754+
; CHECK-NEXT: ret i32 [[TMP1]]
754755
;
755756
%shuffle.i = shufflevector <4 x i32> zeroinitializer, <4 x i32> %in0, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
756757
%neg.i = xor <4 x i32> %shuffle.i, <i32 -1, i32 -1, i32 -1, i32 -1>
@@ -1788,3 +1789,108 @@ define <4 x i32> @PR46872(<4 x i32> %x) {
17881789
ret <4 x i32> %a
17891790
}
17901791

1792+
define <2 x float> @fneg_unary_shuf(<2 x float> %x) {
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>
1796+
; CHECK-NEXT: ret <2 x float> [[R]]
1797+
;
1798+
%nx = fneg nsz nnan <2 x float> %x
1799+
%r = shufflevector <2 x float> %nx, <2 x float> poison, <2 x i32> <i32 1, i32 0>
1800+
ret <2 x float> %r
1801+
}
1802+
1803+
define <4 x half> @fneg_unary_shuf_widen(<2 x half> %x) {
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>
1807+
; CHECK-NEXT: ret <4 x half> [[R]]
1808+
;
1809+
%nx = fneg ninf <2 x half> %x
1810+
%r = shufflevector <2 x half> %nx, <2 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 poison>
1811+
ret <4 x half> %r
1812+
}
1813+
1814+
define <2 x double> @fneg_unary_shuf_narrow(<4 x double> %x) {
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>
1818+
; CHECK-NEXT: ret <2 x double> [[R]]
1819+
;
1820+
%nx = fneg nsz <4 x double> %x
1821+
%r = shufflevector <4 x double> %nx, <4 x double> poison, <2 x i32> <i32 3, i32 0>
1822+
ret <2 x double> %r
1823+
}
1824+
1825+
define <2 x float> @fneg_unary_shuf_use(<2 x float> %x) {
1826+
; CHECK-LABEL: @fneg_unary_shuf_use(
1827+
; CHECK-NEXT: [[NX:%.*]] = fneg nsz <2 x float> [[X:%.*]]
1828+
; CHECK-NEXT: call void @use(<2 x float> [[NX]])
1829+
; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x float> [[NX]], <2 x float> poison, <2 x i32> <i32 undef, i32 0>
1830+
; CHECK-NEXT: ret <2 x float> [[R]]
1831+
;
1832+
%nx = fneg nsz <2 x float> %x
1833+
call void @use(<2 x float> %nx)
1834+
%r = shufflevector <2 x float> %nx, <2 x float> poison, <2 x i32> <i32 3, i32 0>
1835+
ret <2 x float> %r
1836+
}
1837+
1838+
define <4 x float> @fneg_shuf(<4 x float> %x, <4 x float> %y) {
1839+
; 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>
1843+
; CHECK-NEXT: ret <4 x float> [[R]]
1844+
;
1845+
%nx = fneg nsz ninf <4 x float> %x
1846+
%ny = fneg nnan ninf <4 x float> %y
1847+
%r = shufflevector <4 x float> %nx, <4 x float> %ny, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1848+
ret <4 x float> %r
1849+
}
1850+
1851+
define <4 x float> @fneg_shuf_widen_use1(<2 x float> %x, <2 x float> %y) {
1852+
; CHECK-LABEL: @fneg_shuf_widen_use1(
1853+
; CHECK-NEXT: [[NX:%.*]] = fneg nnan <2 x float> [[X:%.*]]
1854+
; 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>
1857+
; CHECK-NEXT: ret <4 x float> [[R]]
1858+
;
1859+
%nx = fneg nnan <2 x float> %x
1860+
call void @use(<2 x float> %nx)
1861+
%ny = fneg nnan <2 x float> %y
1862+
%r = shufflevector <2 x float> %nx, <2 x float> %ny, <4 x i32> <i32 poison, i32 1, i32 2, i32 3>
1863+
ret <4 x float> %r
1864+
}
1865+
1866+
define <2 x float> @fneg_shuf_narrow_use2(<4 x float> %x, <4 x float> %y) {
1867+
; CHECK-LABEL: @fneg_shuf_narrow_use2(
1868+
; CHECK-NEXT: [[NX:%.*]] = fneg nnan nsz <4 x float> [[X:%.*]]
1869+
; CHECK-NEXT: [[NY:%.*]] = fneg nnan nsz <4 x float> [[Y:%.*]]
1870+
; 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>
1872+
; CHECK-NEXT: ret <2 x float> [[R]]
1873+
;
1874+
%nx = fneg nsz nnan <4 x float> %x
1875+
%ny = fneg nsz nnan <4 x float> %y
1876+
call void @use4(<4 x float> %ny)
1877+
%r = shufflevector <4 x float> %nx, <4 x float> %ny, <2 x i32> <i32 3, i32 5>
1878+
ret <2 x float> %r
1879+
}
1880+
1881+
define <2 x float> @fneg_shuf_use3(<2 x float> %x, <2 x float> %y) {
1882+
; CHECK-LABEL: @fneg_shuf_use3(
1883+
; CHECK-NEXT: [[NX:%.*]] = fneg nnan <2 x float> [[X:%.*]]
1884+
; CHECK-NEXT: call void @use(<2 x float> [[NX]])
1885+
; CHECK-NEXT: [[NY:%.*]] = fneg nnan <2 x float> [[Y:%.*]]
1886+
; CHECK-NEXT: call void @use(<2 x float> [[NY]])
1887+
; CHECK-NEXT: [[R:%.*]] = shufflevector <2 x float> [[NX]], <2 x float> [[NY]], <2 x i32> <i32 1, i32 2>
1888+
; CHECK-NEXT: ret <2 x float> [[R]]
1889+
;
1890+
%nx = fneg nnan <2 x float> %x
1891+
call void @use(<2 x float> %nx)
1892+
%ny = fneg nnan <2 x float> %y
1893+
call void @use(<2 x float> %ny)
1894+
%r = shufflevector <2 x float> %nx, <2 x float> %ny, <2 x i32> <i32 1, i32 2>
1895+
ret <2 x float> %r
1896+
}

0 commit comments

Comments
 (0)