diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b9ac0e76c183fc9543cfbb9720652dac7d0fe826..055cc2e25fb6ec20385538bd97aa30e6c8f7a0e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-01-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/51782 + * expr.c (expand_assignment): Take address-space information + from the address operand of MEM_REF and TARGET_MEM_REF. + (expand_expr_real_1): Likewise. + 2012-01-17 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * ira.c (do_reload): Make sure ira_dump_file is re-set if no diff --git a/gcc/expr.c b/gcc/expr.c index c5162692241634b1f6d7aef7e3b4092d8669d2d7..fb93346eb9932a7a3fafb4b62c9931c93ac6e957 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4590,7 +4590,7 @@ expand_assignment (tree to, tree from, bool nontemporal) if (TREE_CODE (to) == MEM_REF) { addr_space_t as - = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (to, 1)))); + = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (to, 0)))); tree base = TREE_OPERAND (to, 0); address_mode = targetm.addr_space.address_mode (as); op0 = expand_expr (base, NULL_RTX, VOIDmode, EXPAND_NORMAL); @@ -4608,7 +4608,8 @@ expand_assignment (tree to, tree from, bool nontemporal) } else if (TREE_CODE (to) == TARGET_MEM_REF) { - addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (to)); + addr_space_t as + = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (to, 0)))); struct mem_address addr; get_address_description (to, &addr); @@ -9253,7 +9254,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case TARGET_MEM_REF: { - addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (exp)); + addr_space_t as + = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))); struct mem_address addr; enum insn_code icode; unsigned int align; @@ -9288,7 +9290,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case MEM_REF: { addr_space_t as - = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1)))); + = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))); enum machine_mode address_mode; tree base = TREE_OPERAND (exp, 0); gimple def_stmt;