Skip to content

Commit f23dc22

Browse files
committed
[LV] Move some if-reduction.ll tests to iv-select-cmp.ll
The tests are actually FindFirstIV tests, and having them in if-reduction.ll is misleading.
1 parent 1984c75 commit f23dc22

File tree

2 files changed

+188
-80
lines changed

2 files changed

+188
-80
lines changed

llvm/test/Transforms/LoopVectorize/if-reduction.ll

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,86 +1803,6 @@ for.end: ; preds = %for.body, %entry
18031803
ret i32 %1
18041804
}
18051805

1806-
@table = constant [13 x i16] [i16 10, i16 35, i16 69, i16 147, i16 280, i16 472, i16 682, i16 1013, i16 1559, i16 2544, i16 4553, i16 6494, i16 10000], align 1
1807-
1808-
define i16 @non_reduction_index(i16 noundef %val) {
1809-
; CHECK-LABEL: define i16 @non_reduction_index(
1810-
; CHECK-SAME: i16 noundef [[VAL:%.*]]) {
1811-
; CHECK-NEXT: [[ENTRY:.*]]:
1812-
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
1813-
; CHECK: [[FOR_COND_CLEANUP:.*]]:
1814-
; CHECK-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1815-
; CHECK-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1816-
; CHECK: [[FOR_BODY]]:
1817-
; CHECK-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1818-
; CHECK-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1819-
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1820-
; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[ARRAYIDX]], align 1
1821-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i16 [[TMP0]], [[VAL]]
1822-
; CHECK-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1823-
; CHECK-NEXT: [[SPEC_SELECT]] = select i1 [[CMP1]], i16 [[SUB]], i16 [[K_04]]
1824-
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1825-
; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1826-
;
1827-
entry:
1828-
br label %for.body
1829-
1830-
for.cond.cleanup: ; preds = %for.body
1831-
%spec.select.lcssa = phi i16 [ %spec.select, %for.body ]
1832-
ret i16 %spec.select.lcssa
1833-
1834-
for.body: ; preds = %entry, %for.body
1835-
%i.05 = phi i16 [ 12, %entry ], [ %sub, %for.body ]
1836-
%k.04 = phi i16 [ 0, %entry ], [ %spec.select, %for.body ]
1837-
%arrayidx = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 %i.05
1838-
%0 = load i16, ptr %arrayidx, align 1
1839-
%cmp1 = icmp ugt i16 %0, %val
1840-
%sub = add nsw i16 %i.05, -1
1841-
%spec.select = select i1 %cmp1, i16 %sub, i16 %k.04
1842-
%cmp.not = icmp eq i16 %sub, 0
1843-
br i1 %cmp.not, label %for.cond.cleanup, label %for.body
1844-
}
1845-
1846-
@tablef = constant [13 x half] [half 10.0, half 35.0, half 69.0, half 147.0, half 280.0, half 472.0, half 682.0, half 1013.0, half 1559.0, half 2544.0, half 4556.0, half 6496.0, half 10000.0], align 1
1847-
1848-
define i16 @non_reduction_index_half(half noundef %val) {
1849-
; CHECK-LABEL: define i16 @non_reduction_index_half(
1850-
; CHECK-SAME: half noundef [[VAL:%.*]]) {
1851-
; CHECK-NEXT: [[ENTRY:.*]]:
1852-
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
1853-
; CHECK: [[FOR_COND_CLEANUP:.*]]:
1854-
; CHECK-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1855-
; CHECK-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1856-
; CHECK: [[FOR_BODY]]:
1857-
; CHECK-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1858-
; CHECK-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1859-
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1860-
; CHECK-NEXT: [[TMP0:%.*]] = load half, ptr [[ARRAYIDX]], align 1
1861-
; CHECK-NEXT: [[FCMP1:%.*]] = fcmp ugt half [[TMP0]], [[VAL]]
1862-
; CHECK-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1863-
; CHECK-NEXT: [[SPEC_SELECT]] = select i1 [[FCMP1]], i16 [[SUB]], i16 [[K_04]]
1864-
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1865-
; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1866-
;
1867-
entry:
1868-
br label %for.body
1869-
1870-
for.cond.cleanup: ; preds = %for.body
1871-
%spec.select.lcssa = phi i16 [ %spec.select, %for.body ]
1872-
ret i16 %spec.select.lcssa
1873-
1874-
for.body: ; preds = %entry, %for.body
1875-
%i.05 = phi i16 [ 12, %entry ], [ %sub, %for.body ]
1876-
%k.04 = phi i16 [ 0, %entry ], [ %spec.select, %for.body ]
1877-
%arrayidx = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 %i.05
1878-
%0 = load half, ptr %arrayidx, align 1
1879-
%fcmp1 = fcmp ugt half %0, %val
1880-
%sub = add nsw i16 %i.05, -1
1881-
%spec.select = select i1 %fcmp1, i16 %sub, i16 %k.04
1882-
%cmp.not = icmp eq i16 %sub, 0
1883-
br i1 %cmp.not, label %for.cond.cleanup, label %for.body
1884-
}
1885-
18861806
;.
18871807
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
18881808
; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}

llvm/test/Transforms/LoopVectorize/iv-select-cmp.ll

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,6 +1829,194 @@ exit: ; preds = %for.body
18291829
ret i64 %spec.select
18301830
}
18311831

1832+
@table = constant [13 x i16] [i16 10, i16 35, i16 69, i16 147, i16 280, i16 472, i16 682, i16 1013, i16 1559, i16 2544, i16 4553, i16 6494, i16 10000], align 1
1833+
1834+
define i16 @not_vectorized_select_decreasing_induction_icmp_table_i16(i16 noundef %val) {
1835+
; CHECK-LABEL: define i16 @non_reduction_index(
1836+
; CHECK-SAME: i16 noundef [[VAL:%.*]]) {
1837+
; CHECK-NEXT: [[ENTRY:.*]]:
1838+
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
1839+
; CHECK: [[FOR_COND_CLEANUP:.*]]:
1840+
; CHECK-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1841+
; CHECK-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1842+
; CHECK: [[FOR_BODY]]:
1843+
; CHECK-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1844+
; CHECK-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1845+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1846+
; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[ARRAYIDX]], align 1
1847+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i16 [[TMP0]], [[VAL]]
1848+
; CHECK-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1849+
; CHECK-NEXT: [[SPEC_SELECT]] = select i1 [[CMP1]], i16 [[SUB]], i16 [[K_04]]
1850+
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1851+
; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1852+
;
1853+
; CHECK-VF4IC1-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_i16(
1854+
; CHECK-VF4IC1-SAME: i16 noundef [[VAL:%.*]]) {
1855+
; CHECK-VF4IC1-NEXT: [[ENTRY:.*]]:
1856+
; CHECK-VF4IC1-NEXT: br label %[[FOR_BODY:.*]]
1857+
; CHECK-VF4IC1: [[FOR_COND_CLEANUP:.*]]:
1858+
; CHECK-VF4IC1-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1859+
; CHECK-VF4IC1-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1860+
; CHECK-VF4IC1: [[FOR_BODY]]:
1861+
; CHECK-VF4IC1-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1862+
; CHECK-VF4IC1-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1863+
; CHECK-VF4IC1-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1864+
; CHECK-VF4IC1-NEXT: [[TMP0:%.*]] = load i16, ptr [[ARRAYIDX]], align 1
1865+
; CHECK-VF4IC1-NEXT: [[CMP1:%.*]] = icmp ugt i16 [[TMP0]], [[VAL]]
1866+
; CHECK-VF4IC1-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1867+
; CHECK-VF4IC1-NEXT: [[SPEC_SELECT]] = select i1 [[CMP1]], i16 [[SUB]], i16 [[K_04]]
1868+
; CHECK-VF4IC1-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1869+
; CHECK-VF4IC1-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1870+
;
1871+
; CHECK-VF4IC4-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_i16(
1872+
; CHECK-VF4IC4-SAME: i16 noundef [[VAL:%.*]]) {
1873+
; CHECK-VF4IC4-NEXT: [[ENTRY:.*]]:
1874+
; CHECK-VF4IC4-NEXT: br label %[[FOR_BODY:.*]]
1875+
; CHECK-VF4IC4: [[FOR_COND_CLEANUP:.*]]:
1876+
; CHECK-VF4IC4-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1877+
; CHECK-VF4IC4-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1878+
; CHECK-VF4IC4: [[FOR_BODY]]:
1879+
; CHECK-VF4IC4-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1880+
; CHECK-VF4IC4-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1881+
; CHECK-VF4IC4-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1882+
; CHECK-VF4IC4-NEXT: [[TMP0:%.*]] = load i16, ptr [[ARRAYIDX]], align 1
1883+
; CHECK-VF4IC4-NEXT: [[CMP1:%.*]] = icmp ugt i16 [[TMP0]], [[VAL]]
1884+
; CHECK-VF4IC4-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1885+
; CHECK-VF4IC4-NEXT: [[SPEC_SELECT]] = select i1 [[CMP1]], i16 [[SUB]], i16 [[K_04]]
1886+
; CHECK-VF4IC4-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1887+
; CHECK-VF4IC4-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1888+
;
1889+
; CHECK-VF1IC4-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_i16(
1890+
; CHECK-VF1IC4-SAME: i16 noundef [[VAL:%.*]]) {
1891+
; CHECK-VF1IC4-NEXT: [[ENTRY:.*]]:
1892+
; CHECK-VF1IC4-NEXT: br label %[[FOR_BODY:.*]]
1893+
; CHECK-VF1IC4: [[FOR_COND_CLEANUP:.*]]:
1894+
; CHECK-VF1IC4-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1895+
; CHECK-VF1IC4-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1896+
; CHECK-VF1IC4: [[FOR_BODY]]:
1897+
; CHECK-VF1IC4-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1898+
; CHECK-VF1IC4-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1899+
; CHECK-VF1IC4-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1900+
; CHECK-VF1IC4-NEXT: [[TMP0:%.*]] = load i16, ptr [[ARRAYIDX]], align 1
1901+
; CHECK-VF1IC4-NEXT: [[CMP1:%.*]] = icmp ugt i16 [[TMP0]], [[VAL]]
1902+
; CHECK-VF1IC4-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1903+
; CHECK-VF1IC4-NEXT: [[SPEC_SELECT]] = select i1 [[CMP1]], i16 [[SUB]], i16 [[K_04]]
1904+
; CHECK-VF1IC4-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1905+
; CHECK-VF1IC4-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1906+
;
1907+
entry:
1908+
br label %for.body
1909+
1910+
for.cond.cleanup: ; preds = %for.body
1911+
%spec.select.lcssa = phi i16 [ %spec.select, %for.body ]
1912+
ret i16 %spec.select.lcssa
1913+
1914+
for.body: ; preds = %entry, %for.body
1915+
%i.05 = phi i16 [ 12, %entry ], [ %sub, %for.body ]
1916+
%k.04 = phi i16 [ 0, %entry ], [ %spec.select, %for.body ]
1917+
%arrayidx = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 %i.05
1918+
%0 = load i16, ptr %arrayidx, align 1
1919+
%cmp1 = icmp ugt i16 %0, %val
1920+
%sub = add nsw i16 %i.05, -1
1921+
%spec.select = select i1 %cmp1, i16 %sub, i16 %k.04
1922+
%cmp.not = icmp eq i16 %sub, 0
1923+
br i1 %cmp.not, label %for.cond.cleanup, label %for.body
1924+
}
1925+
1926+
@tablef = constant [13 x half] [half 10.0, half 35.0, half 69.0, half 147.0, half 280.0, half 472.0, half 682.0, half 1013.0, half 1559.0, half 2544.0, half 4556.0, half 6496.0, half 10000.0], align 1
1927+
1928+
define i16 @not_vectorized_select_decreasing_induction_icmp_table_half(half noundef %val) {
1929+
; CHECK-LABEL: define i16 @non_reduction_index_half(
1930+
; CHECK-SAME: half noundef [[VAL:%.*]]) {
1931+
; CHECK-NEXT: [[ENTRY:.*]]:
1932+
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
1933+
; CHECK: [[FOR_COND_CLEANUP:.*]]:
1934+
; CHECK-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1935+
; CHECK-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1936+
; CHECK: [[FOR_BODY]]:
1937+
; CHECK-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1938+
; CHECK-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1939+
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1940+
; CHECK-NEXT: [[TMP0:%.*]] = load half, ptr [[ARRAYIDX]], align 1
1941+
; CHECK-NEXT: [[FCMP1:%.*]] = fcmp ugt half [[TMP0]], [[VAL]]
1942+
; CHECK-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1943+
; CHECK-NEXT: [[SPEC_SELECT]] = select i1 [[FCMP1]], i16 [[SUB]], i16 [[K_04]]
1944+
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1945+
; CHECK-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1946+
;
1947+
; CHECK-VF4IC1-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_half(
1948+
; CHECK-VF4IC1-SAME: half noundef [[VAL:%.*]]) {
1949+
; CHECK-VF4IC1-NEXT: [[ENTRY:.*]]:
1950+
; CHECK-VF4IC1-NEXT: br label %[[FOR_BODY:.*]]
1951+
; CHECK-VF4IC1: [[FOR_COND_CLEANUP:.*]]:
1952+
; CHECK-VF4IC1-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1953+
; CHECK-VF4IC1-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1954+
; CHECK-VF4IC1: [[FOR_BODY]]:
1955+
; CHECK-VF4IC1-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1956+
; CHECK-VF4IC1-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1957+
; CHECK-VF4IC1-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1958+
; CHECK-VF4IC1-NEXT: [[TMP0:%.*]] = load half, ptr [[ARRAYIDX]], align 1
1959+
; CHECK-VF4IC1-NEXT: [[FCMP1:%.*]] = fcmp ugt half [[TMP0]], [[VAL]]
1960+
; CHECK-VF4IC1-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1961+
; CHECK-VF4IC1-NEXT: [[SPEC_SELECT]] = select i1 [[FCMP1]], i16 [[SUB]], i16 [[K_04]]
1962+
; CHECK-VF4IC1-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1963+
; CHECK-VF4IC1-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1964+
;
1965+
; CHECK-VF4IC4-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_half(
1966+
; CHECK-VF4IC4-SAME: half noundef [[VAL:%.*]]) {
1967+
; CHECK-VF4IC4-NEXT: [[ENTRY:.*]]:
1968+
; CHECK-VF4IC4-NEXT: br label %[[FOR_BODY:.*]]
1969+
; CHECK-VF4IC4: [[FOR_COND_CLEANUP:.*]]:
1970+
; CHECK-VF4IC4-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1971+
; CHECK-VF4IC4-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1972+
; CHECK-VF4IC4: [[FOR_BODY]]:
1973+
; CHECK-VF4IC4-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1974+
; CHECK-VF4IC4-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1975+
; CHECK-VF4IC4-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1976+
; CHECK-VF4IC4-NEXT: [[TMP0:%.*]] = load half, ptr [[ARRAYIDX]], align 1
1977+
; CHECK-VF4IC4-NEXT: [[FCMP1:%.*]] = fcmp ugt half [[TMP0]], [[VAL]]
1978+
; CHECK-VF4IC4-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1979+
; CHECK-VF4IC4-NEXT: [[SPEC_SELECT]] = select i1 [[FCMP1]], i16 [[SUB]], i16 [[K_04]]
1980+
; CHECK-VF4IC4-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1981+
; CHECK-VF4IC4-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
1982+
;
1983+
; CHECK-VF1IC4-LABEL: define i16 @not_vectorized_select_decreasing_induction_icmp_table_half(
1984+
; CHECK-VF1IC4-SAME: half noundef [[VAL:%.*]]) {
1985+
; CHECK-VF1IC4-NEXT: [[ENTRY:.*]]:
1986+
; CHECK-VF1IC4-NEXT: br label %[[FOR_BODY:.*]]
1987+
; CHECK-VF1IC4: [[FOR_COND_CLEANUP:.*]]:
1988+
; CHECK-VF1IC4-NEXT: [[SPEC_SELECT_LCSSA:%.*]] = phi i16 [ [[SPEC_SELECT:%.*]], %[[FOR_BODY]] ]
1989+
; CHECK-VF1IC4-NEXT: ret i16 [[SPEC_SELECT_LCSSA]]
1990+
; CHECK-VF1IC4: [[FOR_BODY]]:
1991+
; CHECK-VF1IC4-NEXT: [[I_05:%.*]] = phi i16 [ 12, %[[ENTRY]] ], [ [[SUB:%.*]], %[[FOR_BODY]] ]
1992+
; CHECK-VF1IC4-NEXT: [[K_04:%.*]] = phi i16 [ 0, %[[ENTRY]] ], [ [[SPEC_SELECT]], %[[FOR_BODY]] ]
1993+
; CHECK-VF1IC4-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 [[I_05]]
1994+
; CHECK-VF1IC4-NEXT: [[TMP0:%.*]] = load half, ptr [[ARRAYIDX]], align 1
1995+
; CHECK-VF1IC4-NEXT: [[FCMP1:%.*]] = fcmp ugt half [[TMP0]], [[VAL]]
1996+
; CHECK-VF1IC4-NEXT: [[SUB]] = add nsw i16 [[I_05]], -1
1997+
; CHECK-VF1IC4-NEXT: [[SPEC_SELECT]] = select i1 [[FCMP1]], i16 [[SUB]], i16 [[K_04]]
1998+
; CHECK-VF1IC4-NEXT: [[CMP_NOT:%.*]] = icmp eq i16 [[SUB]], 0
1999+
; CHECK-VF1IC4-NEXT: br i1 [[CMP_NOT]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]]
2000+
;
2001+
entry:
2002+
br label %for.body
2003+
2004+
for.cond.cleanup: ; preds = %for.body
2005+
%spec.select.lcssa = phi i16 [ %spec.select, %for.body ]
2006+
ret i16 %spec.select.lcssa
2007+
2008+
for.body: ; preds = %entry, %for.body
2009+
%i.05 = phi i16 [ 12, %entry ], [ %sub, %for.body ]
2010+
%k.04 = phi i16 [ 0, %entry ], [ %spec.select, %for.body ]
2011+
%arrayidx = getelementptr inbounds [13 x i16], ptr @table, i16 0, i16 %i.05
2012+
%0 = load half, ptr %arrayidx, align 1
2013+
%fcmp1 = fcmp ugt half %0, %val
2014+
%sub = add nsw i16 %i.05, -1
2015+
%spec.select = select i1 %fcmp1, i16 %sub, i16 %k.04
2016+
%cmp.not = icmp eq i16 %sub, 0
2017+
br i1 %cmp.not, label %for.cond.cleanup, label %for.body
2018+
}
2019+
18322020
define i64 @not_vectorized_select_decreasing_induction_icmp_non_const_start(ptr %a, ptr %b, i64 %rdx.start, i64 %n) {
18332021
; CHECK-VF4IC1-LABEL: define i64 @not_vectorized_select_decreasing_induction_icmp_non_const_start(
18342022
; CHECK-VF4IC1-SAME: ptr [[A:%.*]], ptr [[B:%.*]], i64 [[RDX_START:%.*]], i64 [[N:%.*]]) {

0 commit comments

Comments
 (0)