[Bug rtl-optimization/15473] Sibcall optimization for libcalls.

2021-08-14 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15473

Andrew Pinski  changed:

   What|Removed |Added

 CC||nsz at gcc dot gnu.org

--- Comment #6 from Andrew Pinski  ---
*** Bug 95966 has been marked as a duplicate of this bug. ***

[Bug rtl-optimization/15473] Sibcall optimization for libcalls.

2015-09-08 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15473

H.J. Lu  changed:

   What|Removed |Added

 CC||hjl.tools at gmail dot com
Version|4.0.0   |6.0

--- Comment #5 from H.J. Lu  ---
Some libcalls are expanded in

static rtx
expand_builtin_unop (machine_mode target_mode, tree exp, rtx target,
 rtx subtarget, optab op_optab)
{
  rtx op0;

  if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
return NULL_RTX;

  /* Compute the argument.  */
  op0 = expand_expr (CALL_EXPR_ARG (exp, 0),
 (subtarget
  && (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0)))
  == GET_MODE (subtarget))) ? subtarget : NULL_RTX,
 VOIDmode, EXPAND_NORMAL);
  /* Compute op, into TARGET if possible.
 Set TARGET to wherever the result comes back.  */
  target = expand_unop (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0))),
op_optab, op0, target, op_optab != clrsb_optab);
  gcc_assert (target);

  return convert_to_mode (target_mode, target, 0);
}

which doesn't go through expand_call.


[Bug rtl-optimization/15473] Sibcall optimization for libcalls.

2007-10-09 Thread chrbr at gcc dot gnu dot org


--- Comment #4 from chrbr at gcc dot gnu dot org  2007-10-09 08:36 ---
*** Bug 32684 has been marked as a duplicate of this bug. ***


-- 

chrbr at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||pinskia at gcc dot gnu dot
   ||org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15473



[Bug rtl-optimization/15473] Sibcall optimization for libcalls.

2007-09-03 Thread chrbr at gcc dot gnu dot org


--- Comment #3 from chrbr at gcc dot gnu dot org  2007-09-03 13:24 ---
this report is quite old, but worth to pop :

We found similar problems with implicit memory block copying when using struct
copying by value. (frequent in C++ )

Softfloat architectures making a very extensive use of libcalls are also very
sensitive to this lost optimisation (it is a performance regression since the
optimisation was correctly done with a gcc 3.4.3). The rtl was then emitted
both for normal calls and sibling calls and stored in a "placeholder". The
placeholder was decided to be emitted after all the stmts were expanded. Since
gcc 4.0 the placeholders have disapeared so we lost the ability to optimise
libcalls in the backend.

I will try to make use of the cfg information available in expand to decide if 
we can pass BLOCK_OP_TAILCALL to emit_block_move. I expect that libcalls can
share the same interface. 


-- 

chrbr at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||chrbr at gcc dot gnu dot org
   Last reconfirmed|2006-03-01 02:40:48 |2007-09-03 13:24:57
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15473