http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52555
Bug #: 52555
Summary: [Regression] ICE unrecognizable insn with -ffast-math
and __attribute__((optimize(xx)))
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
$ cat test.cpp
typedef unsigned long value_t;
struct foo {
static float _factor;
value_t _val;
foo()
: _val(7)
{
_val=__builtin_ceil(_val * _factor);
}
};
struct bar {
void operator()(foo&);
};
void
__attribute__((optimize("O")))
test() {
foo f;
bar b;
b(f);
}
int main() {
test();
}
$ g++ -c -O2 -ffast-math test.cpp
test.cpp: In function ‘void test()’:
test.cpp:24:1: error: unrecognizable insn:
(insn 9 8 10 3 (parallel [
(set (reg:XF 67)
(unspec:XF [
(reg:XF 68)
] UNSPEC_FRNDINT_CEIL))
(clobber (reg:CC 17 flags))
]) test.cpp:10 -1
(nil))
test.cpp:24:1: internal compiler error: in extract_insn, at recog.c:2109
Please submit a full bug report,
This happens with x86 and x86_64.