Eliminate common code from x86_32 TARGET_MACHO part in ix86_expand_move and use generic code instead.
No functional changes. gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_expand_move) [TARGET_MACHO]: Eliminate common code and use generic code instead. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32} and by Iain on i686-darwin9, i686 and x86_64-darwin17, x86_64-darwin19, 21, 23. Uros.
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 3b1685ae448..2210e6f7cc8 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -471,9 +471,9 @@ ix86_expand_move (machine_mode mode, rtx operands[]) if ((flag_pic || MACHOPIC_INDIRECT) && symbolic_operand (op1, mode)) { +#if TARGET_MACHO if (TARGET_MACHO && !TARGET_64BIT) { -#if TARGET_MACHO /* dynamic-no-pic */ if (MACHOPIC_INDIRECT) { @@ -490,33 +490,18 @@ ix86_expand_move (machine_mode mode, rtx operands[]) emit_insn (insn); return; } - if (GET_CODE (op0) == MEM) - op1 = force_reg (Pmode, op1); - else - { - rtx temp = op0; - if (GET_CODE (temp) != REG) - temp = gen_reg_rtx (Pmode); - temp = legitimize_pic_address (op1, temp); - if (temp == op0) - return; - op1 = temp; - } - /* dynamic-no-pic */ -#endif } - else +#endif + + if (MEM_P (op0)) + op1 = force_reg (mode, op1); + else if (!(TARGET_64BIT && x86_64_movabs_operand (op1, DImode))) { - if (MEM_P (op0)) - op1 = force_reg (mode, op1); - else if (!(TARGET_64BIT && x86_64_movabs_operand (op1, DImode))) - { - rtx reg = can_create_pseudo_p () ? NULL_RTX : op0; - op1 = legitimize_pic_address (op1, reg); - if (op0 == op1) - return; - op1 = convert_to_mode (mode, op1, 1); - } + rtx reg = can_create_pseudo_p () ? NULL_RTX : op0; + op1 = legitimize_pic_address (op1, reg); + if (op0 == op1) + return; + op1 = convert_to_mode (mode, op1, 1); } } else