diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-03-28 05:57:29 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-03-28 05:57:29 +0000 |
commit | 04ecee185c120cc4a5bcdcbef9c66ba3f017e136 (patch) | |
tree | 9b3c7aba0c5687a35d4f494df6b4bc6de48f3f71 /test | |
parent | 5ea5ba853015513f2b619a58a1aee3ab65726998 (diff) | |
download | external_llvm-04ecee185c120cc4a5bcdcbef9c66ba3f017e136.zip external_llvm-04ecee185c120cc4a5bcdcbef9c66ba3f017e136.tar.gz external_llvm-04ecee185c120cc4a5bcdcbef9c66ba3f017e136.tar.bz2 |
Optimize some 64-bit multiplication by constants into two lea's or one lea + shl since imulq is slow (latency 5). e.g.
x * 40
=>
shlq $3, %rdi
leaq (%rdi,%rdi,4), %rax
This has the added benefit of allowing more multiply to be folded into addressing mode. e.g.
a * 24 + b
=>
leaq (%rdi,%rdi,2), %rax
leaq (%rsi,%rax,8), %rax
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/imul-lea-2.ll | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/test/CodeGen/X86/imul-lea-2.ll b/test/CodeGen/X86/imul-lea-2.ll new file mode 100644 index 0000000..0a2df1c --- /dev/null +++ b/test/CodeGen/X86/imul-lea-2.ll @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep lea | count 3 +; RUN: llvm-as < %s | llc -march=x86-64 | grep shl | count 1 +; RUN: llvm-as < %s | llc -march=x86-64 | not grep imul + +define i64 @t1(i64 %a) nounwind readnone { +entry: + %0 = mul i64 %a, 81 ; <i64> [#uses=1] + ret i64 %0 +} + +define i64 @t2(i64 %a) nounwind readnone { +entry: + %0 = mul i64 %a, 40 ; <i64> [#uses=1] + ret i64 %0 +} |