diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-02-23 00:13:58 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-02-23 00:13:58 +0000 |
commit | 224ec39cab5298cfd196c0b5d2ac4825f8e2ab12 (patch) | |
tree | 635104ae92cd410d5670ad16c81b7e2c727d6db3 | |
parent | 4ba9cd53bae1d989bf1f620e301eae0c7b497791 (diff) |
X86 codegen tweak to use lea in another case:
Suppose base == %eax and it has multiple uses, then instead of
movl %eax, %ecx
addl $8, %ecx
use
leal 8(%eax), %ecx.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26323 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86ISelDAGToDAG.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 4b1e9d2faa..bea35ec3c8 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -457,23 +457,19 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base, SDOperand &Index, SDOperand &Disp) { X86ISelAddressMode AM; if (!MatchAddress(N, AM)) { - bool SelectBase = false; bool SelectIndex = false; bool Check = false; if (AM.BaseType == X86ISelAddressMode::RegBase) { - if (AM.Base.Reg.Val) { - Check = true; - SelectBase = true; - } else { + if (AM.Base.Reg.Val) + Check = true; + else AM.Base.Reg = CurDAG->getRegister(0, MVT::i32); - } } - if (AM.IndexReg.Val) { + if (AM.IndexReg.Val) SelectIndex = true; - } else { + else AM.IndexReg = CurDAG->getRegister(0, MVT::i32); - } if (Check) { unsigned Complexity = 0; @@ -485,6 +481,13 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base, Complexity++; else if (AM.Disp > 1) Complexity++; + // Suppose base == %eax and it has multiple uses, then instead of + // movl %eax, %ecx + // addl $8, %ecx + // use + // leal 8(%eax), %ecx. + if (AM.Base.Reg.Val->use_size() > 1) + Complexity++; if (Complexity <= 1) return false; } |