This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 03/05/2016 01:02 PM, Richard Henderson wrote:
I was a bit confused trying to figure out how we got a pending stack adjust when we were still in the out-of-ssa pass. But out-of-ssa can call emit_block_copy which can, of course, emit a memcpy.The problem is that we are emitting copy sequences to edges without caring for deferred popping of arguments. Thus when we began emitting code for the first block, which in this case starts with a label, we had 32 bytes of pending stack adjustment, which emit_label flushed. The ICE is due to the label not being the first insn in the BB. There are two equivalent ways to fix this: we can either save/restore inhibit_defer_pop around these sequences, or we can manually flush any pending stack adjustment. This does the latter. Ok? r~ z * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust. (insert_value_copy_on_edge): Likewise. * gcc.c-torture/compile/pr70061.c: New test.
Similarly, I suspect store_expr can do the same for the insert_value_copy_on_edge case.
Ok for the trunk. Thanks for tracking this down. jeff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |