| Submitter | Paolo Bonzini |
|---|---|
| Date | Aug. 16, 2010, 10:35 p.m. |
| Message ID | <4C69BD49.9040209@gnu.org> |
| Download | mbox | patch |
| Permalink | /patch/61845/ |
| State | New |
| Headers | show |
Comments
On 08/16/2010 03:35 PM, Paolo Bonzini wrote: > * optabs.c (expand_bool_compare_and_swap): Expand pending > pops before trying the optab. Ok. r~
On Mon, Aug 16, 2010 at 3:35 PM, Paolo Bonzini <bonzini@gnu.org> wrote: > This fixes a bug in expansion of sync_bool_compare_and_swap, where we were > relying on the CC value from the sync_compare_and_swap optab but clobbering > it before reading it. This is due to a do_pending_stack_adjust in > emit_store_flag_1. Fixed by doing the stack adjust before everything else. > > This is a regression from 4.4. The testcase is libgomp; > bootstrapped/regtested x86_64-pc-linux-gnu, checked the problematic file > using -march=i486 -mtune=i586. Ok for 4.5 and trunk? > Can you mention PR 45292 in ChangeLog? Thanks.
Patch
Index: optabs.c =================================================================== --- optabs.c (revision 162940) +++ optabs.c (working copy) @@ -6909,6 +6909,7 @@ expand_bool_compare_and_swap (rtx mem, r if (icode == CODE_FOR_nothing) return NULL_RTX; + do_pending_stack_adjust (); do { start_sequence ();
This fixes a bug in expansion of sync_bool_compare_and_swap, where we were relying on the CC value from the sync_compare_and_swap optab but clobbering it before reading it. This is due to a do_pending_stack_adjust in emit_store_flag_1. Fixed by doing the stack adjust before everything else. This is a regression from 4.4. The testcase is libgomp; bootstrapped/regtested x86_64-pc-linux-gnu, checked the problematic file using -march=i486 -mtune=i586. Ok for 4.5 and trunk? Paolo 2010-08-17 Paolo Bonzini <bonzini@gnu.org> * optabs.c (expand_bool_compare_and_swap): Expand pending pops before trying the optab.