@@ -1802,302 +1802,6 @@ define i32 @loadCombine_4consecutive_mixsize2(ptr %p) {
18021802 ret i32 %o2
18031803}
18041804
1805- define i32 @loadCombine_4consecutive_mixsize3 (ptr %p ) {
1806- ; LE-LABEL: @loadCombine_4consecutive_mixsize3(
1807- ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
1808- ; LE-NEXT: ret i32 [[L1]]
1809- ;
1810- ; BE-LABEL: @loadCombine_4consecutive_mixsize3(
1811- ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1812- ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 3
1813- ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
1814- ; BE-NEXT: [[L2:%.*]] = load i16, ptr [[P1]], align 2
1815- ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
1816- ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
1817- ; BE-NEXT: [[E2:%.*]] = zext i16 [[L2]] to i32
1818- ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
1819- ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
1820- ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 24
1821- ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1822- ; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
1823- ; BE-NEXT: ret i32 [[O2]]
1824- ;
1825- %p1 = getelementptr i8 , ptr %p , i32 1
1826- %p2 = getelementptr i8 , ptr %p , i32 3
1827- %l1 = load i8 , ptr %p
1828- %l2 = load i16 , ptr %p1
1829- %l3 = load i8 , ptr %p2
1830-
1831- %e1 = zext i8 %l1 to i32
1832- %e2 = zext i16 %l2 to i32
1833- %e3 = zext i8 %l3 to i32
1834-
1835- %s2 = shl i32 %e2 , 8
1836- %s3 = shl i32 %e3 , 24
1837-
1838- %o1 = or i32 %e1 , %s2
1839- %o2 = or i32 %o1 , %s3
1840- ret i32 %o2
1841- }
1842-
1843- define i16 @loadCombine_mixsize_4bit (ptr %p ) {
1844- ; ALL-LABEL: @loadCombine_mixsize_4bit(
1845- ; ALL-NEXT: [[P1:%.*]] = getelementptr i4, ptr [[P:%.*]], i32 2
1846- ; ALL-NEXT: [[P2:%.*]] = getelementptr i4, ptr [[P]], i32 3
1847- ; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
1848- ; ALL-NEXT: [[L2:%.*]] = load i4, ptr [[P1]], align 1
1849- ; ALL-NEXT: [[L3:%.*]] = load i4, ptr [[P2]], align 1
1850- ; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16
1851- ; ALL-NEXT: [[E2:%.*]] = zext i4 [[L2]] to i16
1852- ; ALL-NEXT: [[E3:%.*]] = zext i4 [[L3]] to i16
1853- ; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8
1854- ; ALL-NEXT: [[S3:%.*]] = shl i16 [[E3]], 12
1855- ; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]]
1856- ; ALL-NEXT: [[O2:%.*]] = or i16 [[O1]], [[S3]]
1857- ; ALL-NEXT: ret i16 [[O2]]
1858- ;
1859- %p1 = getelementptr i4 , ptr %p , i32 2
1860- %p2 = getelementptr i4 , ptr %p , i32 3
1861- %l1 = load i8 , ptr %p
1862- %l2 = load i4 , ptr %p1
1863- %l3 = load i4 , ptr %p2
1864-
1865- %e1 = zext i8 %l1 to i16
1866- %e2 = zext i4 %l2 to i16
1867- %e3 = zext i4 %l3 to i16
1868-
1869- %s2 = shl i16 %e2 , 8
1870- %s3 = shl i16 %e3 , 12
1871-
1872- %o1 = or i16 %e1 , %s2
1873- %o2 = or i16 %o1 , %s3
1874- ret i16 %o2
1875- }
1876-
1877- define i32 @loadCombine_2consecutive_mixsize_not_equal_store_size (ptr %p ) {
1878- ; ALL-LABEL: @loadCombine_2consecutive_mixsize_not_equal_store_size(
1879- ; ALL-NEXT: [[P1:%.*]] = getelementptr i4, ptr [[P:%.*]], i32 1
1880- ; ALL-NEXT: [[L1:%.*]] = load i4, ptr [[P]], align 1
1881- ; ALL-NEXT: [[L2:%.*]] = load i28, ptr [[P1]], align 4
1882- ; ALL-NEXT: [[E1:%.*]] = zext i4 [[L1]] to i32
1883- ; ALL-NEXT: [[E2:%.*]] = zext i28 [[L2]] to i32
1884- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 4
1885- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1886- ; ALL-NEXT: ret i32 [[O1]]
1887- ;
1888- %p1 = getelementptr i4 , ptr %p , i32 1
1889- %l1 = load i4 , ptr %p
1890- %l2 = load i28 , ptr %p1
1891- %e1 = zext i4 %l1 to i32
1892- %e2 = zext i28 %l2 to i32
1893- %s2 = shl i32 %e2 , 4
1894- %o1 = or i32 %e1 , %s2
1895- ret i32 %o1
1896- }
1897-
1898- define i32 @loadCombine_2consecutive_mixsize_not_equal_store_size2 (ptr %p ) {
1899- ; ALL-LABEL: @loadCombine_2consecutive_mixsize_not_equal_store_size2(
1900- ; ALL-NEXT: [[P1:%.*]] = getelementptr i4, ptr [[P:%.*]], i32 7
1901- ; ALL-NEXT: [[L1:%.*]] = load i28, ptr [[P]], align 4
1902- ; ALL-NEXT: [[L2:%.*]] = load i4, ptr [[P1]], align 1
1903- ; ALL-NEXT: [[E1:%.*]] = zext i28 [[L1]] to i32
1904- ; ALL-NEXT: [[E2:%.*]] = zext i4 [[L2]] to i32
1905- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 28
1906- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1907- ; ALL-NEXT: ret i32 [[O1]]
1908- ;
1909- %p1 = getelementptr i4 , ptr %p , i32 7
1910- %l1 = load i28 , ptr %p
1911- %l2 = load i4 , ptr %p1
1912- %e1 = zext i28 %l1 to i32
1913- %e2 = zext i4 %l2 to i32
1914- %s2 = shl i32 %e2 , 28
1915- %o1 = or i32 %e1 , %s2
1916- ret i32 %o1
1917- }
1918-
1919- define i32 @loadCombine_2consecutive_mixsize_not_equal_store_size3 (ptr %p ) {
1920- ; ALL-LABEL: @loadCombine_2consecutive_mixsize_not_equal_store_size3(
1921- ; ALL-NEXT: [[P1:%.*]] = getelementptr i1, ptr [[P:%.*]], i32 23
1922- ; ALL-NEXT: [[L1:%.*]] = load i23, ptr [[P]], align 4
1923- ; ALL-NEXT: [[L2:%.*]] = load i9, ptr [[P1]], align 2
1924- ; ALL-NEXT: [[E1:%.*]] = zext i23 [[L1]] to i32
1925- ; ALL-NEXT: [[E2:%.*]] = zext i9 [[L2]] to i32
1926- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 24
1927- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1928- ; ALL-NEXT: ret i32 [[O1]]
1929- ;
1930- %p1 = getelementptr i1 , ptr %p , i32 23
1931- %l1 = load i23 , ptr %p
1932- %l2 = load i9 , ptr %p1
1933- %e1 = zext i23 %l1 to i32
1934- %e2 = zext i9 %l2 to i32
1935- %s2 = shl i32 %e2 , 24
1936- %o1 = or i32 %e1 , %s2
1937- ret i32 %o1
1938- }
1939-
1940- define i32 @loadCombine_2consecutive_mixsize_not_equal_store_size4 (ptr %p ) {
1941- ; ALL-LABEL: @loadCombine_2consecutive_mixsize_not_equal_store_size4(
1942- ; ALL-NEXT: [[P1:%.*]] = getelementptr i1, ptr [[P:%.*]], i32 9
1943- ; ALL-NEXT: [[L1:%.*]] = load i9, ptr [[P]], align 2
1944- ; ALL-NEXT: [[L2:%.*]] = load i23, ptr [[P1]], align 4
1945- ; ALL-NEXT: [[E1:%.*]] = zext i9 [[L1]] to i32
1946- ; ALL-NEXT: [[E2:%.*]] = zext i23 [[L2]] to i32
1947- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 24
1948- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1949- ; ALL-NEXT: ret i32 [[O1]]
1950- ;
1951- %p1 = getelementptr i1 , ptr %p , i32 9
1952- %l1 = load i9 , ptr %p
1953- %l2 = load i23 , ptr %p1
1954- %e1 = zext i9 %l1 to i32
1955- %e2 = zext i23 %l2 to i32
1956- %s2 = shl i32 %e2 , 24
1957- %o1 = or i32 %e1 , %s2
1958- ret i32 %o1
1959- }
1960-
1961- define i32 @loadCombine_2consecutive_mixsize_not_power_of_two (ptr %p ) {
1962- ; LE-LABEL: @loadCombine_2consecutive_mixsize_not_power_of_two(
1963- ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
1964- ; LE-NEXT: ret i32 [[L1]]
1965- ;
1966- ; BE-LABEL: @loadCombine_2consecutive_mixsize_not_power_of_two(
1967- ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1968- ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
1969- ; BE-NEXT: [[L2:%.*]] = load i24, ptr [[P1]], align 4
1970- ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
1971- ; BE-NEXT: [[E2:%.*]] = zext i24 [[L2]] to i32
1972- ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
1973- ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1974- ; BE-NEXT: ret i32 [[O1]]
1975- ;
1976- %p1 = getelementptr i8 , ptr %p , i32 1
1977- %l1 = load i8 , ptr %p
1978- %l2 = load i24 , ptr %p1
1979- %e1 = zext i8 %l1 to i32
1980- %e2 = zext i24 %l2 to i32
1981- %s2 = shl i32 %e2 , 8
1982- %o1 = or i32 %e1 , %s2
1983- ret i32 %o1
1984- }
1985-
1986- define i32 @loadCombine_2consecutive_mixsize_not_power_of_two2 (ptr %p ) {
1987- ; LE-LABEL: @loadCombine_2consecutive_mixsize_not_power_of_two2(
1988- ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 4
1989- ; LE-NEXT: ret i32 [[L1]]
1990- ;
1991- ; BE-LABEL: @loadCombine_2consecutive_mixsize_not_power_of_two2(
1992- ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 3
1993- ; BE-NEXT: [[L1:%.*]] = load i24, ptr [[P]], align 4
1994- ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
1995- ; BE-NEXT: [[E1:%.*]] = zext i24 [[L1]] to i32
1996- ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
1997- ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 24
1998- ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
1999- ; BE-NEXT: ret i32 [[O1]]
2000- ;
2001- %p1 = getelementptr i8 , ptr %p , i32 3
2002- %l1 = load i24 , ptr %p
2003- %l2 = load i8 , ptr %p1
2004- %e1 = zext i24 %l1 to i32
2005- %e2 = zext i8 %l2 to i32
2006- %s2 = shl i32 %e2 , 24
2007- %o1 = or i32 %e1 , %s2
2008- ret i32 %o1
2009- }
2010-
2011- define i32 @loadCombine_2consecutive_sum_size_not_legal (ptr %p ) {
2012- ; ALL-LABEL: @loadCombine_2consecutive_sum_size_not_legal(
2013- ; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2
2014- ; ALL-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2
2015- ; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
2016- ; ALL-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32
2017- ; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
2018- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16
2019- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
2020- ; ALL-NEXT: ret i32 [[O1]]
2021- ;
2022- %p1 = getelementptr i8 , ptr %p , i32 2
2023- %l1 = load i16 , ptr %p
2024- %l2 = load i8 , ptr %p1
2025- %e1 = zext i16 %l1 to i32
2026- %e2 = zext i8 %l2 to i32
2027- %s2 = shl i32 %e2 , 16
2028- %o1 = or i32 %e1 , %s2
2029- ret i32 %o1
2030- }
2031-
2032- define i32 @loadCombine_2consecutive_sum_size_not_legal2 (ptr %p ) {
2033- ; ALL-LABEL: @loadCombine_2consecutive_sum_size_not_legal2(
2034- ; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2035- ; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
2036- ; ALL-NEXT: [[L2:%.*]] = load i16, ptr [[P1]], align 2
2037- ; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
2038- ; ALL-NEXT: [[E2:%.*]] = zext i16 [[L2]] to i32
2039- ; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
2040- ; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
2041- ; ALL-NEXT: ret i32 [[O1]]
2042- ;
2043- %p1 = getelementptr i8 , ptr %p , i32 1
2044- %l1 = load i8 , ptr %p
2045- %l2 = load i16 , ptr %p1
2046- %e1 = zext i8 %l1 to i32
2047- %e2 = zext i16 %l2 to i32
2048- %s2 = shl i32 %e2 , 8
2049- %o1 = or i32 %e1 , %s2
2050- ret i32 %o1
2051- }
2052-
2053- define i64 @loadCombine_8consecutive_mixsize (ptr %p ) {
2054- ; LE-LABEL: @loadCombine_8consecutive_mixsize(
2055- ; LE-NEXT: [[O3:%.*]] = load i64, ptr [[P:%.*]], align 1
2056- ; LE-NEXT: ret i64 [[O3]]
2057- ;
2058- ; BE-LABEL: @loadCombine_8consecutive_mixsize(
2059- ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
2060- ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 2
2061- ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i64 4
2062- ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
2063- ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
2064- ; BE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 2
2065- ; BE-NEXT: [[L4:%.*]] = load i32, ptr [[P3]], align 4
2066- ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i64
2067- ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i64
2068- ; BE-NEXT: [[E3:%.*]] = zext i16 [[L3]] to i64
2069- ; BE-NEXT: [[E4:%.*]] = zext i32 [[L4]] to i64
2070- ; BE-NEXT: [[S2:%.*]] = shl i64 [[E2]], 8
2071- ; BE-NEXT: [[S3:%.*]] = shl i64 [[E3]], 16
2072- ; BE-NEXT: [[S4:%.*]] = shl i64 [[E4]], 32
2073- ; BE-NEXT: [[O1:%.*]] = or i64 [[E1]], [[S2]]
2074- ; BE-NEXT: [[O2:%.*]] = or i64 [[O1]], [[S3]]
2075- ; BE-NEXT: [[O3:%.*]] = or i64 [[O2]], [[S4]]
2076- ; BE-NEXT: ret i64 [[O3]]
2077- ;
2078- %p1 = getelementptr i8 , ptr %p , i64 1
2079- %p2 = getelementptr i8 , ptr %p , i64 2
2080- %p3 = getelementptr i8 , ptr %p , i64 4
2081- %l1 = load i8 , ptr %p
2082- %l2 = load i8 , ptr %p1
2083- %l3 = load i16 , ptr %p2
2084- %l4 = load i32 , ptr %p3
2085-
2086- %e1 = zext i8 %l1 to i64
2087- %e2 = zext i8 %l2 to i64
2088- %e3 = zext i16 %l3 to i64
2089- %e4 = zext i32 %l4 to i64
2090-
2091- %s2 = shl i64 %e2 , 8
2092- %s3 = shl i64 %e3 , 16
2093- %s4 = shl i64 %e4 , 32
2094-
2095- %o1 = or i64 %e1 , %s2
2096- %o2 = or i64 %o1 , %s3
2097- %o3 = or i64 %o2 , %s4
2098- ret i64 %o3
2099- }
2100-
21011805define i32 @loadCombine_4consecutive_lower_index_comes_before (ptr %p ) {
21021806; LE-LABEL: @loadCombine_4consecutive_lower_index_comes_before(
21031807; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1
0 commit comments