mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 23:29:20 +00:00
Add a note about integer multiplication by constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28551 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e6ad27e917
commit
5a622f2e06
@ -622,3 +622,30 @@ How about implementing truncate / anyext as a property of machine instruction
|
||||
operand? i.e. Print as 32-bit super-class register / 16-bit sub-class register.
|
||||
Do this for the cases where a truncate / anyext is guaranteed to be eliminated.
|
||||
For IA32 that is truncate from 32 to 16 and anyext from 16 to 32.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
For this:
|
||||
|
||||
int test(int a)
|
||||
{
|
||||
return a * 3;
|
||||
}
|
||||
|
||||
We currently emits
|
||||
imull $3, 4(%esp), %eax
|
||||
|
||||
Perhaps this is what we really should generate is? Is imull three or four
|
||||
cycles? Note: ICC generates this:
|
||||
movl 4(%esp), %eax
|
||||
leal (%eax,%eax,2), %eax
|
||||
|
||||
The current instruction priority is based on pattern complexity. The former is
|
||||
more "complex" because it folds a load so the latter will not be emitted.
|
||||
|
||||
Perhaps we should use AddedComplexity to give LEA32r a higher priority? We
|
||||
should always try to match LEA first since the LEA matching code does some
|
||||
estimate to determine whether the match is profitable.
|
||||
|
||||
However, if we care more about code size, then imull is better. It's two bytes
|
||||
shorter than movl + leal.
|
||||
|
Loading…
x
Reference in New Issue
Block a user