aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>2015-10-28 14:41:10 +0000
committerRamana Radhakrishnan <ramana@gcc.gnu.org>2015-10-28 14:41:10 +0000
commiteb9678e7193f97b21d45d4cfe0534c7f22052563 (patch)
treee5c1e82424d5bf74a361659a9cfadb799eee682d /gcc
parente3091406955ec3f0642271143a5007f46ec8c876 (diff)
downloadgcc-eb9678e7193f97b21d45d4cfe0534c7f22052563.zip
gcc-eb9678e7193f97b21d45d4cfe0534c7f22052563.tar.gz
gcc-eb9678e7193f97b21d45d4cfe0534c7f22052563.tar.bz2
Handle noplt in call expanders for AArch64.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.md24
2 files changed, 19 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ea88dfa..42cf7e2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 7c052ca..82438f2 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -696,7 +696,8 @@
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);
@@ -755,7 +756,8 @@
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);
@@ -805,10 +807,11 @@
""
{
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;
@@ -835,10 +838,11 @@
""
{
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;