aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-03-28 05:57:29 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-03-28 05:57:29 +0000
commit04ecee185c120cc4a5bcdcbef9c66ba3f017e136 (patch)
tree9b3c7aba0c5687a35d4f494df6b4bc6de48f3f71 /test
parent5ea5ba853015513f2b619a58a1aee3ab65726998 (diff)
downloadexternal_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.ll15
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
+}