I actually have a bug report along these lines; compiling the following:
int
foo(double x, long double y)
{
return __builtin_isgreater (x, y);
}
crashes, because we end up creating an UNLE tree node with parameters
of two different types, and the RTL generator asserts.