public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 1/2 v2] xtensa: Recover constant synthesis for HImode after LRA transition
       [not found] <2c6cd2b5-e436-4608-a0b7-ad8a57bc186b.ref@yahoo.co.jp>
@ 2024-02-04 10:20 ` Takayuki 'January June' Suwa
  2024-02-04 21:28   ` Max Filippov
  0 siblings, 1 reply; 2+ messages in thread
From: Takayuki 'January June' Suwa @ 2024-02-04 10:20 UTC (permalink / raw)
  To: GCC Patches; +Cc: Max Filippov

After LRA transition, HImode constants that don't fit into signed 12 bits
are no longer subject to constant synthesis:

    /* example */
    void test(void) {
      short foo = 32767;
      __asm__ ("" :: "r"(foo));
    }

    ;; before
    	.literal_position
    	.literal .LC0, 32767
    test:
    	l32r	a9, .LC0
    	ret.n

This patch fixes that:

    ;; after
    test:
    	movi.n	a9, -1
    	extui	a9, a9, 17, 15
    	ret.n

gcc/ChangeLog:

	* config/xtensa/xtensa.md (SHI): New mode iterator.
	(2 split patterns related to constsynth):
	Change to also accept HImode operands.
---
 gcc/config/xtensa/xtensa.md | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 13b8b57f1fc..1a2249b059a 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -87,6 +87,10 @@
 ;; the same template.
 (define_mode_iterator HQI [HI QI])
 
+;; This mode iterator allows the SI and HI patterns to be defined from
+;; the same template.
+(define_mode_iterator SHI [SI HI])
+
 \f
 ;; Attributes.
 
@@ -1291,28 +1295,30 @@
    (set_attr "length"	"2,2,2,2,2,2,3,3,3,3,6,3,3,3,3,3")])
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand")
-	(match_operand:SI 1 "const_int_operand"))]
+  [(set (match_operand:SHI 0 "register_operand")
+	(match_operand:SHI 1 "const_int_operand"))]
   "!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS
    && ! xtensa_split1_finished_p ()
    && ! xtensa_simm12b (INTVAL (operands[1]))"
   [(set (match_dup 0)
 	(match_dup 1))]
 {
-  operands[1] = force_const_mem (SImode, operands[1]);
+  operands[1] = force_const_mem (<MODE>mode, operands[1]);
 })
 
 (define_split
-  [(set (match_operand:SI 0 "register_operand")
-	(match_operand:SI 1 "constantpool_operand"))]
+  [(set (match_operand:SHI 0 "register_operand")
+	(match_operand:SHI 1 "constantpool_operand"))]
   "! optimize_debug && reload_completed"
   [(const_int 0)]
 {
-  rtx x = avoid_constant_pool_reference (operands[1]);
+  rtx x = avoid_constant_pool_reference (operands[1]), dst = operands[0];
   if (! CONST_INT_P (x))
     FAIL;
-  if (! xtensa_constantsynth (operands[0], INTVAL (x)))
-    emit_move_insn (operands[0], x);
+  if (<MODE>mode == HImode)
+    dst = gen_rtx_REG (SImode, REGNO (dst));
+  if (! xtensa_constantsynth (dst, INTVAL (x)))
+    emit_move_insn (dst, x);
   DONE;
 })
 
-- 
2.30.2

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/2 v2] xtensa: Recover constant synthesis for HImode after LRA transition
  2024-02-04 10:20 ` [PATCH 1/2 v2] xtensa: Recover constant synthesis for HImode after LRA transition Takayuki 'January June' Suwa
@ 2024-02-04 21:28   ` Max Filippov
  0 siblings, 0 replies; 2+ messages in thread
From: Max Filippov @ 2024-02-04 21:28 UTC (permalink / raw)
  To: Takayuki 'January June' Suwa; +Cc: GCC Patches

On Sun, Feb 4, 2024 at 2:20 AM Takayuki 'January June' Suwa
<jjsuwa_sys3175@yahoo.co.jp> wrote:
>
> After LRA transition, HImode constants that don't fit into signed 12 bits
> are no longer subject to constant synthesis:
>
>     /* example */
>     void test(void) {
>       short foo = 32767;
>       __asm__ ("" :: "r"(foo));
>     }
>
>     ;; before
>         .literal_position
>         .literal .LC0, 32767
>     test:
>         l32r    a9, .LC0
>         ret.n
>
> This patch fixes that:
>
>     ;; after
>     test:
>         movi.n  a9, -1
>         extui   a9, a9, 17, 15
>         ret.n
>
> gcc/ChangeLog:
>
>         * config/xtensa/xtensa.md (SHI): New mode iterator.
>         (2 split patterns related to constsynth):
>         Change to also accept HImode operands.
> ---
>  gcc/config/xtensa/xtensa.md | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)

Regtested for target=xtensa-linux-uclibc, no new regressions.
Committed to master.

-- 
Thanks.
-- Max

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-02-04 21:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <2c6cd2b5-e436-4608-a0b7-ad8a57bc186b.ref@yahoo.co.jp>
2024-02-04 10:20 ` [PATCH 1/2 v2] xtensa: Recover constant synthesis for HImode after LRA transition Takayuki 'January June' Suwa
2024-02-04 21:28   ` Max Filippov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).