Now that SH has been permanently switched to use LRA for GCC 17, maintaining
old non-LRA code paths seems pointless clutter, so axe it for good.

Tested with

make -k check RUNTESTFLAGS="--target_board=sh-sim\{-m2/-ml,-m2/-mb,-m2a/-
mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}"

Committed to master.

Best regards,
Oleg Endo


gcc/ChangeLog:
        PR target/55212
        * config/sh/sh-protos.h (sh_lra_p): Remove.
        (sh_legitimize_reload_address): Remove.
        * config/sh/sh.h (LEGITIMIZE_RELOAD_ADDRESS): Remove.
        * config/sh/sh.cc (sh_legitimize_reload_address): Remove.
        (prepare_move_operands, broken_move): Remove sh_lra_p uses.
        * config/sh/constraints.md (Rab, Rai, Ssd): Likewise.
        * config/sh/sh.md: Likewise.  Remove reload-only *addsi3 patterns.

gcc/testsuite/ChangeLog:
        PR target/55212
        * gcc.target/sh/pr64366.c: Remove -mlra option.
        * g++.target/sh/torture/pr55212-c311.C: Likewise.
        * g++.target/sh/torture/pr55212-c333.C: Likewise.
        * g++.target/sh/torture/pr55212-c373.C: Likewise.
        * g++.target/sh/torture/pr55212-c384.C: Likewise.
        * g++.target/sh/torture/pr55212-c413.C: Likewise.
From 4508b52341080cd139639de834713bb756ca8176 Mon Sep 17 00:00:00 2001
From: Oleg Endo <[email protected]>
Date: Sat, 4 Jul 2026 17:59:12 +0900
Subject: [PATCH] SH: Remove remaining LRA transition helpers.

gcc/ChangeLog:
	PR target/55212
	* config/sh/sh-protos.h (sh_lra_p): Remove.
	(sh_legitimize_reload_address): Remove.
	* config/sh/sh.h (LEGITIMIZE_RELOAD_ADDRESS): Remove.
	* config/sh/sh.cc (sh_legitimize_reload_address): Remove.
	(prepare_move_operands, broken_move): Remove sh_lra_p uses.
	* config/sh/constraints.md (Rab, Rai, Ssd): Likewise.
	* config/sh/sh.md: Likewise.  Remove reload-only *addsi3 patterns.

gcc/testsuite/ChangeLog:
	PR target/55212
	* gcc.target/sh/pr64366.c: Remove -mlra option.
	* g++.target/sh/torture/pr55212-c311.C: Likewise.
	* g++.target/sh/torture/pr55212-c333.C: Likewise.
	* g++.target/sh/torture/pr55212-c373.C: Likewise.
	* g++.target/sh/torture/pr55212-c384.C: Likewise.
	* g++.target/sh/torture/pr55212-c413.C: Likewise.
---
 gcc/config/sh/constraints.md                       |  29 ++++++++---------------------
 gcc/config/sh/sh-protos.h                          |   7 -------
 gcc/config/sh/sh.cc                                |  88 +++-------------------------------------------------------------------------------------
 gcc/config/sh/sh.h                                 |   9 ---------
 gcc/config/sh/sh.md                                | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------
 gcc/testsuite/g++.target/sh/torture/pr55212-c311.C |   2 +-
 gcc/testsuite/g++.target/sh/torture/pr55212-c333.C |   2 +-
 gcc/testsuite/g++.target/sh/torture/pr55212-c373.C |   2 +-
 gcc/testsuite/g++.target/sh/torture/pr55212-c384.C |   2 +-
 gcc/testsuite/g++.target/sh/torture/pr55212-c413.C |   2 +-
 gcc/testsuite/gcc.target/sh/pr64366.c              |   2 +-
 11 files changed, 85 insertions(+), 267 deletions(-)

diff --git a/gcc/config/sh/constraints.md b/gcc/config/sh/constraints.md
index 7b476dc..0c998d2 100644
--- a/gcc/config/sh/constraints.md
+++ b/gcc/config/sh/constraints.md
@@ -262,23 +262,15 @@
 	    (match_test "~ival == 64")
 	    (match_test "~ival == 128"))))
 
-;; FIXME: LRA and reload behavior differs in memory constraint handling.
-;;        For LRA memory address constraints need to narrow the register type
-;;        restrictions.  It seems  the address RTX validation is done slightly
-;;        differently.  Remove the non-LRA paths eventually.
+;; For LRA memory address constraints need to narrow the register type
+;; restrictions.
 (define_constraint "Rab"
   "@internal address base register constraint"
-  (ior (and (match_test "sh_lra_p ()")
-	    (match_test "MAYBE_BASE_REGISTER_RTX_P (op, false)"))
-       (and (match_test "!sh_lra_p ()")
-	    (match_code "reg"))))
+  (match_test "MAYBE_BASE_REGISTER_RTX_P (op, false)"))
 
 (define_constraint "Rai"
   "@internal address index register constraint"
-  (ior (and (match_test "sh_lra_p ()")
-	    (match_test "MAYBE_INDEX_REGISTER_RTX_P (op, false)"))
-       (and (match_test "!sh_lra_p ()")
-	    (match_code "reg"))))
+  (match_test "MAYBE_INDEX_REGISTER_RTX_P (op, false)"))
 
 (define_memory_constraint "Sua"
   "A memory reference that allows simple register or post-inc addressing."
@@ -310,15 +302,10 @@
 
 (define_memory_constraint "Ssd"
   "A memory reference that excludes index and displacement addressing."
-  (ior (and (match_code "mem")
-	    (match_test "! sh_lra_p ()")
-	    (match_test "! satisfies_constraint_Sid (op)")
-	    (match_test "! satisfies_constraint_Sdd (op)"))
-       (and (match_code "mem")
-	    (match_test "sh_lra_p ()")
-	    (ior (match_test "satisfies_constraint_Rab (XEXP (op, 0))")
-		 (and (ior (match_code "pre_dec" "0") (match_code "post_inc" "0"))
-		 (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))"))))))
+  (and (match_code "mem")
+       (ior (match_test "satisfies_constraint_Rab (XEXP (op, 0))")
+	    (and (ior (match_code "pre_dec" "0") (match_code "post_inc" "0"))
+	    (match_test "satisfies_constraint_Rab (XEXP (XEXP (op, 0), 0))")))))
 
 (define_memory_constraint "Sbv"
   "A memory reference, as used in SH2A bclr.b, bset.b, etc."
diff --git a/gcc/config/sh/sh-protos.h b/gcc/config/sh/sh-protos.h
index c040af2..7379649 100644
--- a/gcc/config/sh/sh-protos.h
+++ b/gcc/config/sh/sh-protos.h
@@ -41,12 +41,6 @@ extern rtx sh_fsca_int2sf (void);
 
 /* Declare functions defined in sh.cc and used in templates.  */
 
-/* FIXME: sh_lra_p is for transional purposes only.  Remove it eventually.  */
-inline bool sh_lra_p (void)
-{
-  return true;
-}
-
 extern const char *output_branch (int, rtx_insn *, rtx *);
 extern const char *output_ieee_ccmpeq (rtx_insn *, rtx *);
 extern const char *output_branchy_insn (enum rtx_code, const char *,
@@ -61,7 +55,6 @@ extern int sh_loop_align (rtx_insn *);
 extern bool fp_zero_operand (rtx);
 extern bool fp_one_operand (rtx);
 extern bool sh_legitimate_index_p (machine_mode, rtx, bool, bool);
-extern bool sh_legitimize_reload_address (rtx *, machine_mode, int, int);
 extern rtx legitimize_pic_address (rtx, machine_mode, rtx);
 extern bool nonpic_symbol_mentioned_p (rtx);
 extern void output_pic_addr_const (FILE *, rtx);
diff --git a/gcc/config/sh/sh.cc b/gcc/config/sh/sh.cc
index b6ea720..9e488bf 100644
--- a/gcc/config/sh/sh.cc
+++ b/gcc/config/sh/sh.cc
@@ -1657,8 +1657,7 @@ prepare_move_operands (rtx operands[], machine_mode mode)
 	 in some situation.  It isn't the case for SH in the problematic
 	 case.  We can pre-allocate R0 for that index term to avoid
 	 the issue.  See PR target/66591.  */
-      else if (sh_lra_p ()
-	       && ! TARGET_SH2A
+      else if (! TARGET_SH2A
 	       && ((REG_P (operands[0]) && MEM_P (operands[1]))
 		   || (REG_P (operands[1]) && MEM_P (operands[0]))))
 	{
@@ -4820,17 +4819,8 @@ broken_move (rtx_insn *insn)
 		&& GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
 		&& (fp_zero_operand (SET_SRC (pat))
 		    || fp_one_operand (SET_SRC (pat)))
-		/* In general we don't know the current setting of fpscr, so
-		   disable fldi.
-		   There is an exception if this was a register-register move
-		   before reload - and hence it was ascertained that we have
-		   single precision setting - and in a post-reload optimization
-		   we changed this to do a constant load.  In that case
-		   we don't have an r0 clobber, hence we must use fldi.  */
-		&& (TARGET_FMOVD
-		    || sh_lra_p ()
-		    || (GET_CODE (XEXP (XVECEXP (PATTERN (insn), 0, 2), 0))
-			== SCRATCH))
+		/* fldi can materialize the fp constants 0 and 1 directly in
+		   an fp register, so such a move is not broken.  */
 		&& REG_P (SET_DEST (pat))
 		&& FP_REGISTER_P (REGNO (SET_DEST (pat))))
 	  && ! (TARGET_SH2A
@@ -9273,78 +9263,6 @@ sh_legitimize_address (rtx x, rtx oldx, machine_mode mode)
   return x;
 }
 
-/* Attempt to replace *p, which is an address that needs reloading, with
-   a valid memory address for an operand of mode MODE.
-   Like for sh_legitimize_address, for the SH we try to get a normal form
-   of the address.  That will allow inheritance of the address reloads.  */
-bool
-sh_legitimize_reload_address (rtx *p, machine_mode mode, int opnum,
-			      int itype)
-{
-  enum reload_type type = (enum reload_type) itype;
-  const int mode_sz = GET_MODE_SIZE (mode);
-
-  if (sh_lra_p ())
-    return false;
-
-  if (GET_CODE (*p) == PLUS && CONST_INT_P (XEXP (*p, 1))
-      && MAYBE_BASE_REGISTER_RTX_P (XEXP (*p, 0), true))
-    {
-      const HOST_WIDE_INT offset = INTVAL (XEXP (*p, 1));
-      struct disp_adjust adj = sh_find_mov_disp_adjust (mode, offset);
-
-      if (TARGET_SH2A && mode == DFmode && (offset & 0x7))
-	{
-	  push_reload (*p, NULL_RTX, p, NULL,
-		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
-	  return true;
-	}
-
-      if (TARGET_SH2E && mode == SFmode)
-	{
-	  *p = copy_rtx (*p);
-	  push_reload (*p, NULL_RTX, p, NULL,
-		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
-	  return true;
-	}
-
-      /* FIXME: Do not allow to legitimize QImode and HImode displacement
-	 moves because then reload has a problem figuring the constraint
-	 that the move insn target/source reg must be R0.
-	 Or maybe some handling is wrong in sh_secondary_reload for this
-	 to work properly? */
-      if ((mode_sz == 4 || mode_sz == 8)
-	  && ! (TARGET_SH4 && mode == DFmode)
-	  && adj.offset_adjust != NULL_RTX && adj.mov_disp != NULL_RTX)
-	{
-	  rtx sum = gen_rtx_PLUS (Pmode, XEXP (*p, 0), adj.offset_adjust);
-	  *p = gen_rtx_PLUS (Pmode, sum, adj.mov_disp);
-	  push_reload (sum, NULL_RTX, &XEXP (*p, 0), NULL,
-		       BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
-	  return true;
-	}
-    }
-
-  /* We must re-recognize what we created before.  */
-  if (GET_CODE (*p) == PLUS
-      && (mode_sz == 4 || mode_sz == 8)
-      && GET_CODE (XEXP (*p, 0)) == PLUS
-      && CONST_INT_P (XEXP (XEXP (*p, 0), 1))
-      && MAYBE_BASE_REGISTER_RTX_P (XEXP (XEXP (*p, 0), 0), true)
-      && CONST_INT_P (XEXP (*p, 1))
-      && ! (TARGET_SH2E && mode == SFmode))
-    {
-      /* Because this address is so complex, we know it must have
-	 been created by LEGITIMIZE_RELOAD_ADDRESS before; thus,
-	 it is already unshared, and needs no further unsharing.  */
-      push_reload (XEXP (*p, 0), NULL_RTX, &XEXP (*p, 0), NULL,
-		   BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, opnum, type);
-      return true;
-    }
-
-  return false;
-}
-
 /* In the name of slightly smaller debug output, and to cater to
    general assembler lossage, recognize various UNSPEC sequences
    and turn them back into a direct symbol reference.  */
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index b0740ad..9b2ed6a 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -1403,15 +1403,6 @@ extern bool current_function_interrupt;
 #endif
 
 
-/* A C compound statement that attempts to replace X, which is an address
-   that needs reloading, with a valid memory address for an operand of
-   mode MODE.  WIN is a C statement label elsewhere in the code.  */
-#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_LEVELS,WIN)	\
-  do {									\
-    if (sh_legitimize_reload_address (&(X), (MODE), (OPNUM), (TYPE)))	\
-      goto WIN;								\
-  } while (0)
-
 /* Specify the machine mode that this machine uses
    for the index in the tablejump instruction.  */
 #define CASE_VECTOR_MODE ((! optimize || TARGET_BIGTABLE) ? SImode : HImode)
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index d5f6c80..18744d3 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -1785,7 +1785,7 @@
 {
   if (!arith_operand (operands[2], SImode))
     {
-      if (!sh_lra_p () || reg_overlap_mentioned_p (operands[0], operands[1]))
+      if (reg_overlap_mentioned_p (operands[0], operands[1]))
 	{
 	  emit_insn (gen_addsi3_scr (operands[0], operands[1], operands[2]));
 	  DONE;
@@ -1801,16 +1801,13 @@
 ;; copy or constant load before the actual add insn.
 ;; Use u constraint for that case to avoid the invalid value in the stack
 ;; pointer.
-;; This also results in better code when LRA is not used.  However, we have
-;; to use different sets of patterns and the order of these patterns is
-;; important.
 ;; In some cases the constant zero might end up in operands[2] of the
 ;; patterns.  We have to accept that and convert it into a reg-reg move.
 (define_insn_and_split "*addsi3_compact_lra"
   [(set (match_operand:SI 0 "arith_reg_dest" "=r,&u")
 	(plus:SI (match_operand:SI 1 "arith_reg_operand" "%0,r")
 		 (match_operand:SI 2 "arith_or_int_operand" "rI08,rn")))]
-  "TARGET_SH1 && sh_lra_p ()
+  "TARGET_SH1
    && (! reg_overlap_mentioned_p (operands[0], operands[1])
        || arith_operand (operands[2], SImode))"
   "@
@@ -1870,64 +1867,6 @@
 }
   [(set_attr "type" "arith")])
 
-;; Old reload might generate add insns directly (not through the expander) for
-;; address register calculations when reloading, in which case it won't try
-;; the addsi_scr pattern.  Because reload will sometimes try to validate
-;; the generated insns and their constraints, this pattern must be
-;; recognizable during and after reload.  However, when reload generates
-;; address register calculations for the stack pointer, we don't allow this
-;; pattern.  This will make reload prefer using indexed @(reg + reg) address
-;; modes when the displacement of a @(disp + reg) doesn't fit.
-(define_insn_and_split "*addsi3"
-  [(set (match_operand:SI 0 "arith_reg_dest" "=r")
-	(plus:SI (match_operand:SI 1 "arith_reg_operand" "r")
-		 (match_operand:SI 2 "arith_or_int_operand" "rn")))]
-  "TARGET_SH1 && !sh_lra_p ()
-   && (reload_completed || reload_in_progress)
-   && !reg_overlap_mentioned_p (operands[0], operands[1])
-   && (!reload_in_progress
-       || ((!REG_P (operands[1]) || REGNO (operands[1]) != SP_REG)
-	   && (!REG_P (operands[2]) || REGNO (operands[2]) != SP_REG)))"
-  "#"
-  "&& 1"
-  [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2)))]
-{
-  if (operands[2] == const0_rtx)
-    {
-      emit_move_insn (operands[0], operands[1]);
-      DONE;
-    }
-
-  if (CONST_INT_P (operands[2]))
-    {
-      if (satisfies_constraint_I08 (operands[2]))
-	emit_move_insn (operands[0], operands[1]);
-      else
-	{
-	  emit_move_insn (operands[0], operands[2]);
-	  operands[2] = operands[1];
-	}
-    }
-  else if (!reg_overlap_mentioned_p (operands[0], operands[2]))
-    emit_move_insn (operands[0], operands[1]);
-  else
-    operands[2] = operands[1];
-})
-
-(define_insn_and_split "*addsi3"
-  [(set (match_operand:SI 0 "arith_reg_dest" "=r,r")
-	(plus:SI (match_operand:SI 1 "arith_reg_operand" "%0,r")
-		 (match_operand:SI 2 "arith_operand" "rI08,Z")))]
-  "TARGET_SH1 && !sh_lra_p ()"
-  "@
-	add	%2,%0
-	#"
-  "&& operands[2] == const0_rtx"
-  [(set (match_dup 0) (match_dup 1))]
-{
-}
-  [(set_attr "type" "arith")])
-
 ;; -------------------------------------------------------------------------
 ;; Subtraction instructions
 ;; -------------------------------------------------------------------------
@@ -4839,7 +4778,6 @@
      register operand for the QI/HImode load.
      See the comment in sh.cc:prepare_move_operand and PR target/55212.  */
   if (! lra_in_progress && ! reload_completed
-      && sh_lra_p ()
       && ! TARGET_SH2A
       && arith_reg_dest (operands[0], <MODE>mode)
       && short_displacement_mem_operand (operands[1], <MODE>mode))
@@ -4909,7 +4847,7 @@
 	(sign_extend:SI
 	    (match_operand:QIHI 1 "short_displacement_mem_operand" "m")))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH1 && ! TARGET_SH2A && sh_lra_p ()"
+  "TARGET_SH1 && ! TARGET_SH2A"
   "#"
   "&& 1"
   [(set (match_dup 2) (sign_extend:SI (match_dup  1)))
@@ -5410,7 +5348,6 @@
     }
 
   if (! lra_in_progress && ! reload_completed
-      && sh_lra_p ()
       && ! TARGET_SH2A
       && arith_reg_operand (operands[1], <MODE>mode)
       && satisfies_constraint_Sid (operands[0]))
@@ -5433,16 +5370,16 @@
   [(set (mem:QIHI (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
 			   (match_operand:SI 1 "hard_reg_r0" "z")))
 	(match_operand:QIHI 2 "arith_reg_operand" "r"))]
-  "TARGET_SH1 && ! TARGET_SH2A && sh_lra_p ()"
+  "TARGET_SH1 && ! TARGET_SH2A"
   "mov.<bw>	%2,@(%1,%0)"
   [(set_attr "type" "store")])
 
 (define_insn_and_split "mov<mode>_store_mem_index"
   [(set (mem:QIHI (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
 			   (match_operand:SI 1 "arith_reg_operand" "^zr")))
 	(match_operand:QIHI 2 "arith_reg_operand" "r"))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH1 && ! TARGET_SH2A && sh_lra_p ()"
+  "TARGET_SH1 && ! TARGET_SH2A"
   "#"
   "&& 1"
   [(set (match_dup 3) (match_dup 1))
@@ -5745,7 +5682,7 @@
 	(match_operand:DF 1 "const_double_operand" "F"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI R0_REG))]
-  "TARGET_FPU_DOUBLE && sh_lra_p ()"
+  "TARGET_FPU_DOUBLE"
   "#"
   [(set_attr "type" "pcfload")
    (set (attr "length") (if_then_else (eq_attr "fmovd" "yes") (const_int 4) (const_int 8)))
@@ -5896,7 +5833,7 @@
   [(set (match_operand:SF 0 "register_operand")
 	(match_operand:SF 1 "register_operand"))
    (use (reg:SI FPSCR_MODES_REG))]
-  "TARGET_SH2E && sh_lra_p () && reload_completed
+  "TARGET_SH2E && reload_completed
    && true_regnum (operands[0]) == true_regnum (operands[1])"
   [(set (match_dup 0) (match_dup 0))])
 
@@ -6144,9 +6081,7 @@
   prepare_move_operands (operands, DFmode);
   if (TARGET_FPU_DOUBLE)
     {
-      if (sh_lra_p ()
-	  && (GET_CODE (operands[1]) == CONST_DOUBLE
-	  && REG_P (operands[0])))
+      if (GET_CODE (operands[1]) == CONST_DOUBLE && REG_P (operands[0]))
 	{
 	  emit_insn (gen_movdf_i4_F_z (operands[0], operands[1]));
 	  DONE;
@@ -6286,7 +6221,7 @@
 	(match_operand:SF 1 "general_movsrc_operand"
 				" f,r,G,H,m,f,FQ,m,r,y,f,>,y,r,y,>,y"))
    (use (reg:SI FPSCR_MODES_REG))]
-  "TARGET_SH2E && sh_lra_p ()
+  "TARGET_SH2E
    && ! sh_movsf_ie_y_split_p (operands[0], operands[1])
    && (arith_reg_operand (operands[0], SFmode)
        || fpul_operand (operands[0], SFmode)
@@ -6362,7 +6297,7 @@
 	(match_operand:SF 1 "arith_reg_operand" "f,r,fr"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (match_scratch:SF 2 "=X,X,y"))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "@
 	fmov	%1,%0
 	mov	%1,%0
@@ -6391,27 +6326,27 @@
 	(match_operand:SF 1 "const_double_operand" "F"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "#"
   [(set_attr "type" "pcfload")
    (set_attr "length" "4")])
 
 (define_insn "movsf_ie_Q_z"
   [(set (match_operand:SF 0 "fpul_operand" "=y")
 	(match_operand:SF 1 "pc_relative_load_operand" "Q"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "#"
   [(set_attr "type" "pcfload")
    (set_attr "length" "4")])
 
 (define_insn "movsf_ie_y"
   [(set (match_operand:SF 0 "arith_reg_dest" "=fr")
 	(match_operand:SF 1 "arith_reg_operand" "rf"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI FPUL_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "#"
   [(set_attr "type" "*")
    (set_attr "length" "4")])
@@ -6441,17 +6376,17 @@
 			 (match_operand:SI 1 "hard_reg_r0" "z")))
 	(match_operand:SF 2 "fp_arith_reg_operand" "f"))
     (use (reg:SI FPSCR_MODES_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "fmov.s    %2,@(%1,%0)"
   [(set_attr "type" "store")])
 
 (define_insn_and_split "movsf_ie_store_mem_index"
   [(set (mem:SF (plus:SI (match_operand:SI 0 "arith_reg_operand" "%r")
 			 (match_operand:SI 1 "arith_reg_operand" "^zr")))
 	(match_operand:SF 2 "fp_arith_reg_operand" "f"))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "#"
   "&& 1"
   [(set (match_dup 3) (match_dup 1))
@@ -6471,17 +6406,17 @@
 	(mem:SF (plus:SI (match_operand:SI 1 "arith_reg_operand" "%r")
 			 (match_operand:SI 2 "hard_reg_r0" "z"))))
    (use (reg:SI FPSCR_MODES_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "fmov.s    @(%2,%1),%0"
   [(set_attr "type" "load")])
 
 (define_insn_and_split "movsf_ie_load_mem_index"
   [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f")
 	(mem:SF (plus:SI (match_operand:SI 1 "arith_reg_operand" "%r")
 			 (match_operand:SI 2 "arith_reg_operand" "^zr"))))
    (use (reg:SI FPSCR_MODES_REG))
    (clobber (reg:SI R0_REG))]
-  "TARGET_SH2E && sh_lra_p ()"
+  "TARGET_SH2E"
   "#"
   "&& 1"
   [(set (match_dup 3) (match_dup 2))
@@ -6680,66 +6615,60 @@
   prepare_move_operands (operands, SFmode);
   if (TARGET_SH2E)
     {
-      if (sh_lra_p ())
+      if (GET_CODE (operands[0]) == SCRATCH)
+	DONE;
+      if (! lra_in_progress && ! reload_completed
+	  && fp_arith_reg_operand (operands[1], SFmode)
+	  && satisfies_constraint_Sid (operands[0]))
 	{
-	  if (GET_CODE (operands[0]) == SCRATCH)
-	    DONE;
-	  if (! lra_in_progress && ! reload_completed
-	      && fp_arith_reg_operand (operands[1], SFmode)
-	      && satisfies_constraint_Sid (operands[0]))
-	    {
-	      rtx adr = XEXP (operands[0], 0);
-	      rtx base = XEXP (adr, 0);
-	      rtx idx = XEXP (adr, 1);
-	      emit_insn (gen_movsf_ie_store_mem_index (base, idx, operands[1]));
-	      DONE;
-	    }
-	  if (! lra_in_progress && ! reload_completed
-	      && fp_arith_reg_operand (operands[0], SFmode)
-	      && satisfies_constraint_Sid (operands[1]))
-	    {
-	      rtx adr = XEXP (operands[1], 0);
-	      rtx base = XEXP (adr, 0);
-	      rtx idx = XEXP (adr, 1);
-	      emit_insn (gen_movsf_ie_load_mem_index (operands[0], base, idx));
-	      DONE;
-	    }
-	  /* reg from/to multiword subreg may be splitted to several reg from/to
-	     subreg of SImode by subreg1 pass.  This confuses our splitted
-	     movsf logic for LRA and will end up in bad code or ICE.  Use a special
-	     pattern so that LRA can optimize this case.  */
-	  if (! lra_in_progress && ! reload_completed
-	      && sh_movsf_ie_subreg_multiword_p (operands[0], operands[1]))
-	    {
-	      emit_insn (gen_movsf_ie_rffr (operands[0], operands[1]));
-	      DONE;
-	    }
-	  if (GET_CODE (operands[1]) == CONST_DOUBLE
-	      &&  ! satisfies_constraint_G (operands[1])
-	      &&  ! satisfies_constraint_H (operands[1])
-	      && REG_P (operands[0]))
-	    {
-	      if (lra_in_progress)
-	        emit_insn (gen_movsf_ie (operands[0], operands[1]));
-	      else
-	        emit_insn (gen_movsf_ie_F_z (operands[0], operands[1]));
-	    }
-	  else if (REG_P (operands[0]) && REGNO (operands[0]) == FPUL_REG
-		   && satisfies_constraint_Q (operands[1]))
-	    emit_insn (gen_movsf_ie_Q_z (operands[0], operands[1]));
-	  else if (sh_movsf_ie_y_split_p (operands[0], operands[1]))
-	    {
-	      if (lra_in_progress)
-		emit_insn (gen_movsf_ie (operands[0], operands[1]));
-	      else
-		emit_insn (gen_movsf_ie_y (operands[0], operands[1]));
-	    }
-	  else
-	    emit_insn (gen_movsf_ie_ra (operands[0], operands[1]));
+	  rtx adr = XEXP (operands[0], 0);
+	  rtx base = XEXP (adr, 0);
+	  rtx idx = XEXP (adr, 1);
+	  emit_insn (gen_movsf_ie_store_mem_index (base, idx, operands[1]));
 	  DONE;
 	}
-
-      emit_insn (gen_movsf_ie (operands[0], operands[1]));
+      if (! lra_in_progress && ! reload_completed
+	  && fp_arith_reg_operand (operands[0], SFmode)
+	  && satisfies_constraint_Sid (operands[1]))
+	{
+	  rtx adr = XEXP (operands[1], 0);
+	  rtx base = XEXP (adr, 0);
+	  rtx idx = XEXP (adr, 1);
+	  emit_insn (gen_movsf_ie_load_mem_index (operands[0], base, idx));
+	  DONE;
+	}
+      /* reg from/to multiword subreg may be splitted to several reg from/to
+	 subreg of SImode by subreg1 pass.  This confuses our splitted
+	 movsf logic for LRA and will end up in bad code or ICE.  Use a special
+	 pattern so that LRA can optimize this case.  */
+      if (! lra_in_progress && ! reload_completed
+	  && sh_movsf_ie_subreg_multiword_p (operands[0], operands[1]))
+	{
+	  emit_insn (gen_movsf_ie_rffr (operands[0], operands[1]));
+	  DONE;
+	}
+      if (GET_CODE (operands[1]) == CONST_DOUBLE
+	  &&  ! satisfies_constraint_G (operands[1])
+	  &&  ! satisfies_constraint_H (operands[1])
+	  && REG_P (operands[0]))
+	{
+	  if (lra_in_progress)
+	    emit_insn (gen_movsf_ie (operands[0], operands[1]));
+	  else
+	    emit_insn (gen_movsf_ie_F_z (operands[0], operands[1]));
+	}
+      else if (REG_P (operands[0]) && REGNO (operands[0]) == FPUL_REG
+	       && satisfies_constraint_Q (operands[1]))
+	emit_insn (gen_movsf_ie_Q_z (operands[0], operands[1]));
+      else if (sh_movsf_ie_y_split_p (operands[0], operands[1]))
+	{
+	  if (lra_in_progress)
+	    emit_insn (gen_movsf_ie (operands[0], operands[1]));
+	  else
+	    emit_insn (gen_movsf_ie_y (operands[0], operands[1]));
+	}
+      else
+	emit_insn (gen_movsf_ie_ra (operands[0], operands[1]));
       DONE;
     }
 })
diff --git a/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C b/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
index cc31dbc..1edf962 100644
--- a/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
+++ b/gcc/testsuite/g++.target/sh/torture/pr55212-c311.C
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-mlra -fpic" }  */
+/* { dg-additional-options "-fpic" }  */
 /* { dg-do compile }  */
 
 
diff --git a/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C b/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
index afab629..31e636a 100644
--- a/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
+++ b/gcc/testsuite/g++.target/sh/torture/pr55212-c333.C
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
+/* { dg-additional-options "-std=c++20 -fpic -w " }  */
 /* { dg-do compile }  */
 
 typedef unsigned int size_t;
diff --git a/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C b/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
index d1f30cb..ecf731a 100644
--- a/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
+++ b/gcc/testsuite/g++.target/sh/torture/pr55212-c373.C
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
+/* { dg-additional-options "-std=c++20 -fpic -w " }  */
 /* { dg-do compile }  */
 
       namespace std {
diff --git a/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C b/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
index f461364..972f258 100644
--- a/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
+++ b/gcc/testsuite/g++.target/sh/torture/pr55212-c384.C
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
+/* { dg-additional-options "-std=c++20 -fpic -w " }  */
 /* { dg-do compile }  */
 
    typedef unsigned int size_t;
diff --git a/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C b/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
index 13eb1ff..9773686 100644
--- a/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
+++ b/gcc/testsuite/g++.target/sh/torture/pr55212-c413.C
@@ -1,4 +1,4 @@
-/* { dg-additional-options "-std=c++20 -mlra -fpic -w " }  */
+/* { dg-additional-options "-std=c++20 -fpic -w " }  */
 /* { dg-do compile }  */
 
 struct Trans_NS_WTF_HashMap
diff --git a/gcc/testsuite/gcc.target/sh/pr64366.c b/gcc/testsuite/gcc.target/sh/pr64366.c
index 4fe29c3..f13fc93 100644
--- a/gcc/testsuite/gcc.target/sh/pr64366.c
+++ b/gcc/testsuite/gcc.target/sh/pr64366.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -mlra -std=gnu17" } */
+/* { dg-options "-O2 -std=gnu17" } */
 
 typedef int int8_t __attribute__ ((__mode__ (__QI__)));
 typedef int int16_t __attribute__ ((__mode__ (__HI__)));
--
libgit2 1.9.0

Reply via email to