]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Remove file that shouldn't have been committed.
authorJakub Jelinek <jakub@redhat.com>
Fri, 5 Sep 2025 09:29:35 +0000 (11:29 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 5 Sep 2025 09:29:35 +0000 (11:29 +0200)
2025-09-05  Jakub Jelinek  <jakub@redhat.com>

* J: Remove.

gcc/J [deleted file]

diff --git a/gcc/J b/gcc/J
deleted file mode 100644 (file)
index 33fba18..0000000
--- a/gcc/J
+++ /dev/null
@@ -1,1545 +0,0 @@
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    1) /* Code for RTL register eliminations.
-6441eb6dc020f gcc/lra-eliminations.cc (Jakub Jelinek       2025-01-02 11:59:57 +0100    2)    Copyright (C) 2010-2025 Free Software Foundation, Inc.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    3)    Contributed by Vladimir Makarov <vmakarov@redhat.com>.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    4) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    5) This file is part of GCC.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    6) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    7) GCC is free software; you can redistribute it and/or modify it under
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    8) the terms of the GNU General Public License as published by the Free
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000    9) Software Foundation; either version 3, or (at your option) any later
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   10) version.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   11) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   12) GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   13) WARRANTY; without even the implied warranty of MERCHANTABILITY or
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   14) FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   15) for more details.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   16) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   17) You should have received a copy of the GNU General Public License
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   18) along with GCC; see the file COPYING3.      If not see
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   19) <http://www.gnu.org/licenses/>.      */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   20) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   21) /* Eliminable registers (like a soft argument or frame pointer) are
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   22)    widely used in RTL.  These eliminable registers should be replaced
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   23)    by real hard registers (like the stack pointer or hard frame
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   24)    pointer) plus some offset.  The offsets usually change whenever the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   25)    stack is expanded.  We know the final offsets only at the very end
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   26)    of LRA.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   27) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   28)    Within LRA, we usually keep the RTL in such a state that the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   29)    eliminable registers can be replaced by just the corresponding hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   30)    register (without any offset).  To achieve this we should add the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   31)    initial elimination offset at the beginning of LRA and update the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   32)    offsets whenever the stack is expanded.  We need to do this before
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   33)    every constraint pass because the choice of offset often affects
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   34)    whether a particular address or memory constraint is satisfied.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   35) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   36)    We keep RTL code at most time in such state that the virtual
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   37)    registers can be changed by just the corresponding hard registers
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   38)    (with zero offsets) and we have the right RTL code.      To achieve this
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   39)    we should add initial offset at the beginning of LRA work and update
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   40)    offsets after each stack expanding.      But actually we update virtual
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   41)    registers to the same virtual registers + corresponding offsets
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   42)    before every constraint pass because it affects constraint
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   43)    satisfaction (e.g. an address displacement became too big for some
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   44)    target).
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   45) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   46)    The final change of eliminable registers to the corresponding hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   47)    registers are done at the very end of LRA when there were no change
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   48)    in offsets anymore:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   49) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   50)                  fp + 42     =>     sp + 42
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   51) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   52) */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   53) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   54) #include "config.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   55) #include "system.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   56) #include "coretypes.h"
-c7131fb2b58ab gcc/lra-eliminations.c  (Andrew MacLeod      2015-07-08 00:53:03 +0000   57) #include "backend.h"
-957060b5c5d27 gcc/lra-eliminations.c  (Andrew MacLeod      2015-10-29 13:57:32 +0000   58) #include "target.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   59) #include "rtl.h"
-957060b5c5d27 gcc/lra-eliminations.c  (Andrew MacLeod      2015-10-29 13:57:32 +0000   60) #include "tree.h"
-c7131fb2b58ab gcc/lra-eliminations.c  (Andrew MacLeod      2015-07-08 00:53:03 +0000   61) #include "df.h"
-4d0cdd0ce64e8 gcc/lra-eliminations.c  (Thomas Preud'homme  2016-10-13 14:17:52 +0000   62) #include "memmodel.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   63) #include "tm_p.h"
-957060b5c5d27 gcc/lra-eliminations.c  (Andrew MacLeod      2015-10-29 13:57:32 +0000   64) #include "optabs.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   65) #include "regs.h"
-957060b5c5d27 gcc/lra-eliminations.c  (Andrew MacLeod      2015-10-29 13:57:32 +0000   66) #include "ira.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   67) #include "recog.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   68) #include "output.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   69) #include "rtl-error.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   70) #include "lra-int.h"
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   71) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   72) /* This structure is used to record information about hard register
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   73)    eliminations.  */
-6c1dae73cd2ce gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 16:36:00 +0000   74) class lra_elim_table
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   75) {
-6c1dae73cd2ce gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 16:36:00 +0000   76) public:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   77)   /* Hard register number to be eliminated.  */
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000   78)   int from;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   79)   /* Hard register number used as replacement.      */
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000   80)   int to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   81)   /* Difference between values of the two hard registers above on
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   82)      previous iteration.  */
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000   83)   poly_int64 previous_offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   84)   /* Difference between the values on the current iteration.  */
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000   85)   poly_int64 offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   86)   /* Nonzero if this elimination can be done.  */
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000   87)   bool can_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   88)   /* CAN_ELIMINATE since the last check.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   89)   bool prev_can_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   90)   /* REG rtx for the register to be eliminated.      We cannot simply
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   91)      compare the number since we might then spuriously replace a hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   92)      register corresponding to a pseudo assigned to the reg to be
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   93)      eliminated.  */
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000   94)   rtx from_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   95)   /* REG rtx for the replacement.  */
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000   96)   rtx to_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   97) };
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   98) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000   99) /* The elimination table.  Each array entry describes one possible way
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  100)    of eliminating a register in favor of another.  If there is more
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  101)    than one way of eliminating a particular register, the most
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  102)    preferred should be specified first.      */
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  103) static class lra_elim_table *reg_eliminate = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  104) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  105) /* This is an intermediate structure to initialize the table.  It has
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  106)    exactly the members provided by ELIMINABLE_REGS.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  107) static const struct elim_table_1
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  108) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  109)   const int from;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  110)   const int to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  111) } reg_eliminate_1[] =
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  112) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  113)   ELIMINABLE_REGS;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  114) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  115) #define NUM_ELIMINABLE_REGS ARRAY_SIZE (reg_eliminate_1)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  116) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  117) /* Print info about elimination table to file F.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  118) static void
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  119) print_elim_table (FILE *f)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  120) {
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  121)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  122) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  123)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  124)     {
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  125)       fprintf (f, "%s eliminate %d to %d (offset=",
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  126)            ep->can_eliminate ? "Can" : "Can't", ep->from, ep->to);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  127)       print_dec (ep->offset, f);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  128)       fprintf (f, ", prev_offset=");
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  129)       print_dec (ep->previous_offset, f);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  130)       fprintf (f, ")\n");
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  131)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  132) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  133) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  134) /* Print info about elimination table to stderr.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  135) void
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  136) lra_debug_elim_table (void)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  137) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  138)   print_elim_table (stderr);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  139) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  140) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  141) /* Setup possibility of elimination in elimination table element EP to
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  142)    VALUE.  Setup FRAME_POINTER_NEEDED if elimination from frame
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  143)    pointer to stack pointer is not possible anymore.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  144) static void
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  145) setup_can_eliminate (class lra_elim_table *ep, bool value)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  146) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  147)   ep->can_eliminate = ep->prev_can_eliminate = value;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  148)   if (! value
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  149)       && ep->from == FRAME_POINTER_REGNUM && ep->to == STACK_POINTER_REGNUM)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  150)     frame_pointer_needed = 1;
-d303ff9764d32 gcc/lra-eliminations.c  (H.J. Lu             2015-02-04 12:02:21 -0800  151)   if (!frame_pointer_needed)
-d303ff9764d32 gcc/lra-eliminations.c  (H.J. Lu             2015-02-04 12:02:21 -0800  152)     REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  153) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  154) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  155) /* Map: eliminable "from" register -> its current elimination,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  156)    or NULL if none.  The elimination table may contain more than
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  157)    one elimination for the same hard register, but this map specifies
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  158)    the one that we are currently using.  */
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  159) static class lra_elim_table *elimination_map[FIRST_PSEUDO_REGISTER];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  160) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  161) /* When an eliminable hard register becomes not eliminable, we use the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  162)    following special structure to restore original offsets for the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  163)    register.  */
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  164) static class lra_elim_table self_elim_table;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  165) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  166) /* Offsets should be used to restore original offsets for eliminable
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  167)    hard register which just became not eliminable.  Zero,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  168)    otherwise.  */
-eaa41a6dc127d gcc/lra-eliminations.cc (Richard Sandiford   2023-09-29 17:55:12 +0100  169) static poly_int64 self_elim_offsets[FIRST_PSEUDO_REGISTER];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  170) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  171) /* Map: hard regno -> RTL presentation.      RTL presentations of all
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  172)    potentially eliminable hard registers are stored in the map.      */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  173) static rtx eliminable_reg_rtx[FIRST_PSEUDO_REGISTER];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  174) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  175) /* Set up ELIMINATION_MAP of the currently used eliminations.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  176) static void
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  177) setup_elimination_map (void)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  178) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  179)   int i;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  180)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  181) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  182)   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  183)     elimination_map[i] = NULL;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  184)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  185)     if (ep->can_eliminate && elimination_map[ep->from] == NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  186)       elimination_map[ep->from] = ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  187) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  188) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  189) \f
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  190) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  191) /* Compute the sum of X and Y, making canonicalizations assumed in an
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  192)    address, namely: sum constant integers, surround the sum of two
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  193)    constants with a CONST, put the constant as the second operand, and
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  194)    group the constant on the outermost sum.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  195) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  196)    This routine assumes both inputs are already in canonical form.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  197) static rtx
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  198) form_sum (rtx x, rtx y)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  199) {
-ef4bddc299eae gcc/lra-eliminations.c  (Richard Sandiford   2014-10-29 12:02:45 +0000  200)   machine_mode mode = GET_MODE (x);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  201)   poly_int64 offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  202) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  203)   if (mode == VOIDmode)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  204)     mode = GET_MODE (y);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  205) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  206)   if (mode == VOIDmode)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  207)     mode = Pmode;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  208) 
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  209)   if (poly_int_rtx_p (x, &offset))
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  210)     return plus_constant (mode, y, offset);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  211)   else if (poly_int_rtx_p (y, &offset))
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  212)     return plus_constant (mode, x, offset);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  213)   else if (CONSTANT_P (x))
-4e1952ab19938 gcc/lra-eliminations.c  (Kyrylo Tkachov      2015-07-24 16:46:04 +0000  214)     std::swap (x, y);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  215) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  216)   if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  217)     return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  218) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  219)   /* Note that if the operands of Y are specified in the opposite
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  220)      order in the recursive calls below, infinite recursion will
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  221)      occur.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  222)   if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  223)     return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  224) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  225)   /* If both constant, encapsulate sum.      Otherwise, just form sum.  A
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  226)      constant will have been placed second.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  227)   if (CONSTANT_P (x) && CONSTANT_P (y))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  228)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  229)       if (GET_CODE (x) == CONST)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  230)     x = XEXP (x, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  231)       if (GET_CODE (y) == CONST)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  232)     y = XEXP (y, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  233) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  234)       return gen_rtx_CONST (VOIDmode, gen_rtx_PLUS (mode, x, y));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  235)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  236) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  237)   return gen_rtx_PLUS (mode, x, y);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  238) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  239) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  240) /* Return the current substitution hard register of the elimination of
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  241)    HARD_REGNO.      If HARD_REGNO is not eliminable, return itself.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  242) int
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  243) lra_get_elimination_hard_regno (int hard_regno)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  244) {
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  245)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  246) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  247)   if (hard_regno < 0 || hard_regno >= FIRST_PSEUDO_REGISTER)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  248)     return hard_regno;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  249)   if ((ep = elimination_map[hard_regno]) == NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  250)     return hard_regno;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  251)   return ep->to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  252) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  253) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  254) /* Return elimination which will be used for hard reg REG, NULL
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  255)    otherwise.  */
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  256) static class lra_elim_table *
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  257) get_elimination (rtx reg)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  258) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  259)   int hard_regno;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  260)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  261) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  262)   lra_assert (REG_P (reg));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  263)   if ((hard_regno = REGNO (reg)) < 0 || hard_regno >= FIRST_PSEUDO_REGISTER)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  264)     return NULL;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  265)   if ((ep = elimination_map[hard_regno]) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  266)     return ep->from_rtx != reg ? NULL : ep;
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  267)   poly_int64 offset = self_elim_offsets[hard_regno];
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  268)   if (known_eq (offset, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  269)     return NULL;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  270)   /* This is an iteration to restore offsets just after HARD_REGNO
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  271)      stopped to be eliminable.      */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  272)   self_elim_table.from = self_elim_table.to = hard_regno;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  273)   self_elim_table.from_rtx
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  274)     = self_elim_table.to_rtx
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  275)     = eliminable_reg_rtx[hard_regno];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  276)   lra_assert (self_elim_table.from_rtx != NULL);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  277)   self_elim_table.offset = offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  278)   return &self_elim_table;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  279) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  280) 
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  281) /* Transform (subreg (plus reg const)) to (plus (subreg reg) const)
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  282)    when it is possible.  Return X or the transformation result if the
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  283)    transformation is done.  */
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  284) static rtx
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  285) move_plus_up (rtx x)
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  286) {
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  287)   rtx subreg_reg;
-b8506a8ac0a98 gcc/lra-eliminations.c  (Richard Sandiford   2017-07-05 15:29:27 +0000  288)   machine_mode x_mode, subreg_reg_mode;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  289) 
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  290)   if (GET_CODE (x) != SUBREG || !subreg_lowpart_p (x))
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  291)     return x;
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  292)   subreg_reg = SUBREG_REG (x);
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  293)   x_mode = GET_MODE (x);
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  294)   subreg_reg_mode = GET_MODE (subreg_reg);
-03a9562184454 gcc/lra-eliminations.c  (Richard Sandiford   2017-08-22 16:14:48 +0000  295)   if (!paradoxical_subreg_p (x)
-03a9562184454 gcc/lra-eliminations.c  (Richard Sandiford   2017-08-22 16:14:48 +0000  296)       && GET_CODE (subreg_reg) == PLUS
-cd65ae9071036 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-14 20:57:34 +0100  297)       && CONSTANT_P (XEXP (subreg_reg, 1))
-cd65ae9071036 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-14 20:57:34 +0100  298)       && GET_MODE_CLASS (x_mode) == MODE_INT
-cd65ae9071036 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-14 20:57:34 +0100  299)       && GET_MODE_CLASS (subreg_reg_mode) == MODE_INT)
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  300)     {
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  301)       rtx cst = simplify_subreg (x_mode, XEXP (subreg_reg, 1), subreg_reg_mode,
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  302)                              subreg_lowpart_offset (x_mode,
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  303)                                                     subreg_reg_mode));
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  304)       if (cst && CONSTANT_P (cst))
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  305)     {
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  306)       rtx lowpart = lowpart_subreg (x_mode, XEXP (subreg_reg, 0),
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  307)                                     subreg_reg_mode);
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  308)       if (lowpart)
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  309)         return gen_rtx_PLUS (x_mode, lowpart, cst);
-da3f2a561649c gcc/lra-eliminations.cc (Richard Sandiford   2025-06-30 08:52:26 +0100  310)     }
-26ff85b0b9d79 gcc/lra-eliminations.c  (Jakub Jelinek       2016-01-11 20:06:34 +0100  311)     }
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  312)   return x;
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  313) }
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  314) 
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  315) /* Flag that we already applied nonzero stack pointer elimination
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  316)    offset; such sp updates cannot currently be undone.  */
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  317) static bool elimination_2sp_occurred_p = false;
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  318) 
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  319) /* Take note of any nonzero sp-OFFSET used in eliminations to sp.  */
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  320) static inline poly_int64
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  321) note_spoff (poly_int64 offset)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  322) {
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  323)   if (maybe_ne (offset, 0))
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  324)     elimination_2sp_occurred_p = true;
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  325)   return offset;
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  326) }
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  327) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  328) /* Scan X and replace any eliminable registers (such as fp) with a
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  329)    replacement (such as sp) if SUBST_P, plus an offset.  The offset is
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  330)    a change in the offset between the eliminable register and its
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  331)    substitution if UPDATE_P, or the full offset if FULL_P, or
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  332)    otherwise zero.  If FULL_P, we also use the SP offsets for
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  333)    elimination to SP.  If UPDATE_P, use UPDATE_SP_OFFSET for updating
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  334)    offsets of register elimnable to SP.  If UPDATE_SP_OFFSET is
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  335)    non-zero, don't use difference of the offset and the previous
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  336)    offset.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  337) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  338)    MEM_MODE is the mode of an enclosing MEM.  We need this to know how
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  339)    much to adjust a register for, e.g., PRE_DEC.  Also, if we are
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  340)    inside a MEM, we are allowed to replace a sum of a hard register
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  341)    and the constant zero with the hard register, which we cannot do
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  342)    outside a MEM.  In addition, we need to record the fact that a
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  343)    hard register is referenced outside a MEM.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  344) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  345)    If we make full substitution to SP for non-null INSN, add the insn
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  346)    sp offset.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  347) rtx
-ef4bddc299eae gcc/lra-eliminations.c  (Richard Sandiford   2014-10-29 12:02:45 +0000  348) lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  349)                   bool subst_p, bool update_p,
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  350)                   poly_int64 update_sp_offset, bool full_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  351) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  352)   enum rtx_code code = GET_CODE (x);
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  353)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  354)   rtx new_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  355)   int i, j;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  356)   const char *fmt;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  357)   int copied = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  358) 
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  359)   lra_assert (!update_p || !full_p);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  360)   lra_assert (known_eq (update_sp_offset, 0)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  361)           || (!subst_p && update_p && !full_p));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  362)   if (! current_function_decl)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  363)     return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  364) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  365)   switch (code)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  366)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  367)     CASE_CONST_ANY:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  368)     case CONST:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  369)     case SYMBOL_REF:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  370)     case CODE_LABEL:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  371)     case PC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  372)     case ASM_INPUT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  373)     case ADDR_VEC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  374)     case ADDR_DIFF_VEC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  375)     case RETURN:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  376)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  377) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  378)     case REG:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  379)       /* First handle the case where we encounter a bare hard register
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  380)      that is eliminable.  Replace it with a PLUS.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  381)       if ((ep = get_elimination (x)) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  382)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  383)       rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  384) 
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  385)       if (maybe_ne (update_sp_offset, 0))
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  386)         {
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  387)           if (ep->to_rtx == stack_pointer_rtx)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  388)             return plus_constant (Pmode, to, note_spoff (update_sp_offset));
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  389)           return to;
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  390)         }
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  391)       else if (update_p)
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  392)         return plus_constant (Pmode, to, ep->offset - ep->previous_offset);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  393)       else if (full_p)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  394)         return plus_constant (Pmode, to,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  395)                               ep->offset
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  396)                               - (insn != NULL_RTX
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  397)                                  && ep->to_rtx == stack_pointer_rtx
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  398)                                  ? note_spoff (lra_get_insn_recog_data
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  399)                                                (insn)->sp_offset)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  400)                                  : 0));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  401)       else
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  402)         return to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  403)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  404)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  405) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  406)     case PLUS:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  407)       /* If this is the sum of an eliminable register and a constant, rework
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  408)      the sum.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  409)       if (REG_P (XEXP (x, 0)) && CONSTANT_P (XEXP (x, 1)))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  410)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  411)       if ((ep = get_elimination (XEXP (x, 0))) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  412)         {
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  413)           poly_int64 offset, curr_offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  414)           rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  415) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  416)           if (! update_p && ! full_p)
-10d59b802a7db gcc/lra-eliminations.cc (Richard Sandiford   2023-09-07 07:28:50 +0100  417)             return simplify_gen_binary (PLUS, Pmode, to, XEXP (x, 1));
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  418) 
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  419)           if (maybe_ne (update_sp_offset, 0))
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  420)             offset = (ep->to_rtx == stack_pointer_rtx
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  421)                       ? note_spoff (update_sp_offset)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  422)                       : 0);
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  423)           else
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  424)             offset = (update_p
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  425)                       ? ep->offset - ep->previous_offset : ep->offset);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  426)           if (full_p && insn != NULL_RTX && ep->to_rtx == stack_pointer_rtx)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  427)             offset -= note_spoff (lra_get_insn_recog_data (insn)->sp_offset);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  428)           if (poly_int_rtx_p (XEXP (x, 1), &curr_offset)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  429)               && known_eq (curr_offset, -offset))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  430)             return to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  431)           else
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  432)             return gen_rtx_PLUS (Pmode, to,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  433)                                  plus_constant (Pmode,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  434)                                                 XEXP (x, 1), offset));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  435)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  436) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  437)       /* If the hard register is not eliminable, we are done since
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  438)          the other operand is a constant.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  439)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  440)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  441) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  442)       /* If this is part of an address, we want to bring any constant
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  443)      to the outermost PLUS.  We will do this by doing hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  444)      register replacement in our operands and seeing if a constant
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  445)      shows up in one of them.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  446) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  447)      Note that there is no risk of modifying the structure of the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  448)      insn, since we only get called for its operands, thus we are
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  449)      either modifying the address inside a MEM, or something like
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  450)      an address operand of a load-address insn.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  451) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  452)       {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  453)     rtx new0 = lra_eliminate_regs_1 (insn, XEXP (x, 0), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  454)                                      subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  455)                                      update_sp_offset, full_p);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  456)     rtx new1 = lra_eliminate_regs_1 (insn, XEXP (x, 1), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  457)                                      subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  458)                                      update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  459) 
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  460)     new0 = move_plus_up (new0);
-18c8f1a812865 gcc/lra-eliminations.c  (Vladimir Makarov    2015-12-04 19:23:21 +0000  461)     new1 = move_plus_up (new1);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  462)     if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  463)       return form_sum (new0, new1);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  464)       }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  465)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  466) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  467)     case MULT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  468)       /* If this is the product of an eliminable hard register and a
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  469)      constant, apply the distribute law and move the constant out
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  470)      so that we have (plus (mult ..) ..).  This is needed in order
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  471)      to keep load-address insns valid.  This case is pathological.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  472)      We ignore the possibility of overflow here.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  473)       if (REG_P (XEXP (x, 0)) && CONST_INT_P (XEXP (x, 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  474)       && (ep = get_elimination (XEXP (x, 0))) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  475)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  476)       rtx to = subst_p ? ep->to_rtx : ep->from_rtx;
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  477) 
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  478)       if (maybe_ne (update_sp_offset, 0))
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  479)         {
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  480)           if (ep->to_rtx == stack_pointer_rtx)
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  481)             return plus_constant (Pmode,
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  482)                                   gen_rtx_MULT (Pmode, to, XEXP (x, 1)),
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  483)                                   note_spoff (update_sp_offset)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  484)                                   * INTVAL (XEXP (x, 1)));
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  485)           return gen_rtx_MULT (Pmode, to, XEXP (x, 1));
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  486)         }
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  487)       else if (update_p)
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  488)         return plus_constant (Pmode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  489)                               gen_rtx_MULT (Pmode, to, XEXP (x, 1)),
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  490)                               (ep->offset - ep->previous_offset)
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  491)                               * INTVAL (XEXP (x, 1)));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  492)       else if (full_p)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  493)         {
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  494)           poly_int64 offset = ep->offset;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  495) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  496)           if (insn != NULL_RTX && ep->to_rtx == stack_pointer_rtx)
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300  497)             offset -= note_spoff (lra_get_insn_recog_data (insn)->sp_offset);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  498)           return
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  499)             plus_constant (Pmode,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  500)                            gen_rtx_MULT (Pmode, to, XEXP (x, 1)),
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  501)                            offset * INTVAL (XEXP (x, 1)));
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  502)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  503)       else
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  504)         return gen_rtx_MULT (Pmode, to, XEXP (x, 1));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  505)     }
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  506) 
-191816a36b90e gcc/lra-eliminations.c  (Marek Polacek       2016-08-12 10:30:47 +0000  507)       /* fall through */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  508) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  509)     case CALL:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  510)     case COMPARE:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  511)     /* See comments before PLUS about handling MINUS.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  512)     case MINUS:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  513)     case DIV:          case UDIV:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  514)     case MOD:          case UMOD:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  515)     case AND:          case IOR:      case XOR:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  516)     case ROTATERT: case ROTATE:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  517)     case ASHIFTRT: case LSHIFTRT: case ASHIFT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  518)     case NE:           case EQ:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  519)     case GE:           case GT:       case GEU:    case GTU:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  520)     case LE:           case LT:       case LEU:    case LTU:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  521)       {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  522)     rtx new0 = lra_eliminate_regs_1 (insn, XEXP (x, 0), mem_mode,
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  523)                                      subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  524)                                      update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  525)     rtx new1 = XEXP (x, 1)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  526)                ? lra_eliminate_regs_1 (insn, XEXP (x, 1), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  527)                                        subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  528)                                        update_sp_offset, full_p) : 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  529) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  530)     if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  531)       return gen_rtx_fmt_ee (code, GET_MODE (x), new0, new1);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  532)       }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  533)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  534) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  535)     case EXPR_LIST:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  536)       /* If we have something in XEXP (x, 0), the usual case,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  537)      eliminate it.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  538)       if (XEXP (x, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  539)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  540)       new_rtx = lra_eliminate_regs_1 (insn, XEXP (x, 0), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  541)                                       subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  542)                                       update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  543)       if (new_rtx != XEXP (x, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  544)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  545)           /* If this is a REG_DEAD note, it is not valid anymore.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  546)              Using the eliminated version could result in creating a
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  547)              REG_DEAD note for the stack or frame pointer.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  548)           if (REG_NOTE_KIND (x) == REG_DEAD)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  549)             return (XEXP (x, 1)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  550)                     ? lra_eliminate_regs_1 (insn, XEXP (x, 1), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  551)                                             subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  552)                                             update_sp_offset, full_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  553)                     : NULL_RTX);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  554) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  555)           x = alloc_reg_note (REG_NOTE_KIND (x), new_rtx, XEXP (x, 1));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  556)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  557)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  558) 
-191816a36b90e gcc/lra-eliminations.c  (Marek Polacek       2016-08-12 10:30:47 +0000  559)       /* fall through */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  560) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  561)     case INSN_LIST:
-f91aec98e2fe7 gcc/lra-eliminations.c  (Richard Sandiford   2013-09-27 11:17:34 +0000  562)     case INT_LIST:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  563)       /* Now do eliminations in the rest of the chain.      If this was
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  564)      an EXPR_LIST, this might result in allocating more memory than is
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  565)      strictly needed, but it simplifies the code.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  566)       if (XEXP (x, 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  567)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  568)       new_rtx = lra_eliminate_regs_1 (insn, XEXP (x, 1), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  569)                                       subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  570)                                       update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  571)       if (new_rtx != XEXP (x, 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  572)         return
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  573)           gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x),
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  574)                           XEXP (x, 0), new_rtx);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  575)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  576)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  577) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  578)     case PRE_INC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  579)     case POST_INC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  580)     case PRE_DEC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  581)     case POST_DEC:
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  582)       /* Recurse to adjust elimination offsets in a spilled pseudo.  */
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  583)       if (GET_CODE (XEXP (x, 0)) == MEM)
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  584)     break;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  585)       /* We do not support elimination of a register that is modified.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  586)      elimination_effects has already make sure that this does not
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  587)      happen.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  588)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  589) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  590)     case PRE_MODIFY:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  591)     case POST_MODIFY:
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  592)       /* Recurse to adjust elimination offsets in a spilled pseudo.  */
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  593)       if (GET_CODE (XEXP (x, 0)) == MEM)
-ccef9e5dd9ffd gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:27 -0300  594)     break;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  595)       /* We do not support elimination of a hard register that is
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  596)      modified.  LRA has already make sure that this does not
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  597)      happen. The only remaining case we need to consider here is
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  598)      that the increment value may be an eliminable register.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  599)       if (GET_CODE (XEXP (x, 1)) == PLUS
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  600)       && XEXP (XEXP (x, 1), 0) == XEXP (x, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  601)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  602)       rtx new_rtx = lra_eliminate_regs_1 (insn, XEXP (XEXP (x, 1), 1),
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  603)                                           mem_mode, subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  604)                                           update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  605) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  606)       if (new_rtx != XEXP (XEXP (x, 1), 1))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  607)         return gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (x, 0),
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  608)                                gen_rtx_PLUS (GET_MODE (x),
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  609)                                              XEXP (x, 0), new_rtx));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  610)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  611)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  612) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  613)     case STRICT_LOW_PART:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  614)     case NEG:              case NOT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  615)     case SIGN_EXTEND:  case ZERO_EXTEND:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  616)     case TRUNCATE:     case FLOAT_EXTEND: case FLOAT_TRUNCATE:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  617)     case FLOAT:            case FIX:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  618)     case UNSIGNED_FIX: case UNSIGNED_FLOAT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  619)     case ABS:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  620)     case SQRT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  621)     case FFS:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  622)     case CLZ:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  623)     case CTZ:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  624)     case POPCOUNT:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  625)     case PARITY:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  626)     case BSWAP:
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  627)       new_rtx = lra_eliminate_regs_1 (insn, XEXP (x, 0), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  628)                                   subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  629)                                   update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  630)       if (new_rtx != XEXP (x, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  631)     return gen_rtx_fmt_e (code, GET_MODE (x), new_rtx);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  632)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  633) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  634)     case SUBREG:
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  635)       new_rtx = lra_eliminate_regs_1 (insn, SUBREG_REG (x), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  636)                                   subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  637)                                   update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  638) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  639)       if (new_rtx != SUBREG_REG (x))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  640)     {
-03a9562184454 gcc/lra-eliminations.c  (Richard Sandiford   2017-08-22 16:14:48 +0000  641)       if (MEM_P (new_rtx) && !paradoxical_subreg_p (x))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  642)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  643)           SUBREG_REG (x) = new_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  644)           alter_subreg (&x, false);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  645)           return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  646)         }
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  647)       else if (! subst_p)
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  648)         {
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  649)           /* LRA can transform subregs itself.  So don't call
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  650)              simplify_gen_subreg until LRA transformations are
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  651)              finished.  Function simplify_gen_subreg can do
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  652)              non-trivial transformations (like truncation) which
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  653)              might make LRA work to fail.  */
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  654)           SUBREG_REG (x) = new_rtx;
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  655)           return x;
-b17ec42d4c8cd gcc/lra-eliminations.c  (Vladimir Makarov    2014-05-23 01:52:01 +0000  656)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  657)       else
-baa061be44ee3 gcc/lra-eliminations.c  (Richard Sandiford   2012-10-30 14:33:48 +0000  658)         return simplify_gen_subreg (GET_MODE (x), new_rtx,
-baa061be44ee3 gcc/lra-eliminations.c  (Richard Sandiford   2012-10-30 14:33:48 +0000  659)                                     GET_MODE (new_rtx), SUBREG_BYTE (x));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  660)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  661) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  662)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  663) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  664)     case MEM:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  665)       /* Our only special processing is to pass the mode of the MEM to our
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  666)      recursive call and copy the flags.  While we are here, handle this
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  667)      case more efficiently.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  668)       return
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  669)     replace_equiv_address_nv
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  670)     (x,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  671)      lra_eliminate_regs_1 (insn, XEXP (x, 0), GET_MODE (x),
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  672)                            subst_p, update_p, update_sp_offset, full_p));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  673) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  674)     case USE:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  675)       /* Handle insn_list USE that a call to a pure function may generate.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  676)       new_rtx = lra_eliminate_regs_1 (insn, XEXP (x, 0), VOIDmode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  677)                                   subst_p, update_p, update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  678)       if (new_rtx != XEXP (x, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  679)     return gen_rtx_USE (GET_MODE (x), new_rtx);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  680)       return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  681) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  682)     case CLOBBER:
-48cb51827c9eb gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-12-08 15:37:42 -0500  683)     case ASM_OPERANDS:
-48cb51827c9eb gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-12-08 15:37:42 -0500  684)       gcc_assert (insn && DEBUG_INSN_P (insn));
-48cb51827c9eb gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-12-08 15:37:42 -0500  685)       break;
-48cb51827c9eb gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-12-08 15:37:42 -0500  686) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  687)     case SET:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  688)       gcc_unreachable ();
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  689) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  690)     default:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  691)       break;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  692)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  693) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  694)   /* Process each of our operands recursively.      If any have changed, make a
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  695)      copy of the rtx.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  696)   fmt = GET_RTX_FORMAT (code);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  697)   for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  698)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  699)       if (*fmt == 'e')
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  700)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  701)       new_rtx = lra_eliminate_regs_1 (insn, XEXP (x, i), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  702)                                       subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  703)                                       update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  704)       if (new_rtx != XEXP (x, i) && ! copied)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  705)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  706)           x = shallow_copy_rtx (x);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  707)           copied = 1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  708)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  709)       XEXP (x, i) = new_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  710)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  711)       else if (*fmt == 'E')
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  712)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  713)       int copied_vec = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  714)       for (j = 0; j < XVECLEN (x, i); j++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  715)         {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  716)           new_rtx = lra_eliminate_regs_1 (insn, XVECEXP (x, i, j), mem_mode,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  717)                                           subst_p, update_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  718)                                           update_sp_offset, full_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  719)           if (new_rtx != XVECEXP (x, i, j) && ! copied_vec)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  720)             {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  721)               rtvec new_v = gen_rtvec_v (XVECLEN (x, i),
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  722)                                          XVEC (x, i)->elem);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  723)               if (! copied)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  724)                 {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  725)                   x = shallow_copy_rtx (x);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  726)                   copied = 1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  727)                 }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  728)               XVEC (x, i) = new_v;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  729)               copied_vec = 1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  730)             }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  731)           XVECEXP (x, i, j) = new_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  732)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  733)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  734)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  735) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  736)   return x;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  737) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  738) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  739) /* This function is used externally in subsequent passes of GCC.  It
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  740)    always does a full elimination of X.      */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  741) rtx
-ef4bddc299eae gcc/lra-eliminations.c  (Richard Sandiford   2014-10-29 12:02:45 +0000  742) lra_eliminate_regs (rtx x, machine_mode mem_mode,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  743)                 rtx insn ATTRIBUTE_UNUSED)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  744) {
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  745)   return lra_eliminate_regs_1 (NULL, x, mem_mode, true, false, 0, true);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  746) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  747) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  748) /* Stack pointer offset before the current insn relative to one at the
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  749)    func start.  RTL insns can change SP explicitly.  We keep the
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  750)    changes from one insn to another through this variable.  */
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  751) static poly_int64 curr_sp_change;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  752) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  753) /* Scan rtx X for references to elimination source or target registers
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  754)    in contexts that would prevent the elimination from happening.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  755)    Update the table of eliminables to reflect the changed state.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  756)    MEM_MODE is the mode of an enclosing MEM rtx, or VOIDmode if not
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  757)    within a MEM.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  758) static void
-ef4bddc299eae gcc/lra-eliminations.c  (Richard Sandiford   2014-10-29 12:02:45 +0000  759) mark_not_eliminable (rtx x, machine_mode mem_mode)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  760) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  761)   enum rtx_code code = GET_CODE (x);
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  762)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  763)   int i, j;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  764)   const char *fmt;
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  765)   poly_int64 offset = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  766) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  767)   switch (code)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  768)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  769)     case PRE_INC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  770)     case POST_INC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  771)     case PRE_DEC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  772)     case POST_DEC:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  773)     case POST_MODIFY:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  774)     case PRE_MODIFY:
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  775)       if (XEXP (x, 0) == stack_pointer_rtx
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  776)       && ((code != PRE_MODIFY && code != POST_MODIFY)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  777)           || (GET_CODE (XEXP (x, 1)) == PLUS
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  778)               && XEXP (x, 0) == XEXP (XEXP (x, 1), 0)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  779)               && poly_int_rtx_p (XEXP (XEXP (x, 1), 1), &offset))))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  780)     {
-7b4df2bf95d22 gcc/lra-eliminations.c  (Richard Sandiford   2018-01-03 07:18:13 +0000  781)       poly_int64 size = GET_MODE_SIZE (mem_mode);
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  782) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  783) #ifdef PUSH_ROUNDING
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  784)       /* If more bytes than MEM_MODE are pushed, account for
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  785)          them.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  786)       size = PUSH_ROUNDING (size);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  787) #endif
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  788)       if (code == PRE_DEC || code == POST_DEC)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  789)         curr_sp_change -= size;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  790)       else if (code == PRE_INC || code == POST_INC)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  791)         curr_sp_change += size;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  792)       else if (code == PRE_MODIFY || code == POST_MODIFY)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  793)         curr_sp_change += offset;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  794)     }
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  795)       else if (REG_P (XEXP (x, 0))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  796)            && REGNO (XEXP (x, 0)) >= FIRST_PSEUDO_REGISTER)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  797)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  798)       /* If we modify the source of an elimination rule, disable
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  799)          it.  Do the same if it is the destination and not the
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  800)          hard frame register.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  801)       for (ep = reg_eliminate;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  802)            ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  803)            ep++)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  804)         if (ep->from_rtx == XEXP (x, 0)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  805)             || (ep->to_rtx == XEXP (x, 0)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  806)                 && ep->to_rtx != hard_frame_pointer_rtx))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  807)           setup_can_eliminate (ep, false);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  808)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  809)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  810) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  811)     case USE:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  812)       if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  813)     /* If using a hard register that is the source of an eliminate
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  814)        we still think can be performed, note it cannot be
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  815)        performed since we don't know how this hard register is
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  816)        used.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  817)     for (ep = reg_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  818)          ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  819)          ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  820)       if (ep->from_rtx == XEXP (x, 0)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  821)           && ep->to_rtx != hard_frame_pointer_rtx)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  822)         setup_can_eliminate (ep, false);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  823)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  824) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  825)     case CLOBBER:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  826)       if (REG_P (XEXP (x, 0)) && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  827)     /* If clobbering a hard register that is the replacement
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  828)        register for an elimination we still think can be
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  829)        performed, note that it cannot be performed.  Otherwise, we
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  830)        need not be concerned about it.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  831)     for (ep = reg_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  832)          ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  833)          ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  834)       if (ep->to_rtx == XEXP (x, 0)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  835)           && ep->to_rtx != hard_frame_pointer_rtx)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  836)         setup_can_eliminate (ep, false);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  837)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  838) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  839)     case SET:
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  840)       if (SET_DEST (x) == stack_pointer_rtx
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  841)       && GET_CODE (SET_SRC (x)) == PLUS
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  842)       && XEXP (SET_SRC (x), 0) == SET_DEST (x)
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  843)       && poly_int_rtx_p (XEXP (SET_SRC (x), 1), &offset))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  844)     {
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  845)       curr_sp_change += offset;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  846)       return;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  847)     }
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  848)       if (! REG_P (SET_DEST (x))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  849)       || REGNO (SET_DEST (x)) >= FIRST_PSEUDO_REGISTER)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  850)     mark_not_eliminable (SET_DEST (x), mem_mode);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  851)       else
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  852)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  853)       /* See if this is setting the replacement hard register for
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  854)          an elimination.
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  855) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  856)          If DEST is the hard frame pointer, we do nothing because
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  857)          we assume that all assignments to the frame pointer are
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  858)          for non-local gotos and are being done at a time when
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  859)          they are valid and do not disturb anything else.  Some
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  860)          machines want to eliminate a fake argument pointer (or
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  861)          even a fake frame pointer) with either the real frame
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  862)          pointer or the stack pointer.  Assignments to the hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  863)          frame pointer must not prevent this elimination.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  864)       for (ep = reg_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  865)            ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  866)            ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  867)         if (ep->to_rtx == SET_DEST (x)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  868)             && SET_DEST (x) != hard_frame_pointer_rtx)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  869)           setup_can_eliminate (ep, false);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  870)     }
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400  871) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  872)       mark_not_eliminable (SET_SRC (x), mem_mode);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  873)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  874) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  875)     case MEM:
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  876)       /* Our only special processing is to pass the mode of the MEM to
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  877)      our recursive call.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  878)       mark_not_eliminable (XEXP (x, 0), GET_MODE (x));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  879)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  880) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  881)     default:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  882)       break;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  883)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  884) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  885)   fmt = GET_RTX_FORMAT (code);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  886)   for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  887)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  888)       if (*fmt == 'e')
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  889)     mark_not_eliminable (XEXP (x, i), mem_mode);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  890)       else if (*fmt == 'E')
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  891)     for (j = 0; j < XVECLEN (x, i); j++)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  892)       mark_not_eliminable (XVECEXP (x, i, j), mem_mode);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  893)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  894) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  895) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  896) \f
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  897) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  898) /* Scan INSN and eliminate all eliminable hard registers in it.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  899) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  900)    If REPLACE_P is true, do the replacement destructively.  Also
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  901)    delete the insn as dead it if it is setting an eliminable register.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  902) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  903)    If REPLACE_P is false, just update the offsets while keeping the
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000  904)    base register the same.  If FIRST_P, use the sp offset for
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  905)    elimination to sp.  Otherwise, use UPDATE_SP_OFFSET for this.  If
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  906)    UPDATE_SP_OFFSET is non-zero, don't use difference of the offset
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  907)    and the previous offset.  Attach the note about used elimination
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  908)    for insns setting frame pointer to update elimination easy (without
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  909)    parsing already generated elimination insns to find offset
-a6af1bf9fe2f7 gcc/lra-eliminations.c  (Vladimir Makarov    2015-04-19 23:48:24 +0000  910)    previously used) in future.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  911) 
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  912) void
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  913) eliminate_regs_in_insn (rtx_insn *insn, bool replace_p, bool first_p,
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  914)                     poly_int64 update_sp_offset)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  915) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  916)   int icode = recog_memoized (insn);
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500  917)   rtx set, old_set = single_set (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  918)   bool validate_p;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  919)   int i;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  920)   rtx substed_operand[MAX_RECOG_OPERANDS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  921)   rtx orig_operand[MAX_RECOG_OPERANDS];
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000  922)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  923)   rtx plus_src, plus_cst_src;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  924)   lra_insn_recog_data_t id;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  925)   struct lra_static_insn_data *static_id;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  926) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  927)   if (icode < 0 && asm_noperands (PATTERN (insn)) < 0 && ! DEBUG_INSN_P (insn))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  928)     {
-397186076bb72 gcc/lra-eliminations.c  (Steven Bosscher     2013-03-30 14:26:42 +0000  929)       lra_assert (GET_CODE (PATTERN (insn)) == USE
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  930)               || GET_CODE (PATTERN (insn)) == CLOBBER
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  931)               || GET_CODE (PATTERN (insn)) == ASM_INPUT);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  932)       return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  933)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  934) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  935)   /* We allow one special case which happens to work on all machines we
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  936)      currently support: a single set with the source or a REG_EQUAL
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  937)      note being a PLUS of an eliminable register and a constant.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  938)   plus_src = plus_cst_src = 0;
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  939)   poly_int64 offset = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  940)   if (old_set && REG_P (SET_DEST (old_set)))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  941)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  942)       if (GET_CODE (SET_SRC (old_set)) == PLUS)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  943)     plus_src = SET_SRC (old_set);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  944)       /* First see if the source is of the form (plus (...) CST).  */
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  945)       if (plus_src && poly_int_rtx_p (XEXP (plus_src, 1), &offset))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  946)     plus_cst_src = plus_src;
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  947)       /* If we are doing initial offset computation, then utilize
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  948)      eqivalences to discover a constant for the second term
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  949)      of PLUS_SRC.  */
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  950)       else if (plus_src && REG_P (XEXP (plus_src, 1)))
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  951)     {
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  952)       int regno = REGNO (XEXP (plus_src, 1));
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  953)       if (regno < ira_reg_equiv_len
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  954)           && ira_reg_equiv[regno].constant != NULL_RTX
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  955)           && !replace_p
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  956)           && poly_int_rtx_p (ira_reg_equiv[regno].constant, &offset))
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  957)         plus_cst_src = plus_src;
-6619b3d4c15cd gcc/lra-eliminations.cc (Jivan Hakobyan      2023-08-23 14:10:30 -0600  958)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  959)       /* Check that the first operand of the PLUS is a hard reg or
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  960)      the lowpart subreg of one.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  961)       if (plus_cst_src)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  962)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  963)       rtx reg = XEXP (plus_cst_src, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  964) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  965)       if (GET_CODE (reg) == SUBREG && subreg_lowpart_p (reg))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  966)         reg = SUBREG_REG (reg);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  967) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  968)       if (!REG_P (reg) || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  969)         plus_cst_src = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  970)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  971)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  972)   if (plus_cst_src)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  973)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  974)       rtx reg = XEXP (plus_cst_src, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  975) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  976)       if (GET_CODE (reg) == SUBREG)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  977)     reg = SUBREG_REG (reg);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  978) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  979)       if (REG_P (reg) && (ep = get_elimination (reg)) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  980)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  981)       rtx to_rtx = replace_p ? ep->to_rtx : ep->from_rtx;
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  982) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  983)       if (! replace_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  984)         {
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000  985)           if (known_eq (update_sp_offset, 0))
-542773888190e gcc/lra-eliminations.cc (Michael Matz        2024-08-22 17:09:11 +0200  986)             offset += (!first_p
-542773888190e gcc/lra-eliminations.cc (Michael Matz        2024-08-22 17:09:11 +0200  987)                        ? ep->offset - ep->previous_offset : ep->offset);
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  988)           if (ep->to_rtx == stack_pointer_rtx)
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  989)             {
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  990)               if (first_p)
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  991)                 offset -= lra_get_insn_recog_data (insn)->sp_offset;
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  992)               else
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  993)                 offset += update_sp_offset;
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000  994)             }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  995)           offset = trunc_int_for_mode (offset, GET_MODE (plus_cst_src));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  996)         }
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000  997) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  998)       if (GET_CODE (XEXP (plus_cst_src, 0)) == SUBREG)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000  999)         to_rtx = gen_lowpart (GET_MODE (XEXP (plus_cst_src, 0)), to_rtx);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1000)       /* If we have a nonzero offset, and the source is already a
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1001)          simple REG, the following transformation would increase
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1002)          the cost of the insn by replacing a simple REG with (plus
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1003)          (reg sp) CST).  So try only when we already had a PLUS
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1004)          before.  */
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000 1005)       if (known_eq (offset, 0) || plus_src)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1006)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1007)           rtx new_src = plus_constant (GET_MODE (to_rtx), to_rtx, offset);
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000 1008) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1009)           old_set = single_set (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1010) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1011)           /* First see if this insn remains valid when we make the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1012)              change.  If not, try to replace the whole pattern
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1013)              with a simple set (this may help if the original insn
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1014)              was a PARALLEL that was only recognized as single_set
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1015)              due to REG_UNUSED notes).  If this isn't valid
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1016)              either, keep the INSN_CODE the same and let the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1017)              constraint pass fix it up.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1018)           if (! validate_change (insn, &SET_SRC (old_set), new_src, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1019)             {
-f7df4a840c478 gcc/lra-eliminations.c  (Richard Sandiford   2015-05-07 16:58:46 +0000 1020)               rtx new_pat = gen_rtx_SET (SET_DEST (old_set), new_src);
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000 1021) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1022)               if (! validate_change (insn, &PATTERN (insn), new_pat, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1023)                 SET_SRC (old_set) = new_src;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1024)             }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1025)           lra_update_insn_recog_data (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1026)           /* This can't have an effect on elimination offsets, so skip
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1027)              right to the end.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1028)           return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1029)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1030)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1031)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1032) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1033)   /* Eliminate all eliminable registers occurring in operands that
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1034)      can be handled by the constraint pass.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1035)   id = lra_get_insn_recog_data (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1036)   static_id = id->insn_static_data;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1037)   validate_p = false;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1038)   for (i = 0; i < static_id->n_operands; i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1039)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1040)       orig_operand[i] = *id->operand_loc[i];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1041)       substed_operand[i] = *id->operand_loc[i];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1042) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1043)       /* For an asm statement, every operand is eliminable.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1044)       if (icode < 0 || insn_data[icode].operand[i].eliminable)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1045)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1046)       /* Check for setting a hard register that we know about.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1047)       if (static_id->operand[i].type != OP_IN
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1048)           && REG_P (orig_operand[i]))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1049)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1050)           /* If we are assigning to a hard register that can be
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1051)              eliminated, it must be as part of a PARALLEL, since
-67914693144c0 gcc/lra-eliminations.c  (Sandra Loosemore    2019-01-09 16:37:45 -0500 1052)              the code above handles single SETs.  This reg cannot
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1053)              be longer eliminated -- it is forced by
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1054)              mark_not_eliminable.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1055)           for (ep = reg_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1056)                ep < &reg_eliminate[NUM_ELIMINABLE_REGS];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1057)                ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1058)             lra_assert (ep->from_rtx != orig_operand[i]
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1059)                         || ! ep->can_eliminate);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1060)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1061) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1062)       /* Companion to the above plus substitution, we can allow
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1063)          invariants as the source of a plain move.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1064)       substed_operand[i]
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1065)         = lra_eliminate_regs_1 (insn, *id->operand_loc[i], VOIDmode,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1066)                                 replace_p, ! replace_p && ! first_p,
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000 1067)                                 update_sp_offset, first_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1068)       if (substed_operand[i] != orig_operand[i])
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1069)         validate_p = true;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1070)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1071)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1072) 
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1073)   if (! validate_p)
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1074)     return;
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1075) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1076)   /* Substitute the operands; the new values are in the substed_operand
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1077)      array.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1078)   for (i = 0; i < static_id->n_operands; i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1079)     *id->operand_loc[i] = substed_operand[i];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1080)   for (i = 0; i < static_id->n_dups; i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1081)     *id->dup_loc[i] = substed_operand[(int) static_id->dup_num[i]];
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1082) 
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1083)   /* Transform plus (plus (hard reg, const), pseudo) to plus (plus (pseudo,
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1084)      const), hard reg) in order to keep insn containing eliminated register
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1085)      after all reloads calculating its offset.  This permits to keep register
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1086)      pressure under control and helps to avoid LRA cycling in patalogical
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1087)      cases.  */
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1088)   if (! replace_p && (set = single_set (insn)) != NULL
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1089)       && GET_CODE (SET_SRC (set)) == PLUS
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1090)       && GET_CODE (XEXP (SET_SRC (set), 0)) == PLUS)
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1091)     {
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1092)       rtx reg1, reg2, op1, op2;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1093) 
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1094)       reg1 = op1 = XEXP (XEXP (SET_SRC (set), 0), 0);
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1095)       reg2 = op2 = XEXP (SET_SRC (set), 1);
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1096)       if (GET_CODE (reg1) == SUBREG)
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1097)     reg1 = SUBREG_REG (reg1);
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1098)       if (GET_CODE (reg2) == SUBREG)
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1099)     reg2 = SUBREG_REG (reg2);
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1100)       if (REG_P (reg1) && REG_P (reg2)
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1101)       && REGNO (reg1) < FIRST_PSEUDO_REGISTER
-4334b52427420 gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-20 11:40:14 -0500 1102)       && REGNO (reg2) >= FIRST_PSEUDO_REGISTER
-4334b52427420 gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-20 11:40:14 -0500 1103)       && GET_MODE (reg1) == Pmode
-68ba1039c7daf gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-21 17:27:01 -0500 1104)       && !have_addptr3_insn (lra_pmode_pseudo, reg1,
-4334b52427420 gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-20 11:40:14 -0500 1105)                              XEXP (XEXP (SET_SRC (set), 0), 1)))
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1106)     {
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1107)       XEXP (XEXP (SET_SRC (set), 0), 0) = op2;
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1108)       XEXP (SET_SRC (set), 1) = op1;
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1109)     }
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1110)     }
-cf2ac1c30af0f gcc/lra-eliminations.c  (Vladimir N. Makarov 2021-01-12 11:26:15 -0500 1111) 
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1112)   /* If we had a move insn but now we don't, re-recognize it.
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1113)      This will cause spurious re-recognition if the old move had a
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1114)      PARALLEL since the new one still will, but we can't call
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1115)      single_set without having put new body into the insn and the
-2c62cbaaf13c7 gcc/lra-eliminations.c  (Vladimir Makarov    2013-04-26 18:11:35 +0000 1116)      re-recognition won't hurt in this rare case.  */
-8ba6ea878fd09 gcc/lra-eliminations.c  (Martin Liska        2019-07-03 10:34:20 +0200 1117)   lra_update_insn_recog_data (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1118) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1119) 
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1120) /* Spill pseudos which are assigned to hard registers in SET, record them in
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1121)    SPILLED_PSEUDOS unless it is null, and return the recorded pseudos number.
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1122)    Add affected insns for processing in the subsequent constraint pass.  */
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1123) static int
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1124) spill_pseudos (HARD_REG_SET set, int *spilled_pseudos)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1125) {
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1126)   int i, n;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1127)   bitmap_head to_process;
-cfa434f6d2c4e gcc/lra-eliminations.c  (David Malcolm       2014-08-22 18:36:35 +0000 1128)   rtx_insn *insn;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1129) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1130)   if (hard_reg_set_empty_p (set))
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1131)     return 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1132)   if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1133)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1134)       fprintf (lra_dump_file, "        Spilling non-eliminable hard regs:");
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1135)       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1136)     if (TEST_HARD_REG_BIT (set, i))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1137)       fprintf (lra_dump_file, " %d", i);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1138)       fprintf (lra_dump_file, "\n");
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1139)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1140)   bitmap_initialize (&to_process, &reg_obstack);
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1141)   n = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1142)   for (i = FIRST_PSEUDO_REGISTER; i < max_reg_num (); i++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1143)     if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1144)     && overlaps_hard_reg_set_p (set,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1145)                                 PSEUDO_REGNO_MODE (i), reg_renumber[i]))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1146)       {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1147)     if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1148)       fprintf (lra_dump_file, "      Spilling r%d(%d)\n",
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1149)                i, reg_renumber[i]);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1150)     reg_renumber[i] = -1;
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1151)     if (spilled_pseudos != NULL)
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1152)       spilled_pseudos[n++] = i;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1153)     bitmap_ior_into (&to_process, &lra_reg_info[i].insn_bitmap);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1154)       }
-44942965f4eae gcc/lra-eliminations.c  (Richard Sandiford   2019-09-09 17:59:19 +0000 1155)   lra_no_alloc_regs |= set;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1156)   for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1157)     if (bitmap_bit_p (&to_process, INSN_UID (insn)))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1158)       {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1159)     lra_push_insn (insn);
-7874b7c5b5992 gcc/lra-eliminations.c  (Vladimir Makarov    2018-02-22 21:17:51 +0000 1160)     lra_set_used_insn_alternative (insn, LRA_UNKNOWN_ALT);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1161)       }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1162)   bitmap_clear (&to_process);
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1163)   return n;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1164) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1165) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1166) /* Update all offsets and possibility for elimination on eliminable
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1167)    registers.  Spill pseudos assigned to registers which are
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1168)    uneliminable, update LRA_NO_ALLOC_REGS and ELIMINABLE_REG_SET.  Add
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1169)    insns to INSNS_WITH_CHANGED_OFFSETS containing eliminable hard
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1170)    registers whose offsets should be changed.  Return true if any
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1171)    elimination offset changed.  */
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1172) static bool
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1173) update_reg_eliminate (bitmap insns_with_changed_offsets)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1174) {
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1175)   bool prev, result;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1176)   class lra_elim_table *ep, *ep1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1177)   HARD_REG_SET temp_hard_reg_set;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1178) 
-29eb9a442b145 gcc/lra-eliminations.c  (Bernd Edlinger      2017-05-08 17:44:36 +0000 1179)   targetm.compute_frame_layout ();
-29eb9a442b145 gcc/lra-eliminations.c  (Bernd Edlinger      2017-05-08 17:44:36 +0000 1180) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1181)   /* Clear self elimination offsets.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1182)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1183)     self_elim_offsets[ep->from] = 0;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1184)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1185)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1186)       /* If it is a currently used elimination: update the previous
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1187)      offset.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1188)       if (elimination_map[ep->from] == ep)
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1189)     {
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1190)       ep->previous_offset = ep->offset;
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1191)       /* Restore the stack_pointer_rtx into to_rtx, that
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1192)          lra_update_fp2sp_elimination set to from_rtx, so that the assert
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1193)          below still checks what it was supposed to check.  */
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1194)       if (ep->from_rtx == ep->to_rtx
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1195)           && ep->from != ep->to
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1196)           && ep->from == FRAME_POINTER_REGNUM)
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1197)         ep->to_rtx = stack_pointer_rtx;
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1198)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1199) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1200)       prev = ep->prev_can_eliminate;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1201)       setup_can_eliminate (ep, targetm.can_eliminate (ep->from, ep->to));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1202)       if (ep->can_eliminate && ! prev)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1203)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1204)       /* It is possible that not eliminable register becomes
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1205)          eliminable because we took other reasons into account to
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1206)          set up eliminable regs in the initial set up.  Just
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1207)          ignore new eliminable registers.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1208)       setup_can_eliminate (ep, false);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1209)       continue;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1210)     }
-2edb50a310896 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-02 20:21:45 -0300 1211)       if (!ep->can_eliminate && elimination_map[ep->from] == ep)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1212)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1213)       /* We cannot use this elimination anymore -- find another
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1214)          one.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1215)       if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1216)         fprintf (lra_dump_file,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1217)                  "  Elimination %d to %d is not possible anymore\n",
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1218)                  ep->from, ep->to);
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1219)       /* If after processing RTL we decides that SP can be used as a result
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1220)          of elimination, it cannot be changed.  For frame pointer to stack
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1221)          pointer elimination the condition is a bit relaxed and we just require
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1222)          that actual elimination has not been done yet.   */
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1223)       gcc_assert (ep->to_rtx != stack_pointer_rtx
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300 1224)                   || !elimination_2sp_occurred_p
-16894253cd152 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-21 20:28:50 -0400 1225)                   || (ep->from < FIRST_PSEUDO_REGISTER
-ddcfa953fc03e gcc/lra-eliminations.c  (Jiong Wang          2014-11-18 09:30:08 +0000 1226)                       && fixed_regs [ep->from]));
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1227) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1228)       /* Mark that is not eliminable anymore.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1229)       elimination_map[ep->from] = NULL;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1230)       for (ep1 = ep + 1; ep1 < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep1++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1231)         if (ep1->can_eliminate && ep1->from == ep->from)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1232)           break;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1233)       if (ep1 < &reg_eliminate[NUM_ELIMINABLE_REGS])
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1234)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1235)           if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1236)             fprintf (lra_dump_file, "    Using elimination %d to %d now\n",
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1237)                      ep1->from, ep1->to);
-542773888190e gcc/lra-eliminations.cc (Michael Matz        2024-08-22 17:09:11 +0200 1238)           lra_assert (known_eq (ep1->previous_offset, -1));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1239)           ep1->previous_offset = ep->offset;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1240)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1241)       else
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1242)         {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1243)           /* There is no elimination anymore just use the hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1244)              register `from' itself.  Setup self elimination
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1245)              offset to restore the original offset values.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1246)           if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1247)             fprintf (lra_dump_file, "    %d is not eliminable at all\n",
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1248)                      ep->from);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1249)           self_elim_offsets[ep->from] = -ep->offset;
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000 1250)           if (maybe_ne (ep->offset, 0))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1251)             bitmap_ior_into (insns_with_changed_offsets,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1252)                              &lra_reg_info[ep->from].insn_bitmap);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1253)         }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1254)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1255) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1256)       INITIAL_ELIMINATION_OFFSET (ep->from, ep->to, ep->offset);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1257)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1258)   setup_elimination_map ();
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1259)   result = false;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1260)   CLEAR_HARD_REG_SET (temp_hard_reg_set);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1261)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1262)     if (elimination_map[ep->from] == NULL)
-764df76cb2dc6 gcc/lra-eliminations.c  (Dimitar Dimitrov    2018-06-28 03:43:48 +0000 1263)       add_to_hard_reg_set (&temp_hard_reg_set, Pmode, ep->from);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1264)     else if (elimination_map[ep->from] == ep)
-d70a81dddc916 gcc/lra-eliminations.c  (Shiva Chen          2013-04-23 17:38:59 +0000 1265)       {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1266)     /* Prevent the hard register into which we eliminate from
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1267)        the usage for pseudos.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1268)         if (ep->from != ep->to)
-764df76cb2dc6 gcc/lra-eliminations.c  (Dimitar Dimitrov    2018-06-28 03:43:48 +0000 1269)       add_to_hard_reg_set (&temp_hard_reg_set, Pmode, ep->to);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000 1270)     if (maybe_ne (ep->previous_offset, ep->offset))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1271)       {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1272)         bitmap_ior_into (insns_with_changed_offsets,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1273)                          &lra_reg_info[ep->from].insn_bitmap);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1274) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1275)         /* Update offset when the eliminate offset have been
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1276)            changed.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1277)         lra_update_reg_val_offset (lra_reg_info[ep->from].val,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1278)                                    ep->offset - ep->previous_offset);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1279)         result = true;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1280)       }
-d70a81dddc916 gcc/lra-eliminations.c  (Shiva Chen          2013-04-23 17:38:59 +0000 1281)       }
-44942965f4eae gcc/lra-eliminations.c  (Richard Sandiford   2019-09-09 17:59:19 +0000 1282)   lra_no_alloc_regs |= temp_hard_reg_set;
-d15e5131845e2 gcc/lra-eliminations.c  (Richard Sandiford   2019-09-09 17:59:25 +0000 1283)   eliminable_regset &= ~temp_hard_reg_set;
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1284)   spill_pseudos (temp_hard_reg_set, NULL);
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1285)   return result;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1286) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1287) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1288) /* Initialize the table of hard registers to eliminate.
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1289)    Pre-condition: global flag frame_pointer_needed has been set before
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1290)    calling this function.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1291) static void
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1292) init_elim_table (void)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1293) {
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1294)   class lra_elim_table *ep;
-522d4efcd3bda gcc/lra-eliminations.c  (Jan-Benedict Glaw   2013-09-27 20:20:35 +0000 1295)   bool value_p;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1296)   const struct elim_table_1 *ep1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1297) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1298)   if (!reg_eliminate)
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1299)     reg_eliminate = XCNEWVEC (class lra_elim_table, NUM_ELIMINABLE_REGS);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1300) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1301)   memset (self_elim_offsets, 0, sizeof (self_elim_offsets));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1302)   /* Initiate member values which will be never changed.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1303)   self_elim_table.can_eliminate = self_elim_table.prev_can_eliminate = true;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1304)   self_elim_table.previous_offset = 0;
-5368023839d4b gcc/lra-eliminations.c  (Bernd Edlinger      2016-09-09 23:08:54 +0000 1305) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1306)   for (ep = reg_eliminate, ep1 = reg_eliminate_1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1307)        ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++, ep1++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1308)     {
-542773888190e gcc/lra-eliminations.cc (Michael Matz        2024-08-22 17:09:11 +0200 1309)       ep->offset = ep->previous_offset = -1;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1310)       ep->from = ep1->from;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1311)       ep->to = ep1->to;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1312)       value_p = (targetm.can_eliminate (ep->from, ep->to)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1313)              && ! (ep->to == STACK_POINTER_REGNUM
-f4eafc3059ff4 gcc/lra-eliminations.c  (H.J. Lu             2012-10-29 21:56:35 +0000 1314)                    && frame_pointer_needed
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1315)                    && (! SUPPORTS_STACK_ALIGNMENT
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1316)                        || ! stack_realign_fp)));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1317)       setup_can_eliminate (ep, value_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1318)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1319) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1320)   /* Build the FROM and TO REG rtx's.  Note that code in gen_rtx_REG
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1321)      will cause, e.g., gen_rtx_REG (Pmode, STACK_POINTER_REGNUM) to
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1322)      equal stack_pointer_rtx.  We depend on this. Threfore we switch
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1323)      off that we are in LRA temporarily.  */
-0c8ecbcd3cf7d gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-09-28 09:41:18 -0400 1324)   lra_in_progress = false;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1325)   for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1326)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1327)       ep->from_rtx = gen_rtx_REG (Pmode, ep->from);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1328)       ep->to_rtx = gen_rtx_REG (Pmode, ep->to);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1329)       eliminable_reg_rtx[ep->from] = ep->from_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1330)     }
-0c8ecbcd3cf7d gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-09-28 09:41:18 -0400 1331)   lra_in_progress = true;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1332) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1333) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1334) /* Function for initialization of elimination once per function.  It
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1335)    sets up sp offset for each insn.  */
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1336) static void
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1337) init_elimination (void)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1338) {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1339)   bool stop_to_sp_elimination_p;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1340)   basic_block bb;
-cfa434f6d2c4e gcc/lra-eliminations.c  (David Malcolm       2014-08-22 18:36:35 +0000 1341)   rtx_insn *insn;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1342)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1343) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1344)   init_elim_table ();
-11cd3bed28f13 gcc/lra-eliminations.c  (David Malcolm       2013-12-09 21:06:06 +0000 1345)   FOR_EACH_BB_FN (bb, cfun)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1346)     {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1347)       curr_sp_change = 0;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1348)       stop_to_sp_elimination_p = false;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1349)       FOR_BB_INSNS (bb, insn)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1350)     if (INSN_P (insn))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1351)       {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1352)         lra_get_insn_recog_data (insn)->sp_offset = curr_sp_change;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1353)         if (NONDEBUG_INSN_P (insn))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1354)           {
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1355)             mark_not_eliminable (PATTERN (insn), VOIDmode);
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000 1356)             if (maybe_ne (curr_sp_change, 0)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1357)                 && find_reg_note (insn, REG_LABEL_OPERAND, NULL_RTX))
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1358)               stop_to_sp_elimination_p = true;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1359)           }
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1360)       }
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1361)       if (! frame_pointer_needed
-73ca989cb823c gcc/lra-eliminations.c  (Richard Sandiford   2017-12-20 12:53:35 +0000 1362)       && (maybe_ne (curr_sp_change, 0) || stop_to_sp_elimination_p)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1363)       && bb->succs && bb->succs->length () != 0)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1364)     for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1365)       if (ep->to == STACK_POINTER_REGNUM)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1366)         setup_can_eliminate (ep, false);
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1367)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1368)   setup_elimination_map ();
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1369) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1370) 
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1371) /* Update and return stack pointer OFFSET after processing X.  */
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1372) poly_int64
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1373) lra_update_sp_offset (rtx x, poly_int64 offset)
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1374) {
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1375)   curr_sp_change = offset;
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1376)   mark_not_eliminable (x, VOIDmode);
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1377)   return curr_sp_change;
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1378) }
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1379) 
-30038a207c10a gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-05-30 15:54:28 -0400 1380) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1381) /* Eliminate hard reg given by its location LOC.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1382) void
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1383) lra_eliminate_reg_if_possible (rtx *loc)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1384) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1385)   int regno;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1386)   class lra_elim_table *ep;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1387) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1388)   lra_assert (REG_P (*loc));
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1389)   if ((regno = REGNO (*loc)) >= FIRST_PSEUDO_REGISTER
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1390)       || ! TEST_HARD_REG_BIT (lra_no_alloc_regs, regno))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1391)     return;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1392)   if ((ep = get_elimination (*loc)) != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1393)     *loc = ep->to_rtx;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1394) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1395) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1396) /* Do (final if FINAL_P or first if FIRST_P) elimination in INSN.  Add
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1397)    the insn for subsequent processing in the constraint pass, update
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1398)    the insn info.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1399) static void
-cfa434f6d2c4e gcc/lra-eliminations.c  (David Malcolm       2014-08-22 18:36:35 +0000 1400) process_insn_for_elimination (rtx_insn *insn, bool final_p, bool first_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1401) {
-d9cf932c33070 gcc/lra-eliminations.c  (Vladimir Makarov    2014-11-13 03:02:49 +0000 1402)   eliminate_regs_in_insn (insn, final_p, first_p, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1403)   if (! final_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1404)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1405)       /* Check that insn changed its code.  This is a case when a move
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1406)      insn becomes an add insn and we do not want to process the
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1407)      insn as a move anymore.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1408)       int icode = recog (PATTERN (insn), insn, 0);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1409) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1410)       if (icode >= 0 && icode != INSN_CODE (insn))
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1411)     {
-7436a1c6750d1 gcc/lra-eliminations.c  (Vladimir Makarov    2019-12-10 22:07:57 +0000 1412)       if (INSN_CODE (insn) >= 0)
-7436a1c6750d1 gcc/lra-eliminations.c  (Vladimir Makarov    2019-12-10 22:07:57 +0000 1413)         /* Insn code is changed.  It may change its operand type
-7436a1c6750d1 gcc/lra-eliminations.c  (Vladimir Makarov    2019-12-10 22:07:57 +0000 1414)            from IN to INOUT.  Inform the subsequent assignment
-7436a1c6750d1 gcc/lra-eliminations.c  (Vladimir Makarov    2019-12-10 22:07:57 +0000 1415)            subpass about this situation.  */
-7436a1c6750d1 gcc/lra-eliminations.c  (Vladimir Makarov    2019-12-10 22:07:57 +0000 1416)         check_and_force_assignment_correctness_p = true;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1417)       INSN_CODE (insn) = icode;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1418)       lra_update_insn_recog_data (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1419)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1420)       lra_update_insn_regno_info (insn);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1421)       lra_push_insn (insn);
-7874b7c5b5992 gcc/lra-eliminations.c  (Vladimir Makarov    2018-02-22 21:17:51 +0000 1422)       lra_set_used_insn_alternative (insn, LRA_UNKNOWN_ALT);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1423)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1424) }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1425) 
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1426) /* Update frame pointer to stack pointer elimination if we started with
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1427)    permitted frame pointer elimination and now target reports that we can not
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1428)    do this elimination anymore.  Record spilled pseudos in SPILLED_PSEUDOS
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1429)    unless it is null, and return the recorded pseudos number.  */
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1430) int
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1431) lra_update_fp2sp_elimination (int *spilled_pseudos)
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1432) {
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1433)   int n;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1434)   HARD_REG_SET set;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1435)   class lra_elim_table *ep;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1436) 
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1437)   if (frame_pointer_needed || !targetm.frame_pointer_required ())
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1438)     return 0;
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300 1439)   gcc_assert (!elimination_2sp_occurred_p);
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1440)   ep = elimination_map[FRAME_POINTER_REGNUM];
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1441)   if (ep->to == STACK_POINTER_REGNUM)
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1442)     {
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1443)       /* Prevent any further uses of fp, say in spill addresses, from being
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1444)      eliminated to sp and affected by sp offsets.  Alas, deactivating the
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1445)      elimination altogether causes the next chosen fp elimination to miss
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1446)      the offset propagation, so it may keep -1 as its prev_offset, and that
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1447)      will make subsequent offsets incorrect.  */
-b49473448966b gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:24 -0300 1448)       ep->to_rtx = ep->from_rtx;
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1449)       setup_can_eliminate (ep, false);
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1450)     }
-7ce8a87f78122 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:19 -0300 1451)   else
-66b6da3b66ed0 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:26 -0300 1452)     for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-66b6da3b66ed0 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:26 -0300 1453)       if (ep->from == FRAME_POINTER_REGNUM && ep->to == STACK_POINTER_REGNUM)
-66b6da3b66ed0 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:26 -0300 1454)     setup_can_eliminate (ep, false);
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1455)   if (lra_dump_file != NULL)
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1456)     fprintf (lra_dump_file,
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1457)          "     Frame pointer can not be eliminated anymore\n");
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1458)   frame_pointer_needed = true;
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1459)   /* If !lra_reg_spill_p, we likely have incomplete range information
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1460)      for pseudos assigned to the frame pointer that will have to be
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1461)      spilled, and so we may end up incorrectly sharing them unless we
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1462)      get live range information for them.  */
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1463)   if (lra_complete_live_ranges ())
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1464)     /* If lives ranges changed, update the aggregate live ranges in
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1465)        slots as well before spilling any further pseudos.  */
-be547188b632d gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:22 -0300 1466)     lra_recompute_slots_live_ranges ();
-66b6da3b66ed0 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:26 -0300 1467)   CLEAR_HARD_REG_SET (set);
-66b6da3b66ed0 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:26 -0300 1468)   add_to_hard_reg_set (&set, Pmode, HARD_FRAME_POINTER_REGNUM);
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1469)   n = spill_pseudos (set, spilled_pseudos);
-3452652236aa7 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-08-16 09:13:54 -0400 1470)   return n;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1471) }
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1472) 
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1473) /* Return true if we have a pseudo assigned to hard frame pointer.  */
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1474) bool
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1475) lra_fp_pseudo_p (void)
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1476) {
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1477)   HARD_REG_SET set;
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1478) 
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1479)   if (frame_pointer_needed)
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1480)     /* At this stage it means we have no pseudos assigned to FP:  */
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1481)     return false;
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1482)   CLEAR_HARD_REG_SET (set);
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1483)   add_to_hard_reg_set (&set, Pmode, HARD_FRAME_POINTER_REGNUM);
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1484)   for (int i = FIRST_PSEUDO_REGISTER; i < max_reg_num (); i++)
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1485)     if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1486)     && overlaps_hard_reg_set_p (set, PSEUDO_REGNO_MODE (i),
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1487)                                 reg_renumber[i]))
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1488)       return true;
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1489)   return false;
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1490) }
-fca0ab08cd936 gcc/lra-eliminations.cc (Vladimir N. Makarov 2024-12-11 15:36:21 -0500 1491) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1492) /* Entry function to do final elimination if FINAL_P or to update
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1493)    elimination register offsets (FIRST_P if we are doing it the first
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1494)    time).  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1495) void
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1496) lra_eliminate (bool final_p, bool first_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1497) {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1498)   unsigned int uid;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1499)   bitmap_head insns_with_changed_offsets;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1500)   bitmap_iterator bi;
-99b1c316ec974 gcc/lra-eliminations.c  (Martin Sebor        2019-07-09 18:32:49 +0000 1501)   class lra_elim_table *ep;
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1502) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1503)   gcc_assert (! final_p || ! first_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1504) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1505)   timevar_push (TV_LRA_ELIMINATE);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1506) 
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1507)   if (first_p)
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1508)     {
-f9a6efa7a71e8 gcc/lra-eliminations.cc (Alexandre Oliva     2025-06-26 21:01:29 -0300 1509)       elimination_2sp_occurred_p = false;
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1510)       init_elimination ();
-2971ff7b1d564 gcc/lra-eliminations.cc (Vladimir N. Makarov 2023-07-19 09:35:37 -0400 1511)     }
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1512) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1513)   bitmap_initialize (&insns_with_changed_offsets, &reg_obstack);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1514)   if (final_p)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1515)     {
-b2b293775a27c gcc/lra-eliminations.c  (Mikhail Maltsev     2015-10-28 01:05:53 +0000 1516)       if (flag_checking)
-b2b293775a27c gcc/lra-eliminations.c  (Mikhail Maltsev     2015-10-28 01:05:53 +0000 1517)     {
-b2b293775a27c gcc/lra-eliminations.c  (Mikhail Maltsev     2015-10-28 01:05:53 +0000 1518)       update_reg_eliminate (&insns_with_changed_offsets);
-b2b293775a27c gcc/lra-eliminations.c  (Mikhail Maltsev     2015-10-28 01:05:53 +0000 1519)       gcc_assert (bitmap_empty_p (&insns_with_changed_offsets));
-b2b293775a27c gcc/lra-eliminations.c  (Mikhail Maltsev     2015-10-28 01:05:53 +0000 1520)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1521)       /* We change eliminable hard registers in insns so we should do
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1522)      this for all insns containing any eliminable hard
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1523)      register.  */
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1524)       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1525)     if (elimination_map[ep->from] != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1526)       bitmap_ior_into (&insns_with_changed_offsets,
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1527)                        &lra_reg_info[ep->from].insn_bitmap);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1528)     }
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1529)   else if (! update_reg_eliminate (&insns_with_changed_offsets))
-5a107a0f0cdf9 gcc/lra-eliminations.c  (Vladimir Makarov    2013-05-07 19:29:05 +0000 1530)     goto lra_eliminate_done;
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1531)   if (lra_dump_file != NULL)
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1532)     {
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1533)       fprintf (lra_dump_file, "New elimination table:\n");
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1534)       print_elim_table (lra_dump_file);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1535)     }
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1536)   EXECUTE_IF_SET_IN_BITMAP (&insns_with_changed_offsets, 0, uid, bi)
-80f466c4a620c gcc/lra-eliminations.c  (Vladimir Makarov    2013-10-03 00:35:43 +0000 1537)     /* A dead insn can be deleted in process_insn_for_elimination.  */
-80f466c4a620c gcc/lra-eliminations.c  (Vladimir Makarov    2013-10-03 00:35:43 +0000 1538)     if (lra_insn_recog_data[uid] != NULL)
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1539)       process_insn_for_elimination (lra_insn_recog_data[uid]->insn,
-8d49e7ef0a184 gcc/lra-eliminations.c  (Vladimir Makarov    2013-11-28 21:45:21 +0000 1540)                                 final_p, first_p);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1541)   bitmap_clear (&insns_with_changed_offsets);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1542) 
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1543) lra_eliminate_done:
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1544)   timevar_pop (TV_LRA_ELIMINATE);
-55a2c3226a3e9 gcc/lra-eliminations.c  (Vladimir Makarov    2012-10-23 15:51:41 +0000 1545) }