diff options
author | Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> | 2015-10-28 14:41:10 +0000 |
---|---|---|
committer | Ramana Radhakrishnan <ramana@gcc.gnu.org> | 2015-10-28 14:41:10 +0000 |
commit | eb9678e7193f97b21d45d4cfe0534c7f22052563 (patch) | |
tree | e5c1e82424d5bf74a361659a9cfadb799eee682d /gcc | |
parent | e3091406955ec3f0642271143a5007f46ec8c876 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.md | 24 |
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; |