Index: gcc/expr.c =================================================================== --- gcc/expr.c (Revision 202295) +++ gcc/expr.c (Arbeitskopie) @@ -4641,8 +4641,6 @@ int unsignedp; int volatilep = 0; tree tem; - bool misalignp; - rtx mem = NULL_RTX; push_temp_slots (); tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, @@ -4664,14 +4662,10 @@ { enum machine_mode address_mode; rtx op0; - struct expand_operand ops[2]; addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (tem, 0)))); tree base = TREE_OPERAND (tem, 0); - misalignp = true; - to_rtx = gen_reg_rtx (mode); - address_mode = targetm.addr_space.address_mode (as); op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_NORMAL); op0 = convert_memory_address_addr_space (address_mode, op0, as); @@ -4682,28 +4676,14 @@ op0 = simplify_gen_binary (PLUS, address_mode, op0, off); } op0 = memory_address_addr_space (mode, op0, as); - mem = gen_rtx_MEM (mode, op0); - set_mem_attributes (mem, tem, 0); - set_mem_addr_space (mem, as); + to_rtx = gen_rtx_MEM (mode, op0); + set_mem_attributes (to_rtx, tem, 0); + set_mem_addr_space (to_rtx, as); if (TREE_THIS_VOLATILE (tem)) - MEM_VOLATILE_P (mem) = 1; - - /* If the misaligned store doesn't overwrite all bits, perform - rmw cycle on MEM. */ - if (bitsize != GET_MODE_BITSIZE (mode)) - { - create_input_operand (&ops[0], to_rtx, mode); - create_fixed_operand (&ops[1], mem); - /* The movmisalign pattern cannot fail, else the assignment - would silently be omitted. */ - expand_insn (icode, 2, ops); - - mem = copy_rtx (mem); - } + MEM_VOLATILE_P (to_rtx) = 1; } else { - misalignp = false; to_rtx = expand_normal (tem); } @@ -4851,17 +4831,6 @@ nontemporal); } - if (misalignp) - { - struct expand_operand ops[2]; - - create_fixed_operand (&ops[0], mem); - create_input_operand (&ops[1], to_rtx, mode); - /* The movmisalign pattern cannot fail, else the assignment - would silently be omitted. */ - expand_insn (icode, 2, ops); - } - if (result) preserve_temp_slots (result); free_temp_slots ();