Fix PR48389: ICE in make_edges
Jeff Law
law@redhat.com
Fri Apr 8 15:04:00 GMT 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 04/08/11 07:33, Michael Matz wrote:
> Hi,
>
> the problem is that some initializers expand to loops. If such
> initializers are inserted on edges we have looping control flow on them.
> Even if we have no loops, but normal control flow on them (which can
> happen in other situations) we still forget to initialize JUMP_LABEL on
> them leading to potential problems downstream (no idea why we never hit
> any real problems until we had loops on edges, this problem is latent
> since expand from SSA form).
>
> So, we have to initialize the jump labels somewhen. The obvious idea to
> simply call rebuild_jump_labels after all insertions are done doesn't
> work, because the jump labels are already needed for splitting edges (for
> patching the jump insns), which insertion might cause.
>
> So, instead than this I've added another interface to initialize jump
> labels for a non-main chain of instructions (in fact it's the same as with
> the main chain, merely not diddling with the forced_labels list).
>
> Fixes the testcase, gcc dg.exp is clean, I'm currently regstrapping this
> on x86_64-linux. Okay if that passes?
>
>
> Ciao,
> Michael.
> PR middle-end/48389
> * jump.c (rebuild_jump_labels_1, rebuild_jump_labels_chain): New
> functions.
> (rebuild_jump_labels): Call rebuild_jump_labels_1.
> * rtl.h (rebuild_jump_labels_chain): Declare.
> * cfgexpand.c (expand_gimple_basic_block): Use PAT_VAR_LOCATION_LOC,
> not INSN_VAR_LOCATION_LOC.
> (gimple_expand_cfg): Initialize JUMP_LABEL also on insn inserted
> on edges.
>
> testsuite/
> * gcc.target/i386/pr48389.c: New test.
I'd pondered a similar approach, but hadn't tried an implementation.
Good to see it wasn't hard to make it work. I like this better than
Steven's approach. OK by me.
Jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJNnyPuAAoJEBRtltQi2kC7us4H/02MnP3HKapVMu/DoXAwyxBJ
6lN8xSdFY7Z/DQbHnU9SiKvB8UlcPQs1HHN4MiFrNZ23n0Qhtd4Z4bphbnzb2cXs
gayymOheYGlEy7U/YHTUCjqOryMZbkwYybNbrFTlkl4d5Ymp2HEphZHn8G/8sRIr
9LY4o++M08zvZwX5WGd/NFJ9UosxCayhmfvA+raSwAuoz00EgD2Ns5KiqsLIhSey
A9RxKkV2Czo2piqdO2wlv0NtVzQMAyDsDU5pv+1zec6Vf1UuuZzLslPGVdVyNQqk
NCoz5gO8AyPLiMuNp57W0RtLtXHdwwGGVEv3y5AZ7T4bVvTVlAUuFhixeAc5tQ0=
=jS34
-----END PGP SIGNATURE-----
More information about the Gcc-patches
mailing list