Commit 5ba53785 by Uros Bizjak Committed by Uros Bizjak

re PR rtl-optimization/66891 (ICE in expand_call, at calls.c:3407)

	PR rtl-optimization/66891
	* calls.c (expand_call): Wrap precompute_register_parameters with
	NO_DEFER_POP/OK_DEFER_POP to prevent deferred pops.

testsuite/ChangeLog:

	PR target/66891
	* gcc.target/i386/pr66891.c: New test.

From-SVN: r225918
parent 92d30ce6
2015-07-17 Uros Bizjak <ubizjak@gmail.com>
PR rtl-optimization/66891
* calls.c (expand_call): Wrap precompute_register_parameters with
NO_DEFER_POP/OK_DEFER_POP to prevent deferred pops.
2015-07-16 Nathan Sidwell <nathan@codesourcery.com> 2015-07-16 Nathan Sidwell <nathan@codesourcery.com>
* config/nvptx/mkoffload.c (process): Constify mapping variables. * config/nvptx/mkoffload.c (process): Constify mapping variables.
......
...@@ -3144,6 +3144,10 @@ expand_call (tree exp, rtx target, int ignore) ...@@ -3144,6 +3144,10 @@ expand_call (tree exp, rtx target, int ignore)
compute_argument_addresses (args, argblock, num_actuals); compute_argument_addresses (args, argblock, num_actuals);
/* Stack is properly aligned, pops can't safely be deferred during
the evaluation of the arguments. */
NO_DEFER_POP;
/* Precompute all register parameters. It isn't safe to compute /* Precompute all register parameters. It isn't safe to compute
anything once we have started filling any specific hard regs. anything once we have started filling any specific hard regs.
TLS symbols sometimes need a call to resolve. Precompute TLS symbols sometimes need a call to resolve. Precompute
...@@ -3151,6 +3155,8 @@ expand_call (tree exp, rtx target, int ignore) ...@@ -3151,6 +3155,8 @@ expand_call (tree exp, rtx target, int ignore)
to avoid unaligned stack in the called function. */ to avoid unaligned stack in the called function. */
precompute_register_parameters (num_actuals, args, &reg_parm_seen); precompute_register_parameters (num_actuals, args, &reg_parm_seen);
OK_DEFER_POP;
/* Perform stack alignment before the first push (the last arg). */ /* Perform stack alignment before the first push (the last arg). */
if (argblock == 0 if (argblock == 0
&& adjusted_args_size.constant > reg_parm_stack_space && adjusted_args_size.constant > reg_parm_stack_space
......
2015-07-17 Uros Bizjak <ubizjak@gmail.com>
PR target/66891
* gcc.target/i386/pr66891.c: New test.
2015-07-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2015-07-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/arm/no-volatile-in-it.c: Skip if -mcpu is overriden. * gcc.target/arm/no-volatile-in-it.c: Skip if -mcpu is overriden.
......
/* { dg-do compile { target ia32 } } */
/* { dg-options "-O2" } */
__attribute__((__stdcall__)) void fn1();
int a;
static void fn2() {
for (;;)
;
}
void fn3() {
fn1(0);
fn2(a == 0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment