Handle noplt in call expanders for AArch64.
authorramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 2015 14:41:10 +0000 (14:41 +0000)
committerramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 2015 14:41:10 +0000 (14:41 +0000)
2015-10-28  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

* config/aarch64/aarch64.md (call, call_value, sibcall): Handle noplt.
(sibcall_value): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@229488 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/aarch64/aarch64.md

index ea88dfa..42cf7e2 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-28  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       * config/aarch64/aarch64.md (call, call_value, sibcall): Handle noplt.
+       (sibcall_value): Likewise.
+
 2015-10-28  Nathan Sidwell  <nathan@codesourcery.com>
 
        * config/nvptx/nvptx.h (struct machine_function): Add
index 7c052ca..82438f2 100644 (file)
        the branch-and-link.  */
     callee = XEXP (operands[0], 0);
     if (GET_CODE (callee) == SYMBOL_REF
-       ? aarch64_is_long_call_p (callee)
+       ? (aarch64_is_long_call_p (callee)
+          || aarch64_is_noplt_call_p (callee))
        : !REG_P (callee))
       XEXP (operands[0], 0) = force_reg (Pmode, callee);
 
        the branch-and-link.  */
     callee = XEXP (operands[1], 0);
     if (GET_CODE (callee) == SYMBOL_REF
-       ? aarch64_is_long_call_p (callee)
+       ? (aarch64_is_long_call_p (callee)
+          || aarch64_is_noplt_call_p (callee))
        : !REG_P (callee))
       XEXP (operands[1], 0) = force_reg (Pmode, callee);
 
   ""
   {
     rtx pat;
-
-    if (!REG_P (XEXP (operands[0], 0))
-       && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF))
-     XEXP (operands[0], 0) = force_reg (Pmode, XEXP (operands[0], 0));
+    rtx callee = XEXP (operands[0], 0);
+    if (!REG_P (callee)
+       && ((GET_CODE (callee) != SYMBOL_REF)
+          || aarch64_is_noplt_call_p (callee)))
+      XEXP (operands[0], 0) = force_reg (Pmode, callee);
 
     if (operands[2] == NULL_RTX)
       operands[2] = const0_rtx;
   ""
   {
     rtx pat;
-
-    if (!REG_P (XEXP (operands[1], 0))
-       && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF))
-     XEXP (operands[1], 0) = force_reg (Pmode, XEXP (operands[1], 0));
+    rtx callee = XEXP (operands[1], 0);
+    if (!REG_P (callee)
+       && ((GET_CODE (callee) != SYMBOL_REF)
+          || aarch64_is_noplt_call_p (callee)))
+      XEXP (operands[1], 0) = force_reg (Pmode, callee);
 
     if (operands[3] == NULL_RTX)
       operands[3] = const0_rtx;