Skip to content

Commit 942c4cd

Browse files
committed
[InstCombine] precommit tests for D140666
Differential Revision: https://reviews.llvm.org/D142090
1 parent 8235253 commit 942c4cd

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-logical.ll

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,3 +1743,151 @@ define i1 @masked_icmps_mask_notallzeros_bmask_mixed_negated_swapped_7b_logical(
17431743
%t5 = select i1 %t4, i1 true, i1 %t2
17441744
ret i1 %t5
17451745
}
1746+
1747+
1748+
define i1 @masked_icmps_bmask_notmixed_or(i32 %A) {
1749+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_or(
1750+
; CHECK-NEXT: [[MASK1:%.*]] = and i32 [[A:%.*]], 15
1751+
; CHECK-NEXT: [[TST1:%.*]] = icmp eq i32 [[MASK1]], 3
1752+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A]], 255
1753+
; CHECK-NEXT: [[TST2:%.*]] = icmp eq i32 [[MASK2]], 243
1754+
; CHECK-NEXT: [[RES:%.*]] = or i1 [[TST1]], [[TST2]]
1755+
; CHECK-NEXT: ret i1 [[RES]]
1756+
;
1757+
%mask1 = and i32 %A, 15 ; 0x0f
1758+
%tst1 = icmp eq i32 %mask1, 3 ; 0x03
1759+
%mask2 = and i32 %A, 255 ; 0xff
1760+
%tst2 = icmp eq i32 %mask2, 243; 0xf3
1761+
%res = or i1 %tst1, %tst2
1762+
ret i1 %res
1763+
}
1764+
1765+
define <2 x i1> @masked_icmps_bmask_notmixed_or_vec(<2 x i8> %A) {
1766+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_or_vec(
1767+
; CHECK-NEXT: [[MASK1:%.*]] = and <2 x i8> [[A:%.*]], <i8 15, i8 15>
1768+
; CHECK-NEXT: [[TST1:%.*]] = icmp eq <2 x i8> [[MASK1]], <i8 3, i8 3>
1769+
; CHECK-NEXT: [[TST2:%.*]] = icmp eq <2 x i8> [[A]], <i8 -13, i8 -13>
1770+
; CHECK-NEXT: [[RES:%.*]] = or <2 x i1> [[TST1]], [[TST2]]
1771+
; CHECK-NEXT: ret <2 x i1> [[RES]]
1772+
;
1773+
%mask1 = and <2 x i8> %A, <i8 15, i8 15> ; 0x0f
1774+
%tst1 = icmp eq <2 x i8> %mask1, <i8 3, i8 3> ; 0x03
1775+
%mask2 = and <2 x i8> %A, <i8 255, i8 255> ; 0xff
1776+
%tst2 = icmp eq <2 x i8> %mask2, <i8 243, i8 243> ; 0xf3
1777+
%res = or <2 x i1> %tst1, %tst2
1778+
ret <2 x i1> %res
1779+
}
1780+
1781+
define <2 x i1> @masked_icmps_bmask_notmixed_or_vec_poison1(<2 x i8> %A) {
1782+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_or_vec_poison1(
1783+
; CHECK-NEXT: [[MASK1:%.*]] = and <2 x i8> [[A:%.*]], <i8 15, i8 15>
1784+
; CHECK-NEXT: [[TST1:%.*]] = icmp eq <2 x i8> [[MASK1]], <i8 3, i8 poison>
1785+
; CHECK-NEXT: [[TST2:%.*]] = icmp eq <2 x i8> [[A]], <i8 -13, i8 -13>
1786+
; CHECK-NEXT: [[RES:%.*]] = or <2 x i1> [[TST1]], [[TST2]]
1787+
; CHECK-NEXT: ret <2 x i1> [[RES]]
1788+
;
1789+
%mask1 = and <2 x i8> %A, <i8 15, i8 15> ; 0x0f
1790+
%tst1 = icmp eq <2 x i8> %mask1, <i8 3, i8 poison> ; 0x03
1791+
%mask2 = and <2 x i8> %A, <i8 255, i8 255> ; 0xff
1792+
%tst2 = icmp eq <2 x i8> %mask2, <i8 243, i8 243> ; 0xf3
1793+
%res = or <2 x i1> %tst1, %tst2
1794+
ret <2 x i1> %res
1795+
}
1796+
1797+
define <2 x i1> @masked_icmps_bmask_notmixed_or_vec_poison2(<2 x i8> %A) {
1798+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_or_vec_poison2(
1799+
; CHECK-NEXT: [[MASK1:%.*]] = and <2 x i8> [[A:%.*]], <i8 15, i8 15>
1800+
; CHECK-NEXT: [[TST1:%.*]] = icmp eq <2 x i8> [[MASK1]], <i8 3, i8 3>
1801+
; CHECK-NEXT: [[TST2:%.*]] = icmp eq <2 x i8> [[A]], <i8 -13, i8 poison>
1802+
; CHECK-NEXT: [[RES:%.*]] = or <2 x i1> [[TST1]], [[TST2]]
1803+
; CHECK-NEXT: ret <2 x i1> [[RES]]
1804+
;
1805+
%mask1 = and <2 x i8> %A, <i8 15, i8 15> ; 0x0f
1806+
%tst1 = icmp eq <2 x i8> %mask1, <i8 3, i8 3> ; 0x03
1807+
%mask2 = and <2 x i8> %A, <i8 255, i8 255> ; 0xff
1808+
%tst2 = icmp eq <2 x i8> %mask2, <i8 243, i8 poison> ; 0xf3
1809+
%res = or <2 x i1> %tst1, %tst2
1810+
ret <2 x i1> %res
1811+
}
1812+
1813+
define i1 @masked_icmps_bmask_notmixed_or_contradict_notoptimized(i32 %A) {
1814+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_or_contradict_notoptimized(
1815+
; CHECK-NEXT: [[MASK1:%.*]] = and i32 [[A:%.*]], 15
1816+
; CHECK-NEXT: [[TST1:%.*]] = icmp eq i32 [[MASK1]], 3
1817+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A]], 255
1818+
; CHECK-NEXT: [[TST2:%.*]] = icmp eq i32 [[MASK2]], 242
1819+
; CHECK-NEXT: [[RES:%.*]] = or i1 [[TST1]], [[TST2]]
1820+
; CHECK-NEXT: ret i1 [[RES]]
1821+
;
1822+
%mask1 = and i32 %A, 15 ; 0x0f
1823+
%tst1 = icmp eq i32 %mask1, 3 ; 0x03
1824+
%mask2 = and i32 %A, 255 ; 0xff
1825+
%tst2 = icmp eq i32 %mask2, 242; 0xf2
1826+
%res = or i1 %tst1, %tst2
1827+
ret i1 %res
1828+
}
1829+
1830+
define i1 @masked_icmps_bmask_notmixed_and(i32 %A) {
1831+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_and(
1832+
; CHECK-NEXT: [[MASK1:%.*]] = and i32 [[A:%.*]], 15
1833+
; CHECK-NEXT: [[TST1:%.*]] = icmp ne i32 [[MASK1]], 3
1834+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A]], 255
1835+
; CHECK-NEXT: [[TST2:%.*]] = icmp ne i32 [[MASK2]], 243
1836+
; CHECK-NEXT: [[RES:%.*]] = and i1 [[TST1]], [[TST2]]
1837+
; CHECK-NEXT: ret i1 [[RES]]
1838+
;
1839+
%mask1 = and i32 %A, 15 ; 0x0f
1840+
%tst1 = icmp ne i32 %mask1, 3 ; 0x03
1841+
%mask2 = and i32 %A, 255 ; 0xff
1842+
%tst2 = icmp ne i32 %mask2, 243 ; 0xf3
1843+
%res = and i1 %tst1, %tst2
1844+
ret i1 %res
1845+
}
1846+
1847+
define i1 @masked_icmps_bmask_notmixed_and_contradict_notoptimized(i32 %A) {
1848+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_and_contradict_notoptimized(
1849+
; CHECK-NEXT: [[MASK1:%.*]] = and i32 [[A:%.*]], 15
1850+
; CHECK-NEXT: [[TST1:%.*]] = icmp ne i32 [[MASK1]], 3
1851+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A]], 255
1852+
; CHECK-NEXT: [[TST2:%.*]] = icmp ne i32 [[MASK2]], 242
1853+
; CHECK-NEXT: [[RES:%.*]] = and i1 [[TST1]], [[TST2]]
1854+
; CHECK-NEXT: ret i1 [[RES]]
1855+
;
1856+
%mask1 = and i32 %A, 15 ; 0x0f
1857+
%tst1 = icmp ne i32 %mask1, 3 ; 0x03
1858+
%mask2 = and i32 %A, 255 ; 0xff
1859+
%tst2 = icmp ne i32 %mask2, 242 ; 0xf2
1860+
%res = and i1 %tst1, %tst2
1861+
ret i1 %res
1862+
}
1863+
1864+
define i1 @masked_icmps_bmask_notmixed_and_expected_false(i32 %A) {
1865+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_and_expected_false(
1866+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A:%.*]], 255
1867+
; CHECK-NEXT: [[TST2:%.*]] = icmp ne i32 [[MASK2]], 242
1868+
; CHECK-NEXT: ret i1 [[TST2]]
1869+
;
1870+
%mask1 = and i32 %A, 3 ; 0x0f
1871+
%tst1 = icmp ne i32 %mask1, 15 ; 0x03
1872+
%mask2 = and i32 %A, 255 ; 0xff
1873+
%tst2 = icmp ne i32 %mask2, 242 ; 0xf2
1874+
%res = and i1 %tst1, %tst2
1875+
ret i1 %res
1876+
}
1877+
1878+
define i1 @masked_icmps_bmask_notmixed_not_subset_notoptimized(i32 %A) {
1879+
; CHECK-LABEL: @masked_icmps_bmask_notmixed_not_subset_notoptimized(
1880+
; CHECK-NEXT: [[MASK1:%.*]] = and i32 [[A:%.*]], 254
1881+
; CHECK-NEXT: [[TST1:%.*]] = icmp ne i32 [[MASK1]], 252
1882+
; CHECK-NEXT: [[MASK2:%.*]] = and i32 [[A]], 253
1883+
; CHECK-NEXT: [[TST2:%.*]] = icmp ne i32 [[MASK2]], 252
1884+
; CHECK-NEXT: [[RES:%.*]] = and i1 [[TST1]], [[TST2]]
1885+
; CHECK-NEXT: ret i1 [[RES]]
1886+
;
1887+
%mask1 = and i32 %A, 254 ; 0xfe
1888+
%tst1 = icmp ne i32 %mask1, 252 ; 0xfc
1889+
%mask2 = and i32 %A, 253 ; 0xfd
1890+
%tst2 = icmp ne i32 %mask2, 252 ; 0xfc
1891+
%res = and i1 %tst1, %tst2
1892+
ret i1 %res
1893+
}

0 commit comments

Comments
 (0)