]> gcc.gnu.org Git - gcc.git/commitdiff
backport: re PR middle-end/90139 (ICE in emit_block_move_hints, at expr.c:1601)
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 12:44:03 +0000 (14:44 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 12:44:03 +0000 (14:44 +0200)
Backported from mainline
2019-04-19  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/90139
* tree-outof-ssa.c (get_temp_reg): If reg_mode is BLKmode, return
assign_temp instead of gen_reg_rtx.

* gcc.c-torture/compile/pr90139.c: New test.

From-SVN: r275156

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr90139.c [new file with mode: 0644]
gcc/tree-outof-ssa.c

index 2e41dffc42c49b4674ac42fc02b4dd3d159f436b..eef46307e2f72c25d3ec9df2777ddb81f50e8c32 100644 (file)
@@ -1,6 +1,12 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-04-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/90139
+       * tree-outof-ssa.c (get_temp_reg): If reg_mode is BLKmode, return
+       assign_temp instead of gen_reg_rtx.
+
        2019-06-11  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/90811
index 0a714e3102929acd870ba8914bb04983bbf41bbb..1a50c4092001d0a2746ccf4c6467feca3e71e83e 100644 (file)
@@ -1,6 +1,11 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-04-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/90139
+       * gcc.c-torture/compile/pr90139.c: New test.
+
        2019-04-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/90187
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr90139.c b/gcc/testsuite/gcc.c-torture/compile/pr90139.c
new file mode 100644 (file)
index 0000000..f3d99f0
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR middle-end/90139 */
+
+typedef float __attribute__((vector_size (sizeof (float)))) V;
+void bar (int, V *);
+int l;
+
+void
+foo (void)
+{
+  V n, b, o;
+  while (1)
+    switch (l)
+      {
+      case 0:
+       o = n;
+       n = b;
+       b = o;
+       bar (1, &o);
+      }
+}
index 0ce6c155bd32d9228985028e72720bc17a4a6f28..fc488ca68cbb1b3eb2b2f2c1e5ba8781aa77d0ee 100644 (file)
@@ -651,6 +651,8 @@ get_temp_reg (tree name)
   tree type = TREE_TYPE (name);
   int unsignedp;
   machine_mode reg_mode = promote_ssa_mode (name, &unsignedp);
+  if (reg_mode == BLKmode)
+    return assign_temp (type, 0, 0);
   rtx x = gen_reg_rtx (reg_mode);
   if (POINTER_TYPE_P (type))
     mark_reg_pointer (x, TYPE_ALIGN (TREE_TYPE (type)));
This page took 0.085628 seconds and 5 git commands to generate.