aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2017-01-31 23:49:26 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-01-31 23:49:26 +0000
commit014baadeaf43d66fd8a881b89d0fd2e139474645 (patch)
tree2e25b72e4eac735680f01492f02c38f30b76fc5e
parent19bdccb4be4b0c3eae14c5634d25e1a83506a2f0 (diff)
downloadgcc-014baadeaf43d66fd8a881b89d0fd2e139474645.zip
gcc-014baadeaf43d66fd8a881b89d0fd2e139474645.tar.gz
gcc-014baadeaf43d66fd8a881b89d0fd2e139474645.tar.bz2
i386.c (ix86_expand_split_stack_prologue): Add REG_ARGS_SIZE note to 32-bit push insns and call insn.
* config/i386/i386.c (ix86_expand_split_stack_prologue): Add REG_ARGS_SIZE note to 32-bit push insns and call insn. From-SVN: r245076
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c12
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a264140..02f635e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-31 Ian Lance Taylor <iant@golang.org>
+
+ * config/i386/i386.c (ix86_expand_split_stack_prologue): Add
+ REG_ARGS_SIZE note to 32-bit push insns and call insn.
+
2017-01-31 David Malcolm <dmalcolm@redhat.com>
PR preprocessor/79210
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 377e49a..01a05c6 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -14944,6 +14944,7 @@ ix86_expand_split_stack_prologue (void)
allocate_rtx = GEN_INT (allocate);
args_size = crtl->args.size >= 0 ? crtl->args.size : 0;
call_fusage = NULL_RTX;
+ rtx pop = NULL_RTX;
if (TARGET_64BIT)
{
rtx reg10, reg11;
@@ -15021,13 +15022,18 @@ ix86_expand_split_stack_prologue (void)
}
else
{
- emit_insn (gen_push (GEN_INT (args_size)));
- emit_insn (gen_push (allocate_rtx));
+ rtx_insn *insn = emit_insn (gen_push (GEN_INT (args_size)));
+ add_reg_note (insn, REG_ARGS_SIZE, GEN_INT (UNITS_PER_WORD));
+ insn = emit_insn (gen_push (allocate_rtx));
+ add_reg_note (insn, REG_ARGS_SIZE, GEN_INT (2 * UNITS_PER_WORD));
+ pop = GEN_INT (2 * UNITS_PER_WORD);
}
call_insn = ix86_expand_call (NULL_RTX, gen_rtx_MEM (QImode, fn),
GEN_INT (UNITS_PER_WORD), constm1_rtx,
- NULL_RTX, false);
+ pop, false);
add_function_usage_to (call_insn, call_fusage);
+ if (!TARGET_64BIT)
+ add_reg_note (call_insn, REG_ARGS_SIZE, GEN_INT (0));
/* In order to make call/return prediction work right, we now need
to execute a return instruction. See