aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2009-05-10 18:40:16 +0000
committerMichael Matz <matz@gcc.gnu.org>2009-05-10 18:40:16 +0000
commitaf618949a430bf38b27a7e897dae4413a78ca8dc (patch)
tree59df119981f2831e61155fd1c19f3604ae41c562 /gcc
parentb7d7a473ab0813c0f52f71248f3c204dfb2451f0 (diff)
downloadgcc-af618949a430bf38b27a7e897dae4413a78ca8dc.zip
gcc-af618949a430bf38b27a7e897dae4413a78ca8dc.tar.gz
gcc-af618949a430bf38b27a7e897dae4413a78ca8dc.tar.bz2
re PR target/40031 (ARM broken with addresses in PHIs with -fPIC)
PR target/40031 * config/arm/arm.c (require_pic_register): Emit on entry edge, not at entry of function. testsuite/ * gcc.dg/pr40031.c: New test. From-SVN: r147350
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr40031.c9
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c0177b..4c6540a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-10 Michael Matz <matz@suse.de>
+
+ PR target/40031
+ * config/arm/arm.c (require_pic_register): Emit on entry edge,
+ not at entry of function.
+
2009-05-10 Richard Guenther <rguenther@suse.de>
PR tree-optimization/40081
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 9264760..1d9b426 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3596,7 +3596,11 @@ require_pic_register (void)
seq = get_insns ();
end_sequence ();
- emit_insn_after (seq, entry_of_function ());
+ /* We can be called during expansion of PHI nodes, where
+ we can't yet emit instructions directly in the final
+ insn stream. Queue the insns on the entry edge, they will
+ be committed after everything else is expanded. */
+ insert_insn_on_edge (seq, single_succ_edge (ENTRY_BLOCK_PTR));
}
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 017cbf4..e0e92ce 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-10 Michael Matz <matz@suse.de>
+
+ PR target/40031
+ * gcc.dg/pr40031.c: New test.
+
2009-05-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/40018
diff --git a/gcc/testsuite/gcc.dg/pr40031.c b/gcc/testsuite/gcc.dg/pr40031.c
new file mode 100644
index 0000000..f6f1f65
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr40031.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target fpic } } */
+/* { dg-options "-O2 -fPIC" } */
+double c;
+double d;
+double *f(int a)
+{
+ if(a) return &c;
+ return &d;
+}