re PR rtl-optimization/48272 (internal compiler error: in setup_insn_reg_pressure_inf...
authorAndrey Belevantsev <abel@ispras.ru>
Fri, 8 Apr 2011 13:25:29 +0000 (17:25 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Fri, 8 Apr 2011 13:25:29 +0000 (17:25 +0400)
        PR rtl-optimization/48272

        * sched-deps.c (setup_insn_reg_pressure_info): Export and rename to
        init_insn_reg_pressure_info.  Adjust a caller.
        * sched-int.h (init_insn_reg_pressure_info): Declare.
        * haifa-sched.c (haifa_init_insn): Call init_insn_reg_pressure_info
        when sched-pressure is enabled.

        * g++.dg/opt/pr48272.C: New.

From-SVN: r172183

gcc/ChangeLog
gcc/haifa-sched.c
gcc/sched-deps.c
gcc/sched-int.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr48272.C [new file with mode: 0644]

index d323a62e80ea2767e81385eac7c22561f19b0f75..107f79bf2ff61155533814b364066f4caf9fa949 100644 (file)
@@ -1,3 +1,13 @@
+2011-04-08  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/48272
+
+       * sched-deps.c (setup_insn_reg_pressure_info): Export and rename to
+       init_insn_reg_pressure_info.  Adjust a caller.
+       * sched-int.h (init_insn_reg_pressure_info): Declare.
+       * haifa-sched.c (haifa_init_insn): Call init_insn_reg_pressure_info
+       when sched-pressure is enabled.
+
 2011-04-08  Richard Guenther  <rguenther@suse.de>
 
        * gimple.c (gimple_set_modified): Do not queue calls to
index 30f55be5178fdd61440f04a10aa0a58be85fab39..6908a113e634f401df5cc3dad882cdbd90353b71 100644 (file)
@@ -5611,6 +5611,8 @@ haifa_init_insn (rtx insn)
       /* Extend dependency caches by one element.  */
       extend_dependency_caches (1, false);
     }
+  if (sched_pressure_p)
+    init_insn_reg_pressure_info (insn);
 }
 
 /* Init data for the new basic block BB which comes after AFTER.  */
index dcee01904908677f28c8bb44050822f6516b5e80..393e651f3df6c6d0d558f7c3579df60593954cf6 100644 (file)
@@ -1991,8 +1991,8 @@ mark_insn_reg_clobber (rtx reg, const_rtx setter, void *data)
 }
 
 /* Set up reg pressure info related to INSN.  */
-static void
-setup_insn_reg_pressure_info (rtx insn)
+void
+init_insn_reg_pressure_info (rtx insn)
 {
   int i, len;
   enum reg_class cl;
@@ -2774,7 +2774,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
   if (sched_pressure_p)
     {
       setup_insn_reg_uses (deps, insn);
-      setup_insn_reg_pressure_info (insn);
+      init_insn_reg_pressure_info (insn);
     }
 
   /* Add register dependencies for insn.  */
index d5add3bf2187e266637914f1e66583ab19c4747b..d5c9509f61aa35ca53b748863ec1d5bca930c21b 100644 (file)
@@ -1194,6 +1194,7 @@ extern void init_deps_global (void);
 extern void finish_deps_global (void);
 extern void deps_analyze_insn (struct deps_desc *, rtx);
 extern void remove_from_deps (struct deps_desc *, rtx);
+extern void init_insn_reg_pressure_info (rtx);
 
 extern dw_t get_dep_weak_1 (ds_t, ds_t);
 extern dw_t get_dep_weak (ds_t, ds_t);
index 65440e2b2d933180df4064075a0e5c09b5f0a3b6..acd66d099de0dcb394578703ae5cdc8a1fab3749 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-08  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/48272
+       * g++.dg/opt/pr48272.C: New.
+
 2011-04-08  Dmitry Melnik  <dm@ispras.ru>
 
        PR rtl-optimization/48235
diff --git a/gcc/testsuite/g++.dg/opt/pr48272.C b/gcc/testsuite/g++.dg/opt/pr48272.C
new file mode 100644 (file)
index 0000000..cb28a1b
--- /dev/null
@@ -0,0 +1,130 @@
+// { dg-do compile }
+// { dg-options "-O3 -ftracer -fsched-pressure -Wno-unused-parameter -Wno-return-type" }
+
+extern "C"
+{
+  namespace std
+  {
+    class exception
+    {
+      virtual const char *what () const throw ();
+    };
+  }
+}
+namespace std __attribute__ ((__visibility__ ("default")))
+{
+  template < typename _Alloc > class allocator;
+  template < class _CharT > struct char_traits;
+  template < typename _CharT, typename _Traits =
+    char_traits < _CharT >, typename _Alloc =
+    allocator < _CharT > >class basic_string;
+  typedef basic_string < char >string;
+  template < typename _CharT, typename _Traits =
+    char_traits < _CharT > >class basic_ios;
+  typedef basic_ios < char >ios;
+}
+
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+{
+  template < typename _Tp > class new_allocator
+  {
+  };
+}
+
+namespace std __attribute__ ((__visibility__ ("default")))
+{
+template < typename _Tp > class allocator:public __gnu_cxx::new_allocator <
+    _Tp >
+  {
+  };
+}
+
+typedef int _Atomic_word;
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+{
+  static inline _Atomic_word
+    __attribute__ ((__unused__)) __exchange_and_add_dispatch (_Atomic_word *
+                                                             __mem,
+                                                             int __val)
+  {
+  }
+}
+
+namespace std __attribute__ ((__visibility__ ("default")))
+{
+  template < typename _CharT, typename _Traits,
+    typename _Alloc > class basic_string
+  {
+    typedef _Alloc allocator_type;
+  private:struct _Rep_base
+    {
+      _Atomic_word _M_refcount;
+    };
+    struct _Rep:_Rep_base
+    {
+      void _M_dispose (const _Alloc & __a)
+      {
+       if (__builtin_expect (this != &_S_empty_rep (), false))
+         {
+           if (__gnu_cxx::
+               __exchange_and_add_dispatch (&this->_M_refcount, -1) <= 0)
+             {
+               _M_destroy (__a);
+             }
+         }
+      }
+      void _M_destroy (const _Alloc &) throw ();
+    };
+    struct _Alloc_hider:_Alloc
+    {
+      _CharT *_M_p;
+    };
+  private:mutable _Alloc_hider _M_dataplus;
+    _CharT *_M_data () const
+    {
+      return _M_dataplus._M_p;
+    }
+    _Rep *_M_rep () const
+    {
+      return &((reinterpret_cast < _Rep * >(_M_data ()))[-1]);
+    }
+    static _Rep & _S_empty_rep ()
+    {
+    }
+  public: basic_string ():_M_dataplus (_S_empty_rep ()._M_refdata (),
+                _Alloc ())
+    {
+    }
+    basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ());
+    ~basic_string ()
+    {
+      _M_rep ()->_M_dispose (this->get_allocator ());
+    }
+    allocator_type get_allocator () const
+    {
+    }
+  };
+  class ios_base
+  {
+  public:class failure:public exception
+    {
+    public:explicit failure (const string & __str) throw ();
+    };
+  };
+template < typename _CharT, typename _Traits > class basic_ios:public
+    ios_base
+  {
+  };
+  namespace iostreams
+  {
+    class zlib_error:public std::ios::failure
+    {
+    public:explicit zlib_error (int error);
+    private:int error_;
+    };
+      zlib_error::zlib_error (int error):std::ios::failure ("zlib error"),
+      error_ (error)
+    {
+    }
+  }
+}