This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/50464] New: Using -Ofast -march=bdver1 results in internal compiler error: in extract_insn, at recog.c:2109
- From: "geir at cray dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 20 Sep 2011 16:48:42 +0000
- Subject: [Bug c++/50464] New: Using -Ofast -march=bdver1 results in internal compiler error: in extract_insn, at recog.c:2109
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50464
Bug #: 50464
Summary: Using -Ofast -march=bdver1 results in internal
compiler error: in extract_insn, at recog.c:2109
Classification: Unclassified
Product: gcc
Version: 4.6.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: geir@cray.com
Compiling following reduced test case gets the compiler error:
DataspaceIdentifier.cpp: In function 'void createDataspaceIdentifier()':
DataspaceIdentifier.cpp:172:1: error: unrecognizable insn:
(insn 88 87 89 11 (set:V2DI (reg:V2DI 144)
(if_then_else:V2DI (reg:V2DI 146)
(const_vector:V2DI [
(const_int -1 [0xffffffffffffffff])
(const_int -1 [0xffffffffffffffff])
])
(reg:V2DI 122 [ vect_var_.44 ]))) DataspaceIdentifier.cpp:155 -1
(nil))
DataspaceIdentifier.cpp:172:1: internal compiler error: in extract_insn, at
recog.c:2109
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
$ g++ --version
g++ (GCC) 4.6.1 20110627 (Cray Inc.)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cat DataspaceIdentifier.cpp
typedef long unsigned int size_t;
typedef unsigned long ulong_t;
typedef signed long slong_t;
extern "C++" {
void* operator new(size_t);
}
template<typename _Iterator>
struct iterator_traits
{
typedef typename _Iterator::reference reference;
};
template<typename _Tp>
struct iterator_traits<_Tp*>
{
typedef _Tp& reference;
};
template<typename _Iterator, typename _Container>
class __normal_iterator
{
protected:
_Iterator _M_current;
typedef iterator_traits<_Iterator> __traits_type;
public:
typedef typename __traits_type::reference reference;
explicit
__normal_iterator(const _Iterator& __i) : _M_current(__i) { }
reference
operator*() const
{ return *_M_current; }
__normal_iterator&
operator++()
{
++_M_current;
return *this;
}
const _Iterator&
base() const
{ return _M_current; }
};
template<typename _Iterator, typename _Container>
inline bool
operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
{ return __lhs.base() != __rhs.base(); }
template<typename _Tp>
class allocator
{
public:
typedef _Tp* pointer;
typedef _Tp value_type;
template<typename _Tp1>
struct rebind
{ typedef allocator<_Tp1> other; };
pointer allocate(size_t __n, const void* = 0)
{
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
}
};
template<typename _Tp, typename _Alloc>
struct _Vector_base
{
typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
struct _Vector_impl
: public _Tp_alloc_type
{
typename _Tp_alloc_type::pointer _M_start;
typename _Tp_alloc_type::pointer _M_finish;
typename _Tp_alloc_type::pointer _M_end_of_storage;
_Vector_impl(_Tp_alloc_type const& __a) { }
};
public:
typedef _Alloc allocator_type;
_Vector_base(size_t __n, const allocator_type& __a)
: _M_impl(__a)
{
this->_M_impl._M_start = this->_M_allocate(__n);
this->_M_impl._M_finish = this->_M_impl._M_start;
this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
}
public:
_Vector_impl _M_impl;
typename _Tp_alloc_type::pointer
_M_allocate(size_t __n)
{ return __n != 0 ? _M_impl.allocate(__n) : 0; }
};
template<typename _Tp, typename _Alloc = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
{
typedef _Vector_base<_Tp, _Alloc> _Base;
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
public:
typedef _Tp value_type;
typedef typename _Tp_alloc_type::pointer pointer;
typedef __normal_iterator<pointer, vector> iterator;
typedef _Alloc allocator_type;
protected:
using _Base::_M_allocate;
using _Base::_M_impl;
public:
explicit
vector(size_t __n, const value_type& __value = value_type(),
const allocator_type& __a = allocator_type())
: _Base(__n, __a)
{ _M_fill_initialize(__n, __value); }
iterator begin()
{ return iterator(this->_M_impl._M_start); }
iterator end()
{ return iterator(this->_M_impl._M_finish); }
protected:
void
_M_fill_initialize(size_t __n, const value_type& __value)
{
this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
}
};
template<typename _InputIterator, typename _OutputIterator, typename _Tp>
_OutputIterator
replace_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result,
const _Tp& __old_value, const _Tp& __new_value)
{
;
for (; __first != __last; ++__first, ++__result)
if (*__first == __old_value)
*__result = __new_value;
else
*__result = *__first;
return __result;
}
extern size_t shape_rank;
void createDataspaceIdentifier()
{
vector< ulong_t > dataspaceDims( shape_rank );
vector< ulong_t > maxDataspaceDims( shape_rank );
replace_copy(
dataspaceDims.begin(), dataspaceDims.end(),
maxDataspaceDims.begin(), ulong_t( 0 ), ((ulong_t)(slong_t)(-1)) );
}
$ g++ -Ofast -march=bdver1 -c DataspaceIdentifier.cpp
DataspaceIdentifier.cpp: In function 'void createDataspaceIdentifier()':
DataspaceIdentifier.cpp:172:1: error: unrecognizable insn:
(insn 88 87 89 11 (set:V2DI (reg:V2DI 144)
(if_then_else:V2DI (reg:V2DI 146)
(const_vector:V2DI [
(const_int -1 [0xffffffffffffffff])
(const_int -1 [0xffffffffffffffff])
])
(reg:V2DI 122 [ vect_var_.44 ]))) DataspaceIdentifier.cpp:155 -1
(nil))
DataspaceIdentifier.cpp:172:1: internal compiler error: in extract_insn, at
recog.c:2109
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
$ g++ -march=bdver1 -c DataspaceIdentifier.cpp
$