re PR middle-end/70499 (internal compiler error: in make_ssa_name_fn, at tree-ssaname...
authorRichard Biener <rguenther@suse.de>
Tue, 5 Apr 2016 08:05:06 +0000 (08:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Apr 2016 08:05:06 +0000 (08:05 +0000)
2016-04-05  Richard Biener  <rguenther@suse.de>

PR middle-end/70499
* gimplify-me.c (gimple_regimplify_operands): Do not rewrite
non-register type temporaries into SSA.

* g++.dg/torture/pr70499.C: New testcase.

From-SVN: r234738

gcc/ChangeLog
gcc/gimplify-me.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr70499.C [new file with mode: 0644]

index d9ad89c3dd6669945e7d95619f5448df73181053..b97f4ac848fa59e4452857ddc55fe688b507bea1 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/70499
+       * gimplify-me.c (gimple_regimplify_operands): Do not rewrite
+       non-register type temporaries into SSA.
+
 2016-04-04  Jan Hubicka  <hubicka@ucw.cz>
 
        PR ipa/66223
index c80a4ff459db2feb075636d78d6775410dc1510f..28e467b990e01e3ce3c9f9ebc9bc1f69dadaeda8 100644 (file)
@@ -299,7 +299,8 @@ gimple_regimplify_operands (gimple *stmt, gimple_stmt_iterator *gsi_p)
          if (need_temp)
            {
              tree temp = create_tmp_reg (TREE_TYPE (lhs));
-             if (gimple_in_ssa_p (cfun))
+             if (gimple_in_ssa_p (cfun)
+                 && is_gimple_reg_type (TREE_TYPE (lhs)))
                temp = make_ssa_name (temp);
              gimple_set_lhs (stmt, temp);
              post_stmt = gimple_build_assign (lhs, temp);
index 4a701c4ab5a9dc5e1c6fba1d27b0a596ec5907f9..baebdb0a21b89fde7fd678fe564e4b716d5e3bfd 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-05  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/70499
+       * g++.dg/torture/pr70499.C: New testcase.
+
 2016-04-05  Richard Biener  <rguenther@suse.de>
 
        * gcc.dg/tree-ssa/20030814-6.c: Fix testcase, disable FRE,
diff --git a/gcc/testsuite/g++.dg/torture/pr70499.C b/gcc/testsuite/g++.dg/torture/pr70499.C
new file mode 100644 (file)
index 0000000..954fea5
--- /dev/null
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// { dg-additional-options "-w -Wno-psabi" }
+// { dg-additional-options "-mavx" { target x86_64-*-* i?86-*-* } }
+
+typedef double __m256d __attribute__ ((__vector_size__ (32), __may_alias__));
+
+struct SIMD {
+  __m256d data;
+  SIMD() {};
+  SIMD (double val) { }
+  SIMD(__m256d _data) { data = _data; }
+  SIMD operator* (SIMD a) { return a; }
+};
+
+struct Foo {
+  SIMD val;
+  SIMD dval[2];
+  __attribute__((__always_inline__)) SIMD & Value() throw() { return val; }
+  __attribute__((__always_inline__)) Foo operator* ( const Foo & y) throw() 
+    {
+      Foo res;
+      SIMD hx;
+      SIMD hy;
+      res.Value() = hx*hy;
+      res.dval[0] = hx*hy;
+      return res;
+    }
+};
+
+template<typename Tx>  
+__attribute__((__always_inline__)) inline void inlineFunc(Tx hx[]) {
+    Tx x = hx[0], y = hx[1];
+    Tx lam[1] = (x*y);
+}
+
+void FooBarFunc () {
+  Foo adp[2];
+  inlineFunc (adp);
+}