Commit Graph

4 Commits

Author SHA1 Message Date
James Molloy b2500d2186 [ARM] ADD with a negative offset can become SUB for free
So model that directly in TTI::getIntImmCost().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281044 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-09 13:35:36 +00:00
James Molloy f53c395722 [ARM] icmp %x, -C can be lowered to a simple ADDS or CMN
Tell TargetTransformInfo about this so ConstantHoisting is informed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281043 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-09 13:35:28 +00:00
James Molloy ac84ac058a [Thumb1] AND with a constant operand can be converted into BIC
So model the cost of materializing the constant operand C as the minimum of
C and ~C.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280929 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-08 12:58:12 +00:00
James Molloy 210e77be29 [Thumb1] Fix cost calculation for complemented immediates
Materializing something like "-3" can be done as 2 instructions:
  MOV r0, #3
  MVN r0, r0

This has a cost of 2, not 3. It looks like we were already trying to detect this pattern in TII::getIntImmCost(), but were taking the complement of the zero-extended value instead of the sign-extended value which is unlikely to ever produce a number < 256.

There were no tests failing after changing this... :/

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280928 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-08 12:58:04 +00:00