Hi, The attached RFC-patch adds a pass to hoist common code that is found in all case labels of a switch expression (PR11832).
I get an ICE in tree_redirect_edge_and_branch() though, so my question is if i forgot some kind of needed fixup? TIA for any pointers.. The ICE (against r127248 in case that matters) looks like: ----- 8< ----- /scratch/obj/gcc-4.3/./prev-gcc/xgcc -B/scratch/obj/gcc-4.3/./prev-gcc/ -B/opt/gcc-4.3//i686-linux-gnu/bin/ -c -DHAVE_CONFIG_H -Os -march=i386 -mtune=i386 -finline-limit=0 -g3 -ggdb3 -I. -I../../../src/gcc-4.3/libiberty/../include -W -Wall -Wwrite-strings -Wc++-compat -Wstrict-prototypes -pedantic -fpic ../../../src/gcc-4.3/libiberty/cp-demangle.c -o pic/cp-demangle.o; \ else true; fi ../../../src/gcc-4.3/libiberty/cp-demangle.c: In function 'd_make_comp': ../../../src/gcc-4.3/libiberty/cp-demangle.c:745: internal compiler error: in tree_redirect_edge_and_branch, at tree-cfg.c:4835 ----- 8< ----- PS: The patch below may contain a few completely unrelated edits, mostly cleanups and a comment. Please disregard all such unrelated hunks for now.
gcc-4.3-switchhoisting.01c.diff.bz2
Description: BZip2 compressed data