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