Commit 3aabdc00 by Eric Botcazou Committed by Eric Botcazou

expr.c (expand_expr_real_1): Use the expression to set the memory attributes in…

expr.c (expand_expr_real_1): Use the expression to set the memory attributes in all cases but clear MEM_EXPR...

	* expr.c (expand_expr_real_1) <normal_inner_ref>: Use the expression to
	set the memory attributes in all cases but clear MEM_EXPR if need be.

From-SVN: r219648
parent 04d8b4dc
2015-01-15 Eric Botcazou <ebotcazou@adacore.com>
* expr.c (expand_expr_real_1) <normal_inner_ref>: Use the expression to
set the memory attributes in all cases but clear MEM_EXPR if need be.
2015-01-15 Yuri Rumyantsev <ysrumyan@gmail.com> 2015-01-15 Yuri Rumyantsev <ysrumyan@gmail.com>
PR tree-optimization/64434 PR tree-optimization/64434
......
...@@ -10137,7 +10137,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, ...@@ -10137,7 +10137,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
&mode1, &unsignedp, &volatilep, true); &mode1, &unsignedp, &volatilep, true);
rtx orig_op0, memloc; rtx orig_op0, memloc;
bool mem_attrs_from_type = false; bool clear_mem_expr = false;
/* If we got back the original object, something is wrong. Perhaps /* If we got back the original object, something is wrong. Perhaps
we are evaluating an expression too early. In any event, don't we are evaluating an expression too early. In any event, don't
...@@ -10233,7 +10233,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, ...@@ -10233,7 +10233,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
memloc = assign_temp (TREE_TYPE (tem), 1, 1); memloc = assign_temp (TREE_TYPE (tem), 1, 1);
emit_move_insn (memloc, op0); emit_move_insn (memloc, op0);
op0 = memloc; op0 = memloc;
mem_attrs_from_type = true; clear_mem_expr = true;
} }
if (offset) if (offset)
...@@ -10417,17 +10417,17 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, ...@@ -10417,17 +10417,17 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
if (op0 == orig_op0) if (op0 == orig_op0)
op0 = copy_rtx (op0); op0 = copy_rtx (op0);
/* If op0 is a temporary because of forcing to memory, pass only the
type to set_mem_attributes so that the original expression is never
marked as ADDRESSABLE through MEM_EXPR of the temporary. */
if (mem_attrs_from_type)
set_mem_attributes (op0, type, 0);
else
set_mem_attributes (op0, exp, 0); set_mem_attributes (op0, exp, 0);
if (REG_P (XEXP (op0, 0))) if (REG_P (XEXP (op0, 0)))
mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0)); mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0));
/* If op0 is a temporary because the original expressions was forced
to memory, clear MEM_EXPR so that the original expression cannot
be marked as addressable through MEM_EXPR of the temporary. */
if (clear_mem_expr)
set_mem_expr (op0, NULL_TREE);
MEM_VOLATILE_P (op0) |= volatilep; MEM_VOLATILE_P (op0) |= volatilep;
if (mode == mode1 || mode1 == BLKmode || mode1 == tmode if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
|| modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_CONST_ADDRESS
......
2015-01-15 Eric Botcazou <ebotcazou@adacore.com>
* expr.c (expand_expr_real_1) <normal_inner_ref>: Use the expression to
set the memory attributes in all cases but clear MEM_EXPR if need be.
2015-01-15 Richard Biener <rguenther@suse.de> 2015-01-15 Richard Biener <rguenther@suse.de>
PR lto/64415 PR lto/64415
......
-- { dg-do run { target i?86-*-* x86_64-*-* alpha*-*-* ia64-*-* } }
-- { dg-options "-O2" }
with Ada.Characters.Handling; use Ada.Characters.Handling;
with Interfaces; use Interfaces;
with Ada.Unchecked_Conversion;
procedure Opt47 is
subtype String4 is String (1 .. 4);
function To_String4 is new Ada.Unchecked_Conversion (Unsigned_32, String4);
type Arr is array (Integer range <>) of Unsigned_32;
Leaf : Arr (1 .. 4) := (1349478766, 1948272498, 1702436946, 1702061409);
Value : Unsigned_32;
Result : String (1 .. 32);
Last : Integer := 0;
begin
for I in 1 .. 4 loop
Value := Leaf (I);
for J in reverse String4'Range loop
if Is_Graphic (To_String4 (Value)(J)) then
Last := Last + 1;
Result (Last) := To_String4 (Value)(J);
end if;
end loop;
end loop;
if Result (1) /= 'P' then
raise Program_Error;
end if;
end;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment