This introduces an ICE ("bogus comparison result type") on s390 for the
following test case:
#include <stdlib.h>
void foo(int dim)
{
int ba, sign;
ba = abs (dim);
sign = dim / ba;
}
Doing
diff --git a/gcc/match.pd b/gcc/match.pd
index ba7e013..2455592 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -158,7 +158,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(div @0 (abs @0))
(if ((INTEGRAL_TYPE_P (type) || VECTOR_INTEGER_TYPE_P (type))
&& TYPE_OVERFLOW_UNDEFINED (type))
- (cond (lt @0 { build_zero_cst (type); })
+ (cond (convert (lt @0 { build_zero_cst (type); }))
{ build_minus_one_cst (type); } { build_one_cst (type); })))
/* X / -X is -1. */
(simplify
fixes the ICE but is that necessary and/or the right thing to do?
Regards
Robin