diff options
author | Richard Biener <rguenther@suse.de> | 2024-11-27 13:36:19 +0100 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-12-05 15:53:03 +0100 |
commit | dc0dea98c96e02c6b24060170bc88da8d4931bc2 (patch) | |
tree | ccbc11c70dcd6c5d96884bcded0054b949a2bf41 /libcpp | |
parent | 0368c42507328774cadbea589509b95aaf3cb826 (diff) | |
download | gcc-dc0dea98c96e02c6b24060170bc88da8d4931bc2.zip gcc-dc0dea98c96e02c6b24060170bc88da8d4931bc2.tar.gz gcc-dc0dea98c96e02c6b24060170bc88da8d4931bc2.tar.bz2 |
middle-end/117801 - failed register coalescing due to GIMPLE schedule
For a TSVC testcase we see failed register coalescing due to a
different schedule of GIMPLE .FMA and stores fed by it. This
can be mitigated by making direct internal functions participate
in TER - given we're using more and more of such functions to
expose target capabilities it seems to be a natural thing to not
exempt those.
Unfortunately the internal function expanding API doesn't match
what we usually have - passing in a target and returning an RTX
but instead the LHS of the call is expanded and written to. This
makes the TER expansion of a call SSA def a bit unwieldly.
Bootstrapped and tested on x86_64-unknown-linux-gnu.
The ccmp changes have likely not seen any coverage, the debug stmt
changes might not be optimal, we might end up losing on replaceable
calls.
PR middle-end/117801
* tree-outof-ssa.cc (ssa_is_replaceable_p): Make
direct internal function calls replaceable.
* expr.cc (get_def_for_expr): Handle replacements with calls.
(get_def_for_expr_class): Likewise.
(optimize_bitfield_assignment_op): Likewise.
(expand_expr_real_1): Likewise. Properly expand direct
internal function defs.
* cfgexpand.cc (expand_call_stmt): Handle replacements with calls.
(avoid_deep_ter_for_debug): Likewise, always create a debug temp
for calls.
(expand_debug_expr): Likewise, give up for calls.
(expand_gimple_basic_block): Likewise.
* ccmp.cc (ccmp_candidate_p): Likewise.
(get_compare_parts): Likewise.
Diffstat (limited to 'libcpp')
0 files changed, 0 insertions, 0 deletions