https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62254
--- Comment #17 from Julien Margetts <jmargetts at ocz dot com> ---
The following test case still fails with the patch applied (originally bug
70362)
arm-none-eabi-gcc -march=armv3m -c -o c_compat_x_tst.o
gcc/testsuite/gcc.dg/compat/scalar-by-value-4_x.c
The assert in the added by the patch is firing:
/* The slot is out of range, or was dressed up in a SUBREG. */
base = reg_equiv_address (REGNO (ref));
+
+ /* PR 62554: If there is no equivalent memory location then just move
+ the value as an SImode register move. This happens when the target
+ architecure variant does not have an HImode register move. */
+ if (base == NULL)
+ {
+ gcc_assert (REG_P (operands[0])); <<<< FAIL >>>>
+ emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, operands[0], 0),
+ gen_rtx_SUBREG (SImode, ref, 0)));
+ return;
+ }
}
At this point I believe operands[0] is a QImode SUBREG