[LSR] Canonicalize reg1 + ... + regN into reg1 + ... + 1*regN.
authorQuentin Colombet <qcolombet@apple.com>
Tue, 20 May 2014 19:25:04 +0000 (19:25 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Tue, 20 May 2014 19:25:04 +0000 (19:25 +0000)
commit50d4008b471858a5dace11cc046e997bb0cf95eb
tree3696acb33e18f797b596e0d60b6e43aac51ff391
parent8598e290c3ef00108d1e59871f7c2665be44273a
[LSR] Canonicalize reg1 + ... + regN into reg1 + ... + 1*regN.

This commit introduces a canonical representation for the formulae.
Basically, as soon as a formula has more that one base register, the scaled
register field is used for one of them. The register put into the scaled
register is preferably a loop variant.
The commit refactors how the formulae are built in order to produce such
representation.
This yields a more accurate, but still perfectible, cost model.

<rdar://problem/16731508>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209230 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/LoopStrengthReduce.cpp
test/CodeGen/X86/avoid_complex_am.ll
test/CodeGen/X86/masked-iv-safe.ll