public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH][AARCH64]Use mov for add with large immediate.
@ 2015-04-21 16:10 Renlin Li
  2015-05-01 10:19 ` Marcus Shawcroft
  0 siblings, 1 reply; 4+ messages in thread
From: Renlin Li @ 2015-04-21 16:10 UTC (permalink / raw)
  To: gcc-patches; +Cc: Marcus Shawcroft, Ramana.Radhakrishnan

[-- Attachment #1: Type: text/plain, Size: 396 bytes --]

Hi all,

This is a simple patch to generate a move instruction to temporarily 
hold the large immediate for a add instruction.

GCC regression test has been run using aarch64-none-elf toolchain. NO 
new issues.

Okay for trunk?

Regards,
Renlin Li

gcc/ChangeLog:

2015-04-21  Renlin Li  <renlin.li@arm.com>

     * config/aarch64/aarch64.md (add<mode>3): Use mov when allowed.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: new.diff --]
[-- Type: text/x-patch; name=new.diff, Size: 1275 bytes --]

diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 1f4169e..9ea1939 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -1414,18 +1414,28 @@
   "
   if (! aarch64_plus_operand (operands[2], VOIDmode))
     {
-      rtx subtarget = ((optimize && can_create_pseudo_p ())
-		       ? gen_reg_rtx (<MODE>mode) : operands[0]);
       HOST_WIDE_INT imm = INTVAL (operands[2]);
-
-      if (imm < 0)
-	imm = -(-imm & ~0xfff);
+      if (aarch64_move_imm (imm, <MODE>mode)
+	  && can_create_pseudo_p ())
+      {
+	rtx tmp = gen_reg_rtx (<MODE>mode);
+	emit_move_insn (tmp, operands[2]);
+	operands[2] = tmp;
+      }
       else
-        imm &= ~0xfff;
+      {
+	rtx subtarget = ((optimize && can_create_pseudo_p ())
+			 ? gen_reg_rtx (<MODE>mode) : operands[0]);
+
+	if (imm < 0)
+	  imm = -(-imm & ~0xfff);
+	else
+	  imm &= ~0xfff;
 
-      emit_insn (gen_add<mode>3 (subtarget, operands[1], GEN_INT (imm)));
-      operands[1] = subtarget;
-      operands[2] = GEN_INT (INTVAL (operands[2]) - imm);
+	emit_insn (gen_add<mode>3 (subtarget, operands[1], GEN_INT (imm)));
+	operands[1] = subtarget;
+	operands[2] = GEN_INT (INTVAL (operands[2]) - imm);
+      }
     }
   "
 )

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

end of thread, other threads:[~2015-05-01 15:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-21 16:10 [PATCH][AARCH64]Use mov for add with large immediate Renlin Li
2015-05-01 10:19 ` Marcus Shawcroft
2015-05-01 15:30   ` Renlin Li
2015-05-01 15:41     ` Marcus Shawcroft

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).