https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64688
Bug ID: 64688 Summary: internal compiler error: Max. number of generated reload insns per insn is achieved (90) Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org Host: x86_64-unknown-linux-gnu Target: x86_64-unknown-linux-gnu Build: x86_64-unknown-linux-gnu Running the Boost testsuite on gcc20 gives: trippels@gcc20 more % cat performance.ii template <typename T> struct A { typedef typename T::next type; }; template <typename> struct B; template <typename T> struct N : T {}; template <int N> struct C { static const int value = N; typedef C<N + 1> next; }; template <typename Sequence> struct R : N<typename B<typename Sequence::tag>::template P<Sequence>> {}; template <typename Base> struct O : Base { typedef typename A<typename Base::size>::type size; }; template <typename = int> struct D { typedef int tag; typedef C<0> size; }; template <> struct B<int> { template <typename> struct P : O<O<O<D<>>>>::size {}; }; template <typename> struct F; template <typename> struct G; template <typename, typename, int> struct H; template <typename Element, typename Layout> struct H<Element, Layout, 3> {}; template <int, typename E, typename L, int N> unsigned char at_c(H<E, L, N>) {} template <typename> class I; template <typename> class J; template <typename> class K; template <typename, typename> struct Q; struct L { typedef Q<unsigned char, F<O<O<O<D<>>>>>> *type; }; template <typename XIterator> struct M { typedef K<J<I<XIterator>>> view_t; }; template <typename, typename> struct Q : H<unsigned, F<int>, R<O<O<O<D<>>>>>::value> {}; template <typename Iterator> struct G<I<Iterator>> { typedef Iterator type; }; template <typename> class J { public: typedef G<I<Q<unsigned, int> *>>::type x_iterator; }; template <typename> class K { public: J<int>::x_iterator row_begin(int); }; template <typename Op> void measure_time(Op p1) { p1(); } template <typename, typename> struct fill_nongil_t; template <typename T, typename P> struct fill_nongil_t<K<J<I<Q<T, F<O<O<O<D<>>>>>> *>>>, P> { typedef K<J<I<Q<T, F<O<O<O<D<>>>>>> *>>> View; View _v; P _p; fill_nongil_t(View, P); void operator()() { T *first = (T *)_v.row_begin(0); T last; while (first != &last) { first[0] = first[1] = at_c<1>(_p); first[2] = at_c<2>(_p); first += 3; } } }; template <typename, typename> void test_fill(int) { M<L::type>::view_t __trans_tmp_1; measure_time(fill_nongil_t<K<J<I<Q<unsigned char, F<O<O<O<D<>>>>>> *>>>, Q<unsigned char, F<O<O<O<D<>>>>>>>( __trans_tmp_1, Q<unsigned char, F<O<O<O<D<>>>>>>())); } void performance_testtest_method() { test_fill<K<int>, Q<unsigned, int>>(0); } trippels@gcc20 more % g++ -c -O3 -std=c++11 -march=westmere performance.ii performance.ii: In function ‘void performance_testtest_method()’: performance.ii:68:78: internal compiler error: Max. number of generated reload insns per insn is achieved (90) void performance_testtest_method() { test_fill<K<int>, Q<unsigned, int>>(0); } ^ 0xb8eb70 lra_constraints(bool) ../../gcc/gcc/lra-constraints.c:4335 0xb7b3a1 lra(_IO_FILE*) ../../gcc/gcc/lra.c:2292 0xb39809 do_reload ../../gcc/gcc/ira.c:5418 0xb39809 execute ../../gcc/gcc/ira.c:5589 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug re