Handle noplt in call expanders for AArch64.
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>
Wed, 28 Oct 2015 14:41:10 +0000 (14:41 +0000)
committerRamana Radhakrishnan <ramana@gcc.gnu.org>
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.

From-SVN: r229488

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

index ea88dfafd38186ea1959af12c66f341d92ad71e6..42cf7e28f5abb2f6362f7e365948d651199c3dfa 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 7c052ca34ac0f644bb56f7fe985ec93ebdfc69e5..82438f23c14186b2fc8a447f20f421c696b9ac04 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;