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 | 0b0cd9113af42c422c829563c3b12e6e52bd2d79 (patch) | |
tree | 9b3c7aba0c5687a35d4f494df6b4bc6de48f3f71 /lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | e8b64106ecf1057c7506d44ec8f64b5c83ee51c7 (diff) |
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 'lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 041c5007c5..78d5d403e8 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -93,14 +93,14 @@ namespace { } SDValue CombineTo(SDNode *N, const SDValue *To, unsigned NumTo, - bool AddTo = true); + bool AddTo = true); SDValue CombineTo(SDNode *N, SDValue Res, bool AddTo = true) { return CombineTo(N, &Res, 1, AddTo); } SDValue CombineTo(SDNode *N, SDValue Res0, SDValue Res1, - bool AddTo = true) { + bool AddTo = true) { SDValue To[] = { Res0, Res1 }; return CombineTo(N, To, 2, AddTo); } @@ -293,19 +293,19 @@ void TargetLowering::DAGCombinerInfo::AddToWorklist(SDNode *N) { } SDValue TargetLowering::DAGCombinerInfo:: -CombineTo(SDNode *N, const std::vector<SDValue> &To) { - return ((DAGCombiner*)DC)->CombineTo(N, &To[0], To.size()); +CombineTo(SDNode *N, const std::vector<SDValue> &To, bool AddTo) { + return ((DAGCombiner*)DC)->CombineTo(N, &To[0], To.size(), AddTo); } SDValue TargetLowering::DAGCombinerInfo:: -CombineTo(SDNode *N, SDValue Res) { - return ((DAGCombiner*)DC)->CombineTo(N, Res); +CombineTo(SDNode *N, SDValue Res, bool AddTo) { + return ((DAGCombiner*)DC)->CombineTo(N, Res, AddTo); } SDValue TargetLowering::DAGCombinerInfo:: -CombineTo(SDNode *N, SDValue Res0, SDValue Res1) { - return ((DAGCombiner*)DC)->CombineTo(N, Res0, Res1); +CombineTo(SDNode *N, SDValue Res0, SDValue Res1, bool AddTo) { + return ((DAGCombiner*)DC)->CombineTo(N, Res0, Res1, AddTo); } void TargetLowering::DAGCombinerInfo:: |