Some insns, which operate on SImode operands, output assembler template
that comprise of multiple instructions using HImode operands. To access
the high word of an SImode operand, an operand selector '%H' is used to
offset the operand value by a constant amount.
When one of these HImode operands is a memory reference to a post_inc,
the address does not need to be offset, since the preceding instruction
has already offset the address to the correct value.
This fixes an ICE in change_address_1, at emit-rtl.c:2318 for
gcc.c-torture/execute/pr20527-1.c in the "-mlarge -O2 -flto
-fuse-linker-plugin -fno-fat-lto-objects" configuration.
This test generated the following insn, and the attempt to output the
high part of the post_inc address caused the ICE.
(set (reg:SI 6 R6)
(minus:SI (reg:SI 6 R6)
(mem:SI (post_inc:PSI (reg:PSI 10 R10)) {subsi3}
gcc/ChangeLog:
2020-04-13 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.c (msp430_print_operand): Don't add offsets to
memory references in %B, %C and %D operand selectors when the inner
operand is a post increment address.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| README.txt | Loading commit data... | |
| constraints.md | Loading commit data... | |
| driver-msp430.c | Loading commit data... | |
| msp430-c.c | Loading commit data... | |
| msp430-devices.c | Loading commit data... | |
| msp430-devices.h | Loading commit data... | |
| msp430-modes.def | Loading commit data... | |
| msp430-opts.h | Loading commit data... | |
| msp430-protos.h | Loading commit data... | |
| msp430.c | Loading commit data... | |
| msp430.h | Loading commit data... | |
| msp430.md | Loading commit data... | |
| msp430.opt | Loading commit data... | |
| predicates.md | Loading commit data... | |
| t-msp430 | Loading commit data... |