+2019-09-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/91604
+ * config/i386/i386-expand.c (split_double_mode): If there is more than
+ one MEM operand and they are rtx_equal_p, reuse lo_half/hi_half from
+ already split matching MEM operand instead of calling adjust_address
+ again.
+
2019-09-03 Ulrich Weigand <uweigand@de.ibm.com>
* config.gcc: Obsolete spu target. Remove references to spu.
{
machine_mode half_mode;
unsigned int byte;
+ rtx mem_op = NULL_RTX;
+ int mem_num = 0;
switch (mode)
{
but we still have to handle it. */
if (MEM_P (op))
{
- lo_half[num] = adjust_address (op, half_mode, 0);
- hi_half[num] = adjust_address (op, half_mode, byte);
+ if (mem_op && rtx_equal_p (op, mem_op))
+ {
+ lo_half[num] = lo_half[mem_num];
+ hi_half[num] = hi_half[mem_num];
+ }
+ else
+ {
+ mem_op = op;
+ mem_num = num;
+ lo_half[num] = adjust_address (op, half_mode, 0);
+ hi_half[num] = adjust_address (op, half_mode, byte);
+ }
}
else
{
+2019-09-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/91604
+ * gcc.target/i386/pr91604.c: New test.
+
2019-09-03 Ulrich Weigand <uweigand@de.ibm.com>
* lib/compat.exp: Remove references to spu.