diff options
author | Ian Lance Taylor <iant@golang.org> | 2017-01-31 23:49:26 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-01-31 23:49:26 +0000 |
commit | 014baadeaf43d66fd8a881b89d0fd2e139474645 (patch) | |
tree | 2e25b72e4eac735680f01492f02c38f30b76fc5e | |
parent | 19bdccb4be4b0c3eae14c5634d25e1a83506a2f0 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 12 |
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 |