Commit c4b9a87e by Easwaran Raman Committed by Easwaran Raman

re PR rtl-optimization/49429 (dse.c change (r175063) causes execution failures)

2011-06-24  Easwaran Raman  <eraman@google.com>

      PR rtl-optimization/49429
      PR target/49454
      * expr.c (emit_block_move_hints):  Mark MEM_EXPR(x) and
      MEM_EXPR(y) addressable if emit_block_move_via_libcall is
      used to copy y into x.
      * calls.c (initialize_argument_information): Mark
      an argument addressable if it is passed by invisible reference.
      (emit_library_call_value_1): Mark  MEM_EXPR (val) addressable
      if it is passed by reference.

From-SVN: r175384
parent 1f134bd6
2011-06-24 Easwaran Raman <eraman@google.com>
PR rtl-optimization/49429
PR target/49454
* expr.c (emit_block_move_hints): Mark MEM_EXPR(x) and
MEM_EXPR(y) addressable if emit_block_move_via_libcall is
used to copy y into x.
* calls.c (initialize_argument_information): Mark
an argument addressable if it is passed by invisible reference.
(emit_library_call_value_1): Mark MEM_EXPR (val) addressable
if it is passed by reference.
2011-06-24 H.J. Lu <hongjiu.lu@intel.com> 2011-06-24 H.J. Lu <hongjiu.lu@intel.com>
PR rtl-optimization/49504 PR rtl-optimization/49504
......
...@@ -1084,6 +1084,8 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, ...@@ -1084,6 +1084,8 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
&& TREE_CODE (base) != SSA_NAME && TREE_CODE (base) != SSA_NAME
&& (!DECL_P (base) || MEM_P (DECL_RTL (base))))) && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
{ {
mark_addressable (args[i].tree_value);
/* We can't use sibcalls if a callee-copied argument is /* We can't use sibcalls if a callee-copied argument is
stored in the current function's frame. */ stored in the current function's frame. */
if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base)) if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base))
...@@ -3524,7 +3526,12 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, ...@@ -3524,7 +3526,12 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
} }
if (MEM_P (val) && !must_copy) if (MEM_P (val) && !must_copy)
slot = val; {
tree val_expr = MEM_EXPR (val);
if (val_expr)
mark_addressable (val_expr);
slot = val;
}
else else
{ {
slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0), slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
......
...@@ -1181,8 +1181,19 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method, ...@@ -1181,8 +1181,19 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method,
else if (may_use_call else if (may_use_call
&& ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x)) && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (x))
&& ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (y))) && ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (y)))
retval = emit_block_move_via_libcall (x, y, size, {
method == BLOCK_OP_TAILCALL); /* Since x and y are passed to a libcall, mark the corresponding
tree EXPR as addressable. */
tree y_expr = MEM_EXPR (y);
tree x_expr = MEM_EXPR (x);
if (y_expr)
mark_addressable (y_expr);
if (x_expr)
mark_addressable (x_expr);
retval = emit_block_move_via_libcall (x, y, size,
method == BLOCK_OP_TAILCALL);
}
else else
emit_block_move_via_loop (x, y, size, align); emit_block_move_via_loop (x, y, size, align);
......
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