@@ -1698,5 +1698,281 @@ define i32 @test_none(float nofpclass(all) %x) {
1698
1698
ret i32 %and
1699
1699
}
1700
1700
1701
+ define i8 @test_icmp_add (i8 %n , i8 %n2 , i8 %other ) {
1702
+ ; CHECK-LABEL: @test_icmp_add(
1703
+ ; CHECK-NEXT: entry:
1704
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1705
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 32
1706
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1707
+ ; CHECK: if.then:
1708
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1709
+ ; CHECK-NEXT: ret i8 [[R]]
1710
+ ; CHECK: if.else:
1711
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1712
+ ;
1713
+ entry:
1714
+ %n_add = add nuw i8 %n , %n2
1715
+ %cmp = icmp ult i8 %n_add , 32
1716
+ br i1 %cmp , label %if.then , label %if.else
1717
+
1718
+ if.then:
1719
+ %r = and i8 %n , 32
1720
+ ret i8 %r
1721
+
1722
+ if.else:
1723
+ ret i8 %other
1724
+ }
1725
+
1726
+ define i8 @test_icmp_add_fail_nsw (i8 %n , i8 %n2 , i8 %other ) {
1727
+ ; CHECK-LABEL: @test_icmp_add_fail_nsw(
1728
+ ; CHECK-NEXT: entry:
1729
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nsw i8 [[N:%.*]], [[N2:%.*]]
1730
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 32
1731
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1732
+ ; CHECK: if.then:
1733
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1734
+ ; CHECK-NEXT: ret i8 [[R]]
1735
+ ; CHECK: if.else:
1736
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1737
+ ;
1738
+ entry:
1739
+ %n_add = add nsw i8 %n , %n2
1740
+ %cmp = icmp ult i8 %n_add , 32
1741
+ br i1 %cmp , label %if.then , label %if.else
1742
+
1743
+ if.then:
1744
+ %r = and i8 %n , 32
1745
+ ret i8 %r
1746
+
1747
+ if.else:
1748
+ ret i8 %other
1749
+ }
1750
+
1751
+ define i8 @test_icmp_add2 (i8 %n , i8 %n2 , i8 %other ) {
1752
+ ; CHECK-LABEL: @test_icmp_add2(
1753
+ ; CHECK-NEXT: entry:
1754
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw nsw i8 [[N:%.*]], [[N2:%.*]]
1755
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 14
1756
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1757
+ ; CHECK: if.then:
1758
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1759
+ ; CHECK: if.else:
1760
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1761
+ ; CHECK-NEXT: ret i8 [[R]]
1762
+ ;
1763
+ entry:
1764
+ %n_add = add nsw nuw i8 %n , %n2
1765
+ %cmp = icmp uge i8 %n_add , 15
1766
+ br i1 %cmp , label %if.then , label %if.else
1767
+
1768
+ if.then:
1769
+ ret i8 %other
1770
+ if.else:
1771
+ %r = and i8 %n , 32
1772
+ ret i8 %r
1773
+
1774
+ }
1775
+
1776
+ define i8 @test_icmp_add_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
1777
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_range(
1778
+ ; CHECK-NEXT: entry:
1779
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1780
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 33
1781
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1782
+ ; CHECK: if.then:
1783
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1784
+ ; CHECK-NEXT: ret i8 [[R]]
1785
+ ; CHECK: if.else:
1786
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1787
+ ;
1788
+ entry:
1789
+ %n_add = add nuw i8 %n , %n2
1790
+ %cmp = icmp ule i8 %n_add , 32
1791
+ br i1 %cmp , label %if.then , label %if.else
1792
+
1793
+ if.then:
1794
+ %r = and i8 %n , 32
1795
+ ret i8 %r
1796
+
1797
+ if.else:
1798
+ ret i8 %other
1799
+ }
1800
+
1801
+ define i8 @test_icmp_add_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
1802
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_pred(
1803
+ ; CHECK-NEXT: entry:
1804
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1805
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 32
1806
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1807
+ ; CHECK: if.then:
1808
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1809
+ ; CHECK-NEXT: ret i8 [[R]]
1810
+ ; CHECK: if.else:
1811
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1812
+ ;
1813
+ entry:
1814
+ %n_add = add nuw i8 %n , %n2
1815
+ %cmp = icmp ugt i8 %n_add , 32
1816
+ br i1 %cmp , label %if.then , label %if.else
1817
+
1818
+ if.then:
1819
+ %r = and i8 %n , 32
1820
+ ret i8 %r
1821
+
1822
+ if.else:
1823
+ ret i8 %other
1824
+ }
1825
+
1826
+ define i8 @test_icmp_sub (i8 %n , i8 %n2 , i8 %other ) {
1827
+ ; CHECK-LABEL: @test_icmp_sub(
1828
+ ; CHECK-NEXT: entry:
1829
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1830
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_SUB]], -33
1831
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1832
+ ; CHECK: if.then:
1833
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1834
+ ; CHECK-NEXT: ret i8 [[R]]
1835
+ ; CHECK: if.else:
1836
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1837
+ ;
1838
+ entry:
1839
+ %n_sub = sub nuw i8 %n , %n2
1840
+ %cmp = icmp ugt i8 %n_sub , 223
1841
+ br i1 %cmp , label %if.then , label %if.else
1842
+
1843
+ if.then:
1844
+ %r = and i8 %n , 32
1845
+ ret i8 %r
1846
+
1847
+ if.else:
1848
+ ret i8 %other
1849
+ }
1850
+
1851
+ define i8 @test_icmp_sub_fail_wrong_arg (i8 %n , i8 %n2 , i8 %other ) {
1852
+ ; CHECK-LABEL: @test_icmp_sub_fail_wrong_arg(
1853
+ ; CHECK-NEXT: entry:
1854
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1855
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_SUB]], -33
1856
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1857
+ ; CHECK: if.then:
1858
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N2]], 32
1859
+ ; CHECK-NEXT: ret i8 [[R]]
1860
+ ; CHECK: if.else:
1861
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1862
+ ;
1863
+ entry:
1864
+ %n_sub = sub nuw i8 %n , %n2
1865
+ %cmp = icmp ugt i8 %n_sub , 223
1866
+ br i1 %cmp , label %if.then , label %if.else
1867
+
1868
+ if.then:
1869
+ %r = and i8 %n2 , 32
1870
+ ret i8 %r
1871
+
1872
+ if.else:
1873
+ ret i8 %other
1874
+ }
1875
+
1876
+ define i8 @test_icmp_sub2 (i8 %n , i8 %n2 , i8 %other ) {
1877
+ ; CHECK-LABEL: @test_icmp_sub2(
1878
+ ; CHECK-NEXT: entry:
1879
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1880
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_SUB]], -31
1881
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1882
+ ; CHECK: if.then:
1883
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1884
+ ; CHECK: if.else:
1885
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1886
+ ; CHECK-NEXT: ret i8 [[R]]
1887
+ ;
1888
+ entry:
1889
+ %n_sub = sub nuw i8 %n , %n2
1890
+ %cmp = icmp ule i8 %n_sub , 224
1891
+ br i1 %cmp , label %if.then , label %if.else
1892
+
1893
+ if.then:
1894
+ ret i8 %other
1895
+ if.else:
1896
+ %r = and i8 %n , 32
1897
+ ret i8 %r
1898
+
1899
+ }
1900
+
1901
+ define i8 @test_icmp_sub2_fail_nsw (i8 %n , i8 %n2 , i8 %other ) {
1902
+ ; CHECK-LABEL: @test_icmp_sub2_fail_nsw(
1903
+ ; CHECK-NEXT: entry:
1904
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nsw i8 [[N:%.*]], [[N2:%.*]]
1905
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_SUB]], -31
1906
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1907
+ ; CHECK: if.then:
1908
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1909
+ ; CHECK: if.else:
1910
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1911
+ ; CHECK-NEXT: ret i8 [[R]]
1912
+ ;
1913
+ entry:
1914
+ %n_sub = sub nsw i8 %n , %n2
1915
+ %cmp = icmp ule i8 %n_sub , 224
1916
+ br i1 %cmp , label %if.then , label %if.else
1917
+
1918
+ if.then:
1919
+ ret i8 %other
1920
+ if.else:
1921
+ %r = and i8 %n , 32
1922
+ ret i8 %r
1923
+
1924
+ }
1925
+
1926
+
1927
+ define i8 @test_icmp_sub_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
1928
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_range(
1929
+ ; CHECK-NEXT: entry:
1930
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1931
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_SUB]], -34
1932
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1933
+ ; CHECK: if.then:
1934
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1935
+ ; CHECK-NEXT: ret i8 [[R]]
1936
+ ; CHECK: if.else:
1937
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1938
+ ;
1939
+ entry:
1940
+ %n_sub = sub nuw i8 %n , %n2
1941
+ %cmp = icmp uge i8 %n_sub , 223
1942
+ br i1 %cmp , label %if.then , label %if.else
1943
+
1944
+ if.then:
1945
+ %r = and i8 %n , 32
1946
+ ret i8 %r
1947
+
1948
+ if.else:
1949
+ ret i8 %other
1950
+ }
1951
+
1952
+ define i8 @test_icmp_sub_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
1953
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_pred(
1954
+ ; CHECK-NEXT: entry:
1955
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1956
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[N_SUB]], 31
1957
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1958
+ ; CHECK: if.then:
1959
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1960
+ ; CHECK-NEXT: ret i8 [[R]]
1961
+ ; CHECK: if.else:
1962
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1963
+ ;
1964
+ entry:
1965
+ %n_sub = sub nuw i8 %n , %n2
1966
+ %cmp = icmp sge i8 %n_sub , 32
1967
+ br i1 %cmp , label %if.then , label %if.else
1968
+
1969
+ if.then:
1970
+ %r = and i8 %n , 32
1971
+ ret i8 %r
1972
+
1973
+ if.else:
1974
+ ret i8 %other
1975
+ }
1976
+
1701
1977
declare void @use (i1 )
1702
1978
declare void @sink (i8 )
0 commit comments