Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit a1d740b

Browse files
committed
[X86] Add test cases for multiply by 37, 41, and 73.
These can all be handled with 2 LEAs similar to what we do for 11, 19, 21. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337870 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent e2033fe commit a1d740b

File tree

3 files changed

+330
-0
lines changed

3 files changed

+330
-0
lines changed

test/CodeGen/X86/mul-constant-i16.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,38 @@ define i16 @test_mul_by_32(i16 %x) {
639639
ret i16 %mul
640640
}
641641

642+
define i16 @test_mul_by_37(i16 %x) {
643+
; X86-LABEL: test_mul_by_37:
644+
; X86: # %bb.0:
645+
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %eax
646+
; X86-NEXT: # kill: def $ax killed $ax killed $eax
647+
; X86-NEXT: retl
648+
;
649+
; X64-LABEL: test_mul_by_37:
650+
; X64: # %bb.0:
651+
; X64-NEXT: imull $37, %edi, %eax
652+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
653+
; X64-NEXT: retq
654+
%mul = mul nsw i16 %x, 37
655+
ret i16 %mul
656+
}
657+
658+
define i16 @test_mul_by_41(i16 %x) {
659+
; X86-LABEL: test_mul_by_41:
660+
; X86: # %bb.0:
661+
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %eax
662+
; X86-NEXT: # kill: def $ax killed $ax killed $eax
663+
; X86-NEXT: retl
664+
;
665+
; X64-LABEL: test_mul_by_41:
666+
; X64: # %bb.0:
667+
; X64-NEXT: imull $41, %edi, %eax
668+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
669+
; X64-NEXT: retq
670+
%mul = mul nsw i16 %x, 41
671+
ret i16 %mul
672+
}
673+
642674
define i16 @test_mul_by_62(i16 %x) {
643675
; X86-LABEL: test_mul_by_62:
644676
; X86: # %bb.0:
@@ -662,6 +694,22 @@ define i16 @test_mul_by_62(i16 %x) {
662694
ret i16 %mul
663695
}
664696

697+
define i16 @test_mul_by_73(i16 %x) {
698+
; X86-LABEL: test_mul_by_73:
699+
; X86: # %bb.0:
700+
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %eax
701+
; X86-NEXT: # kill: def $ax killed $ax killed $eax
702+
; X86-NEXT: retl
703+
;
704+
; X64-LABEL: test_mul_by_73:
705+
; X64: # %bb.0:
706+
; X64-NEXT: imull $73, %edi, %eax
707+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
708+
; X64-NEXT: retq
709+
%mul = mul nsw i16 %x, 73
710+
ret i16 %mul
711+
}
712+
665713
; (x*9+42)*(x*5+2)
666714
define i16 @test_mul_spec(i16 %x) nounwind {
667715
; X86-LABEL: test_mul_spec:

test/CodeGen/X86/mul-constant-i32.ll

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,6 +1676,94 @@ define i32 @test_mul_by_32(i32 %x) {
16761676
ret i32 %mul
16771677
}
16781678

1679+
define i32 @test_mul_by_37(i32 %x) {
1680+
; X86-LABEL: test_mul_by_37:
1681+
; X86: # %bb.0:
1682+
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %eax
1683+
; X86-NEXT: retl
1684+
;
1685+
; X64-HSW-LABEL: test_mul_by_37:
1686+
; X64-HSW: # %bb.0:
1687+
; X64-HSW-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1688+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1689+
;
1690+
; X64-JAG-LABEL: test_mul_by_37:
1691+
; X64-JAG: # %bb.0:
1692+
; X64-JAG-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1693+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1694+
;
1695+
; X86-NOOPT-LABEL: test_mul_by_37:
1696+
; X86-NOOPT: # %bb.0:
1697+
; X86-NOOPT-NEXT: imull $37, {{[0-9]+}}(%esp), %eax
1698+
; X86-NOOPT-NEXT: retl
1699+
;
1700+
; HSW-NOOPT-LABEL: test_mul_by_37:
1701+
; HSW-NOOPT: # %bb.0:
1702+
; HSW-NOOPT-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1703+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1704+
;
1705+
; JAG-NOOPT-LABEL: test_mul_by_37:
1706+
; JAG-NOOPT: # %bb.0:
1707+
; JAG-NOOPT-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1708+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1709+
;
1710+
; X64-SLM-LABEL: test_mul_by_37:
1711+
; X64-SLM: # %bb.0:
1712+
; X64-SLM-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1713+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1714+
;
1715+
; SLM-NOOPT-LABEL: test_mul_by_37:
1716+
; SLM-NOOPT: # %bb.0:
1717+
; SLM-NOOPT-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1718+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1719+
%mul = mul nsw i32 %x, 37
1720+
ret i32 %mul
1721+
}
1722+
1723+
define i32 @test_mul_by_41(i32 %x) {
1724+
; X86-LABEL: test_mul_by_41:
1725+
; X86: # %bb.0:
1726+
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %eax
1727+
; X86-NEXT: retl
1728+
;
1729+
; X64-HSW-LABEL: test_mul_by_41:
1730+
; X64-HSW: # %bb.0:
1731+
; X64-HSW-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1732+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1733+
;
1734+
; X64-JAG-LABEL: test_mul_by_41:
1735+
; X64-JAG: # %bb.0:
1736+
; X64-JAG-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1737+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1738+
;
1739+
; X86-NOOPT-LABEL: test_mul_by_41:
1740+
; X86-NOOPT: # %bb.0:
1741+
; X86-NOOPT-NEXT: imull $41, {{[0-9]+}}(%esp), %eax
1742+
; X86-NOOPT-NEXT: retl
1743+
;
1744+
; HSW-NOOPT-LABEL: test_mul_by_41:
1745+
; HSW-NOOPT: # %bb.0:
1746+
; HSW-NOOPT-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1747+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1748+
;
1749+
; JAG-NOOPT-LABEL: test_mul_by_41:
1750+
; JAG-NOOPT: # %bb.0:
1751+
; JAG-NOOPT-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1752+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1753+
;
1754+
; X64-SLM-LABEL: test_mul_by_41:
1755+
; X64-SLM: # %bb.0:
1756+
; X64-SLM-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1757+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1758+
;
1759+
; SLM-NOOPT-LABEL: test_mul_by_41:
1760+
; SLM-NOOPT: # %bb.0:
1761+
; SLM-NOOPT-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1762+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1763+
%mul = mul nsw i32 %x, 41
1764+
ret i32 %mul
1765+
}
1766+
16791767
define i32 @test_mul_by_62(i32 %x) {
16801768
; X86-LABEL: test_mul_by_62:
16811769
; X86: # %bb.0:
@@ -1733,6 +1821,50 @@ define i32 @test_mul_by_62(i32 %x) {
17331821
ret i32 %mul
17341822
}
17351823

1824+
define i32 @test_mul_by_73(i32 %x) {
1825+
; X86-LABEL: test_mul_by_73:
1826+
; X86: # %bb.0:
1827+
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %eax
1828+
; X86-NEXT: retl
1829+
;
1830+
; X64-HSW-LABEL: test_mul_by_73:
1831+
; X64-HSW: # %bb.0:
1832+
; X64-HSW-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1833+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1834+
;
1835+
; X64-JAG-LABEL: test_mul_by_73:
1836+
; X64-JAG: # %bb.0:
1837+
; X64-JAG-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1838+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1839+
;
1840+
; X86-NOOPT-LABEL: test_mul_by_73:
1841+
; X86-NOOPT: # %bb.0:
1842+
; X86-NOOPT-NEXT: imull $73, {{[0-9]+}}(%esp), %eax
1843+
; X86-NOOPT-NEXT: retl
1844+
;
1845+
; HSW-NOOPT-LABEL: test_mul_by_73:
1846+
; HSW-NOOPT: # %bb.0:
1847+
; HSW-NOOPT-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1848+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1849+
;
1850+
; JAG-NOOPT-LABEL: test_mul_by_73:
1851+
; JAG-NOOPT: # %bb.0:
1852+
; JAG-NOOPT-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1853+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1854+
;
1855+
; X64-SLM-LABEL: test_mul_by_73:
1856+
; X64-SLM: # %bb.0:
1857+
; X64-SLM-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1858+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1859+
;
1860+
; SLM-NOOPT-LABEL: test_mul_by_73:
1861+
; SLM-NOOPT: # %bb.0:
1862+
; SLM-NOOPT-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1863+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1864+
%mul = mul nsw i32 %x, 73
1865+
ret i32 %mul
1866+
}
1867+
17361868
; (x*9+42)*(x*5+2)
17371869
define i32 @test_mul_spec(i32 %x) nounwind {
17381870
; X86-LABEL: test_mul_spec:

test/CodeGen/X86/mul-constant-i64.ll

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,6 +1761,106 @@ define i64 @test_mul_by_32(i64 %x) {
17611761
ret i64 %mul
17621762
}
17631763

1764+
define i64 @test_mul_by_37(i64 %x) {
1765+
; X86-LABEL: test_mul_by_37:
1766+
; X86: # %bb.0:
1767+
; X86-NEXT: movl $37, %eax
1768+
; X86-NEXT: mull {{[0-9]+}}(%esp)
1769+
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %ecx
1770+
; X86-NEXT: addl %ecx, %edx
1771+
; X86-NEXT: retl
1772+
;
1773+
; X64-HSW-LABEL: test_mul_by_37:
1774+
; X64-HSW: # %bb.0:
1775+
; X64-HSW-NEXT: imulq $37, %rdi, %rax # sched: [3:1.00]
1776+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1777+
;
1778+
; X64-JAG-LABEL: test_mul_by_37:
1779+
; X64-JAG: # %bb.0:
1780+
; X64-JAG-NEXT: imulq $37, %rdi, %rax # sched: [6:4.00]
1781+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1782+
;
1783+
; X86-NOOPT-LABEL: test_mul_by_37:
1784+
; X86-NOOPT: # %bb.0:
1785+
; X86-NOOPT-NEXT: movl $37, %eax
1786+
; X86-NOOPT-NEXT: mull {{[0-9]+}}(%esp)
1787+
; X86-NOOPT-NEXT: imull $37, {{[0-9]+}}(%esp), %ecx
1788+
; X86-NOOPT-NEXT: addl %ecx, %edx
1789+
; X86-NOOPT-NEXT: retl
1790+
;
1791+
; HSW-NOOPT-LABEL: test_mul_by_37:
1792+
; HSW-NOOPT: # %bb.0:
1793+
; HSW-NOOPT-NEXT: imulq $37, %rdi, %rax # sched: [3:1.00]
1794+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1795+
;
1796+
; JAG-NOOPT-LABEL: test_mul_by_37:
1797+
; JAG-NOOPT: # %bb.0:
1798+
; JAG-NOOPT-NEXT: imulq $37, %rdi, %rax # sched: [6:4.00]
1799+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1800+
;
1801+
; X64-SLM-LABEL: test_mul_by_37:
1802+
; X64-SLM: # %bb.0:
1803+
; X64-SLM-NEXT: imulq $37, %rdi, %rax # sched: [3:1.00]
1804+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1805+
;
1806+
; SLM-NOOPT-LABEL: test_mul_by_37:
1807+
; SLM-NOOPT: # %bb.0:
1808+
; SLM-NOOPT-NEXT: imulq $37, %rdi, %rax # sched: [3:1.00]
1809+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1810+
%mul = mul nsw i64 %x, 37
1811+
ret i64 %mul
1812+
}
1813+
1814+
define i64 @test_mul_by_41(i64 %x) {
1815+
; X86-LABEL: test_mul_by_41:
1816+
; X86: # %bb.0:
1817+
; X86-NEXT: movl $41, %eax
1818+
; X86-NEXT: mull {{[0-9]+}}(%esp)
1819+
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %ecx
1820+
; X86-NEXT: addl %ecx, %edx
1821+
; X86-NEXT: retl
1822+
;
1823+
; X64-HSW-LABEL: test_mul_by_41:
1824+
; X64-HSW: # %bb.0:
1825+
; X64-HSW-NEXT: imulq $41, %rdi, %rax # sched: [3:1.00]
1826+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1827+
;
1828+
; X64-JAG-LABEL: test_mul_by_41:
1829+
; X64-JAG: # %bb.0:
1830+
; X64-JAG-NEXT: imulq $41, %rdi, %rax # sched: [6:4.00]
1831+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1832+
;
1833+
; X86-NOOPT-LABEL: test_mul_by_41:
1834+
; X86-NOOPT: # %bb.0:
1835+
; X86-NOOPT-NEXT: movl $41, %eax
1836+
; X86-NOOPT-NEXT: mull {{[0-9]+}}(%esp)
1837+
; X86-NOOPT-NEXT: imull $41, {{[0-9]+}}(%esp), %ecx
1838+
; X86-NOOPT-NEXT: addl %ecx, %edx
1839+
; X86-NOOPT-NEXT: retl
1840+
;
1841+
; HSW-NOOPT-LABEL: test_mul_by_41:
1842+
; HSW-NOOPT: # %bb.0:
1843+
; HSW-NOOPT-NEXT: imulq $41, %rdi, %rax # sched: [3:1.00]
1844+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1845+
;
1846+
; JAG-NOOPT-LABEL: test_mul_by_41:
1847+
; JAG-NOOPT: # %bb.0:
1848+
; JAG-NOOPT-NEXT: imulq $41, %rdi, %rax # sched: [6:4.00]
1849+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1850+
;
1851+
; X64-SLM-LABEL: test_mul_by_41:
1852+
; X64-SLM: # %bb.0:
1853+
; X64-SLM-NEXT: imulq $41, %rdi, %rax # sched: [3:1.00]
1854+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1855+
;
1856+
; SLM-NOOPT-LABEL: test_mul_by_41:
1857+
; SLM-NOOPT: # %bb.0:
1858+
; SLM-NOOPT-NEXT: imulq $41, %rdi, %rax # sched: [3:1.00]
1859+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1860+
%mul = mul nsw i64 %x, 41
1861+
ret i64 %mul
1862+
}
1863+
17641864
define i64 @test_mul_by_62(i64 %x) {
17651865
; X86-LABEL: test_mul_by_62:
17661866
; X86: # %bb.0:
@@ -1824,6 +1924,56 @@ define i64 @test_mul_by_62(i64 %x) {
18241924
ret i64 %mul
18251925
}
18261926

1927+
define i64 @test_mul_by_73(i64 %x) {
1928+
; X86-LABEL: test_mul_by_73:
1929+
; X86: # %bb.0:
1930+
; X86-NEXT: movl $73, %eax
1931+
; X86-NEXT: mull {{[0-9]+}}(%esp)
1932+
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %ecx
1933+
; X86-NEXT: addl %ecx, %edx
1934+
; X86-NEXT: retl
1935+
;
1936+
; X64-HSW-LABEL: test_mul_by_73:
1937+
; X64-HSW: # %bb.0:
1938+
; X64-HSW-NEXT: imulq $73, %rdi, %rax # sched: [3:1.00]
1939+
; X64-HSW-NEXT: retq # sched: [7:1.00]
1940+
;
1941+
; X64-JAG-LABEL: test_mul_by_73:
1942+
; X64-JAG: # %bb.0:
1943+
; X64-JAG-NEXT: imulq $73, %rdi, %rax # sched: [6:4.00]
1944+
; X64-JAG-NEXT: retq # sched: [4:1.00]
1945+
;
1946+
; X86-NOOPT-LABEL: test_mul_by_73:
1947+
; X86-NOOPT: # %bb.0:
1948+
; X86-NOOPT-NEXT: movl $73, %eax
1949+
; X86-NOOPT-NEXT: mull {{[0-9]+}}(%esp)
1950+
; X86-NOOPT-NEXT: imull $73, {{[0-9]+}}(%esp), %ecx
1951+
; X86-NOOPT-NEXT: addl %ecx, %edx
1952+
; X86-NOOPT-NEXT: retl
1953+
;
1954+
; HSW-NOOPT-LABEL: test_mul_by_73:
1955+
; HSW-NOOPT: # %bb.0:
1956+
; HSW-NOOPT-NEXT: imulq $73, %rdi, %rax # sched: [3:1.00]
1957+
; HSW-NOOPT-NEXT: retq # sched: [7:1.00]
1958+
;
1959+
; JAG-NOOPT-LABEL: test_mul_by_73:
1960+
; JAG-NOOPT: # %bb.0:
1961+
; JAG-NOOPT-NEXT: imulq $73, %rdi, %rax # sched: [6:4.00]
1962+
; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
1963+
;
1964+
; X64-SLM-LABEL: test_mul_by_73:
1965+
; X64-SLM: # %bb.0:
1966+
; X64-SLM-NEXT: imulq $73, %rdi, %rax # sched: [3:1.00]
1967+
; X64-SLM-NEXT: retq # sched: [4:1.00]
1968+
;
1969+
; SLM-NOOPT-LABEL: test_mul_by_73:
1970+
; SLM-NOOPT: # %bb.0:
1971+
; SLM-NOOPT-NEXT: imulq $73, %rdi, %rax # sched: [3:1.00]
1972+
; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
1973+
%mul = mul nsw i64 %x, 73
1974+
ret i64 %mul
1975+
}
1976+
18271977
; (x*9+42)*(x*5+2)
18281978
define i64 @test_mul_spec(i64 %x) nounwind {
18291979
; X86-LABEL: test_mul_spec:

0 commit comments

Comments
 (0)