SOURCES: gcc-pr20606_pr24069.patch (NEW) - fix profiledbootstrap o...
pluto
pluto at pld-linux.org
Mon Oct 3 11:29:44 CEST 2005
Author: pluto Date: Mon Oct 3 09:29:44 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- fix profiledbootstrap on ppc.
---- Files affected:
SOURCES:
gcc-pr20606_pr24069.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/gcc-pr20606_pr24069.patch
diff -u /dev/null SOURCES/gcc-pr20606_pr24069.patch:1.1
--- /dev/null Mon Oct 3 11:29:44 2005
+++ SOURCES/gcc-pr20606_pr24069.patch Mon Oct 3 11:29:39 2005
@@ -0,0 +1,33 @@
+The problem here is that we have an indirect jump to a label.
+JUMP_LABEL (insn) will be NULL but we will have a reg note REG_LABEL
+for the label. This patch fixes the problem by using that reg note.
+
+PR 24069 is reproducible with a profiledbootstrap on powerpc-linux-gnu
+and PR 20606 is reproducible with a java compiling from byte-code
+with -findirect-dispatch and -fPIC both of which are hard to a testcase
+for the testsuite.
+
+--- gcc/gcc/cfgbuild.c 25 Jun 2005 01:59:28 -0000 1.68
++++ gcc/gcc/cfgbuild.c 2 Oct 2005 18:22:25 -0000
+@@ -347,8 +347,19 @@ make_edges (basic_block min, basic_block
+ /* Otherwise, we have a plain conditional or unconditional jump. */
+ else
+ {
+- gcc_assert (JUMP_LABEL (insn));
+- make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0);
++ rtx label = JUMP_LABEL (insn);
++ /* For indirect jumps to a label, JUMP_LABEL will be NULL, grab
++ the label from the REG_LABEL note which should have been setup
++ correctly already for the indirect jump. */
++ if (!label)
++ {
++ label = find_reg_note (insn, REG_LABEL, NULL_RTX);
++ if (label)
++ label = XEXP (label, 0);
++ }
++
++ gcc_assert (label);
++ make_label_edge (edge_cache, bb, label, 0);
+ }
+ }
+
================================================================
More information about the pld-cvs-commit
mailing list