Message ID | 2846170.Qq7a3i2rle@polaris |
---|---|
State | New |
Headers | show |
Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 230204) +++ config/i386/i386.c (working copy) @@ -12245,8 +12245,6 @@ ix86_adjust_stack_and_probe (const HOST_ release_scratch_register_on_entry (&sr); } - gcc_assert (cfun->machine->fs.cfa_reg != stack_pointer_rtx); - /* Even if the stack pointer isn't the CFA register, we need to correctly describe the adjustments made to it, in particular differentiate the frame-related ones from the frame-unrelated ones. */
> Ok if it passes testing. Thanks, it did so I installed the fix yesterday but further testing then revealed an oversight: the following assertion in ix86_adjust_stack_and_probe gcc_assert (cfun->machine->fs.cfa_reg != stack_pointer_rtx); will now evidently trigger (simple testcase attached). I can sched some light on it here since I wrote the code: the initial version of ix86_adjust_stack_and_probe didn't bother generating CFI because it only manipulates the stack pointer and the CFA register was guaranteed to be the frame pointer until yesterday, so I put the assertion to check this guarantee. Then Richard H. enhanced the CFI machinery to always track stack adjustments (IIRC this was a prerequisite for your implementation of shrink-wrapping) so I added code to generate CFI: /* Even if the stack pointer isn't the CFA register, we need to correctly describe the adjustments made to it, in particular differentiate the frame-related ones from the frame-unrelated ones. */ if (size > 0) To sum up, I think that the assertion is obsolete and can be removed without further ado; once done, the compiler generates correct CFI for the testcase. So I installed the following one-liner as obvious after testing on x86-64. 2015-11-12 Eric Botcazou <ebotcazou@adacore.com> PR target/67265 * config/i386/i386.c (ix86_adjust_stack_and_probe): Remove obsolete assertion on the CFA register. 2015-11-12 Eric Botcazou <ebotcazou@adacore.com> * gcc.target/i386/pr67265-2.c: New test.