[PATCH]: handle scalb* in tree_expr_nonnegative_warnv_p
Kaveh R. GHAZI
ghazi@caip.rutgers.edu
Sun Feb 18 04:52:00 GMT 2007
This patch treats scalb*/scalbn*/scalbln* et al. as nonnegative if the
first argument is nonnegative.
Bootstrapped on sparc-sun-solaris2.10, no regressions.
Okay for mainline?
Thanks,
--Kaveh
2007-02-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fold-const.c (tree_expr_nonnegative_warnv_p): Handle scalb,
scalbn and scalbln.
testsuite:
* gcc.dg/torture/builtin-nonneg-1.c: Add checks for scalb, scalbn
and scalbln.
diff -rup orig/egcc-SVN20070216/gcc/fold-const.c egcc-SVN20070216/gcc/fold-const.c
--- orig/egcc-SVN20070216/gcc/fold-const.c 2007-02-16 09:17:22.000000000 -0500
+++ egcc-SVN20070216/gcc/fold-const.c 2007-02-16 15:11:45.878775308 -0500
@@ -13352,6 +13352,9 @@ tree_expr_nonnegative_warnv_p (tree t, b
CASE_FLT_FN (BUILT_IN_NEARBYINT):
CASE_FLT_FN (BUILT_IN_RINT):
CASE_FLT_FN (BUILT_IN_ROUND):
+ CASE_FLT_FN (BUILT_IN_SCALB):
+ CASE_FLT_FN (BUILT_IN_SCALBLN):
+ CASE_FLT_FN (BUILT_IN_SCALBN):
CASE_FLT_FN (BUILT_IN_SIGNBIT):
CASE_FLT_FN (BUILT_IN_SINH):
CASE_FLT_FN (BUILT_IN_TANH):
diff -rup orig/egcc-SVN20070216/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c egcc-SVN20070216/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c
--- orig/egcc-SVN20070216/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c 2006-01-22 23:31:01.000000000 -0500
+++ egcc-SVN20070216/gcc/testsuite/gcc.dg/torture/builtin-nonneg-1.c 2007-02-16 15:14:56.598496225 -0500
@@ -120,9 +120,9 @@ void test(double d1, double d2, float f1
|| signbitl(FN##l(fabsl(ld1),fabsl(ld2)))) \
link_failure_##FN()
- /* These are nonnegative if the first argument is, 2nd arg is int. */
-#define ARG2TEST1_A2INT(FN) \
- extern void link_failure_##FN (void); PROTOTYPE2TYPE2(FN, int) \
+ /* These are nonnegative if the first argument is, 2nd arg is an int. */
+#define ARG1TEST2_A2INT(FN, INTTYPE) \
+ extern void link_failure_##FN (void); PROTOTYPE2TYPE2(FN, INTTYPE) \
if (signbit(FN(fabs(d1),d2)) || signbitf(FN##f(fabsf(f1),f2)) \
|| signbitl(FN##l(fabsl(ld1),ld2))) \
link_failure_##FN()
@@ -143,7 +143,7 @@ void test(double d1, double d2, float f1
ARG1TEST1 (expm1);
ARG1TEST1 (floor);
ARG1TEST2 (fmod);
- ARG2TEST1_A2INT (ldexp);
+ ARG1TEST2_A2INT (ldexp, int);
ARG1TEST1_RTYPE (llrint, long long);
ARG1TEST1_RTYPE (llround, long long);
ARG1TEST1_RTYPE (lrint, long);
@@ -155,6 +155,9 @@ void test(double d1, double d2, float f1
ARG1TEST2 (pow);
ARG1TEST1 (rint);
ARG1TEST1 (round);
+ ARG1TEST2 (scalb);
+ ARG1TEST2_A2INT (scalbln, long);
+ ARG1TEST2_A2INT (scalbn, int);
ARG1TEST1_RTYPE (signbit, int);
ARG1TEST1 (sinh);
ARG1TEST1 (tanh);
More information about the Gcc-patches
mailing list