diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2017-03-27 12:56:14 +0200 |
---|---|---|
committer | Claudiu Zissulescu <claziss@gcc.gnu.org> | 2017-03-27 12:56:14 +0200 |
commit | ac2551850669c3013b1b6e142a167060328ff52d (patch) | |
tree | 932a01f52bdd5ce1ba609e7395383d4da83390bf /gcc/system.h | |
parent | 84804c5b47636c7fa8bbbd1481ed426f2efc2654 (diff) | |
download | gcc-ac2551850669c3013b1b6e142a167060328ff52d.zip gcc-ac2551850669c3013b1b6e142a167060328ff52d.tar.gz gcc-ac2551850669c3013b1b6e142a167060328ff52d.tar.bz2 |
[ARC] Fix detection of long immediate for load/store operands.
ARC can use scaled offsets when loading (i.e. ld.as rA,[base,
offset]). Where base and offset can be a register or an immediate
operand. The scaling only applies on the offset part of the
instruction. The compiler can accept an address like this:
(plus:SI (mult:SI (reg:SI 2 r2 [orig:596 _2129 ] [596])
(const_int 4 [0x4]))
(const_int 60 [0x3c]))
Hence, to emit this instruction we place the (const_int 60) into base
and the register into offset to take advantage of the scaled offset
facility of the load instruction. As a result the length of the load
instruction is 8 bytes. However, the long_immediate_loadstore_operand
predicate used for calculating the length attribute doesn't recognize
this address and returns a wrong decision leading to a wrong length
computation for a load instruction using the above address.
gcc/
2017-03-27 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/predicates.md (long_immediate_loadstore_operand):
Consider scaled addresses cases.
From-SVN: r246496
Diffstat (limited to 'gcc/system.h')
0 files changed, 0 insertions, 0 deletions