aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-01-28 17:50:22 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-01-28 17:50:22 +0100
commitdb1fb332e127cef6bcbfd861e597ddb84505210f (patch)
tree0db0e0a407245a418257e3f7b74f6a99171a2878 /gcc
parent16917761718f236f6e40a043a64c746f174870ef (diff)
downloadgcc-db1fb332e127cef6bcbfd861e597ddb84505210f.zip
gcc-db1fb332e127cef6bcbfd861e597ddb84505210f.tar.gz
gcc-db1fb332e127cef6bcbfd861e597ddb84505210f.tar.bz2
re PR rtl-optimization/56117 (ICE: in cselib_subst_to_values, at cselib.c:1853 with -O2 -fsched2-use-superblocks and __builtin_prefetch())
PR rtl-optimization/56117 * sched-deps.c (sched_analyze_2) <case PREFETCH>: For use_cselib call cselib_lookup_from_insn on the MEM before calling add_insn_mem_dependence. * gcc.dg/pr56117.c: New test. From-SVN: r195513
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/sched-deps.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr56117.c9
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3bc0bd1..cab97ef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-01-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/56117
+ * sched-deps.c (sched_analyze_2) <case PREFETCH>: For use_cselib
+ call cselib_lookup_from_insn on the MEM before calling
+ add_insn_mem_dependence.
+
2013-01-28 Richard Biener <rguenther@suse.de>
* tree-inline.c (remap_gimple_stmt): Do not assing a BLOCK
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 2b40286..7de974b 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -2720,8 +2720,12 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx insn)
prefetch has only the start address but it is better to have
something than nothing. */
if (!deps->readonly)
- add_insn_mem_dependence (deps, true, insn,
- gen_rtx_MEM (Pmode, XEXP (PATTERN (insn), 0)));
+ {
+ rtx x = gen_rtx_MEM (Pmode, XEXP (PATTERN (insn), 0));
+ if (sched_deps_info->use_cselib)
+ cselib_lookup_from_insn (x, Pmode, true, VOIDmode, insn);
+ add_insn_mem_dependence (deps, true, insn, x);
+ }
break;
case UNSPEC_VOLATILE:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fecca1e..ebc18d9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-01-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/56117
+ * gcc.dg/pr56117.c: New test.
+
2013-01-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/56034
diff --git a/gcc/testsuite/gcc.dg/pr56117.c b/gcc/testsuite/gcc.dg/pr56117.c
new file mode 100644
index 0000000..2422048
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56117.c
@@ -0,0 +1,9 @@
+/* PR rtl-optimization/56117 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fsched2-use-superblocks" } */
+
+void
+foo (void *p)
+{
+ __builtin_prefetch (p);
+}