summaryrefslogtreecommitdiff
path: root/gcc/config/rs6000/rs6000.md
diff options
context:
space:
mode:
authorJiufu Guo <guojiufu@linux.ibm.com>2020-02-17 10:48:39 +0800
committerJiufu Guo <guojiufu@linux.ibm.com>2020-02-17 10:48:39 +0800
commita8532e9927ad6e4bbedbb957b02ca413aedf9098 (patch)
tree69c9dbdafe0cc4d702a0f8104b1a592da0011e76 /gcc/config/rs6000/rs6000.md
parentf0a33db5fb64f35a56e02e976920ee8400181719 (diff)
rs6000: mark clobber for registers changed by untpyed_call
As PR93047 said, __builtin_apply/__builtin_return does not work well with -frename-registers. This is caused by return register(e.g. r3) is used to rename another register, before return register is stored to stack. This patch fix this issue by emitting clobber for those egisters which maybe changed by untyped call. gcc/ 2020-02-17 Jiufu Guo <guojiufu@linux.ibm.com> PR target/93047 * config/rs6000/rs6000.md (untyped_call): Add emit_clobber. gcc/testsuite 2020-02-17 Jiufu Guo <guojiufu@linux.ibm.com> PR target/93047 * gcc.dg/torture/stackalign/builtin-return-2.c: New test case.
Diffstat (limited to 'gcc/config/rs6000/rs6000.md')
-rw-r--r--gcc/config/rs6000/rs6000.md4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 3da7b1ed9c2..ad88b6783af 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -10870,6 +10870,10 @@
emit_call_insn (gen_call (operands[0], const0_rtx, const0_rtx));
+ for (int i = 0; i < XVECLEN (operands[2], 0); i++)
+ emit_clobber (SET_SRC (XVECEXP (operands[2], 0, i)));
+ emit_insn (gen_blockage ());
+
for (i = 0; i < XVECLEN (operands[2], 0); i++)
{
rtx set = XVECEXP (operands[2], 0, i);