This one line patch is a pre-requisite to a solution to PR target/123506;
an effort to improve middle-end code for returning structures.  Currently,
emit_group_load_1 contains code to handle a CONCAT returned by force_reg.
This tweak avoids the call for force_reg if the source is already a CONCAT,
which allows this subroutine to be re-used by target-specific
implementations
of emit_group_load.  Because this change has a chance of affecting code
generation on obscure platforms, I was hoping that Jeff (and others?) might
be able to test this change on their build farms.  Pretty please.

This patch has been tested on x86_64-pc-linux-gnu with make bootstrap
and make -k check, both with and without --target_board=unix{-m32}
with no new failures.  Ok for mainline?


2026-01-25  Roger Sayle  <[email protected]>

gcc/ChangeLog
        * expr.cc (emit_group_load_1): Don't call force_reg if orig_src
        is already a CONCAT.


Thanks in advance,
Roger
--

diff --git a/gcc/expr.cc b/gcc/expr.cc
index 7d84ad9e6fc..0606536c34a 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -3038,6 +3038,7 @@ emit_group_load_1 (rtx *tmps, rtx dst, rtx orig_src, tree 
type,
       src = orig_src;
       if (!MEM_P (orig_src)
          && (!REG_P (orig_src) || HARD_REGISTER_P (orig_src))
+         && GET_CODE (orig_src) != CONCAT
          && !CONSTANT_P (orig_src))
        {
          gcc_assert (GET_MODE (orig_src) != VOIDmode);

Reply via email to