aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/c-common.c2
-rw-r--r--gcc/c-pretty-print.c5
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c1
-rw-r--r--gcc/cp/lex.c1
-rw-r--r--gcc/expr.c37
-rw-r--r--gcc/f/ChangeLog6
-rw-r--r--gcc/f/com.c3
-rw-r--r--gcc/fold-const.c25
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/check-init.c1
-rw-r--r--gcc/java/expr.c1
-rw-r--r--gcc/tree.def7
14 files changed, 44 insertions, 70 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 53cc642..3f2cff3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,18 @@
+2003-09-18 Roger Sayle <roger@eyesopen.com>
+
+ * tree.def (FFS_EXPR, CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR,
+ PARITY_EXPR): Delete unused tree codes.
+ * c-common.c (c_common_truthvalue_conversion): Delete references
+ to FFS_EXPR and POPCOUNT_EXPR.
+ * c-pretty-print.c (pp_c_postfix_expression): Remove FFS_EXPR.
+ (pp_c_expression): Likewise.
+ * expr.c (expand_expr): Delete RTL expansion of FFS_EXPR, CLZ_EXPR,
+ CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR.
+ * fold-const.c (tree_expr_nonnegative_p): Remove FFS_EXPR, CLZ_EXPR,
+ CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR. Add support for calls to
+ BUILT_IN_FFS, BUILT_IN_PARITY and BUILT_IN_POPCOUNT and their long
+ and long long variants.
+
2003-09-18 Gabriel Dos Reis <gdr@integrable-solutions.net>
* c-pretty-print.h (pp_type_specifier_seq): Fix thinko.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 49c6aca..e6d4197 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -2644,8 +2644,6 @@ c_common_truthvalue_conversion (tree expr)
case NEGATE_EXPR:
case ABS_EXPR:
case FLOAT_EXPR:
- case FFS_EXPR:
- case POPCOUNT_EXPR:
/* These don't change whether an object is nonzero or zero. */
return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index 39dd8db..1ddc1d0 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -1187,9 +1187,7 @@ pp_c_postfix_expression (c_pretty_printer *pp, tree e)
break;
case ABS_EXPR:
- case FFS_EXPR:
- pp_c_identifier (pp,
- code == ABS_EXPR ? "__builtin_abs" : "__builtin_ffs");
+ pp_c_identifier (pp, "__builtin_abs");
pp_c_left_paren (pp);
pp_expression (pp, TREE_OPERAND (e, 0));
pp_c_right_paren (pp);
@@ -1707,7 +1705,6 @@ pp_c_expression (c_pretty_printer *pp, tree e)
case COMPLEX_EXPR:
case VECTOR_CST:
case ABS_EXPR:
- case FFS_EXPR:
case CONSTRUCTOR:
case COMPOUND_LITERAL_EXPR:
case VA_ARG_EXPR:
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0ba47327..1d3c8b2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2003-09-18 Roger Sayle <roger@eyesopen.com>
+
+ * lex.c (init_operators): Remove operator_name_info for FFS_EXPR.
+ * class.c (instantiate_type): Remove FFS_EXPR case.
+
2003-09-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
* ChangeLog: Fix recent commit.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index b76e7db..17ff0e4 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -6130,7 +6130,6 @@ instantiate_type (tree lhstype, tree rhs, tsubst_flags_t flags)
case ABS_EXPR:
case MAX_EXPR:
case MIN_EXPR:
- case FFS_EXPR:
case BIT_AND_EXPR:
case BIT_IOR_EXPR:
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index 4e60275..6d54823 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -205,7 +205,6 @@ init_operators (void)
operator_name_info [(int) FLOOR_MOD_EXPR].name = "(floor %)";
operator_name_info [(int) ROUND_MOD_EXPR].name = "(round %)";
operator_name_info [(int) ABS_EXPR].name = "abs";
- operator_name_info [(int) FFS_EXPR].name = "ffs";
operator_name_info [(int) TRUTH_AND_EXPR].name = "strict &&";
operator_name_info [(int) TRUTH_OR_EXPR].name = "strict ||";
operator_name_info [(int) IN_EXPR].name = "in";
diff --git a/gcc/expr.c b/gcc/expr.c
index 584250b..0b6a93b 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8525,43 +8525,6 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode,
abort ();
return temp;
- case FFS_EXPR:
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
- if (modifier == EXPAND_STACK_PARM)
- target = 0;
- temp = expand_unop (mode, ffs_optab, op0, target, 1);
- if (temp == 0)
- abort ();
- return temp;
-
- case CLZ_EXPR:
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
- temp = expand_unop (mode, clz_optab, op0, target, 1);
- if (temp == 0)
- abort ();
- return temp;
-
- case CTZ_EXPR:
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
- temp = expand_unop (mode, ctz_optab, op0, target, 1);
- if (temp == 0)
- abort ();
- return temp;
-
- case POPCOUNT_EXPR:
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
- temp = expand_unop (mode, popcount_optab, op0, target, 1);
- if (temp == 0)
- abort ();
- return temp;
-
- case PARITY_EXPR:
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
- temp = expand_unop (mode, parity_optab, op0, target, 1);
- if (temp == 0)
- abort ();
- return temp;
-
/* ??? Can optimize bitwise operations with one arg constant.
Can optimize (a bitwise1 n) bitwise2 (a bitwise3 b)
and (a bitwise1 b) bitwise2 b (etc)
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index 62a7941..73d2a42 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-18 Roger Sayle <roger@eyesopen.com>
+
+ * com.c (ffecom_overlap_): Remove FFS_EXPR case.
+ (ffecom_tree_canonize_ref_): Likewise.
+ (ffe_truthvalue_conversion): Likewise.
+
2003-09-01 Josef Zlomek <zlomekj@suse.cz>
* com.c (ffecom_overlap_): Kill BIT_ANDTC_EXPR.
diff --git a/gcc/f/com.c b/gcc/f/com.c
index b5e6fdd..a5100d9 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -1573,7 +1573,6 @@ ffecom_overlap_ (tree dest_decl, tree dest_offset, tree dest_size,
case MIN_EXPR:
case MAX_EXPR:
case ABS_EXPR:
- case FFS_EXPR:
case LSHIFT_EXPR:
case RSHIFT_EXPR:
case LROTATE_EXPR:
@@ -8882,7 +8881,6 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset, tree *size, tree t)
case MIN_EXPR:
case MAX_EXPR:
case ABS_EXPR:
- case FFS_EXPR:
case LSHIFT_EXPR:
case RSHIFT_EXPR:
case LROTATE_EXPR:
@@ -14801,7 +14799,6 @@ ffe_truthvalue_conversion (tree expr)
case NEGATE_EXPR:
case ABS_EXPR:
case FLOAT_EXPR:
- case FFS_EXPR:
/* These don't change whether an object is nonzero or zero. */
return ffe_truthvalue_conversion (TREE_OPERAND (expr, 0));
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 07143bc..24f6b02e 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -8494,18 +8494,8 @@ tree_expr_nonnegative_p (tree t)
switch (TREE_CODE (t))
{
case ABS_EXPR:
- case FFS_EXPR:
- case POPCOUNT_EXPR:
- case PARITY_EXPR:
return 1;
- case CLZ_EXPR:
- case CTZ_EXPR:
- /* These are undefined at zero. This is true even if
- C[LT]Z_DEFINED_VALUE_AT_ZERO is set, since what we're
- computing here is a user-visible property. */
- return 0;
-
case INTEGER_CST:
return tree_int_cst_sgn (t) >= 0;
@@ -8649,12 +8639,21 @@ tree_expr_nonnegative_p (tree t)
case BUILT_IN_EXP10:
case BUILT_IN_EXP10F:
case BUILT_IN_EXP10L:
- case BUILT_IN_POW10:
- case BUILT_IN_POW10F:
- case BUILT_IN_POW10L:
case BUILT_IN_FABS:
case BUILT_IN_FABSF:
case BUILT_IN_FABSL:
+ case BUILT_IN_FFS:
+ case BUILT_IN_FFSL:
+ case BUILT_IN_FFSLL:
+ case BUILT_IN_PARITY:
+ case BUILT_IN_PARITYL:
+ case BUILT_IN_PARITYLL:
+ case BUILT_IN_POPCOUNT:
+ case BUILT_IN_POPCOUNTL:
+ case BUILT_IN_POPCOUNTLL:
+ case BUILT_IN_POW10:
+ case BUILT_IN_POW10F:
+ case BUILT_IN_POW10L:
case BUILT_IN_SQRT:
case BUILT_IN_SQRTF:
case BUILT_IN_SQRTL:
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 5c9ca01..6c6b157 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,5 +1,10 @@
2003-09-18 Roger Sayle <roger@eyesopen.com>
+ * expr.c (java_truthvalue_conversion): Remove FFS_EXPR case.
+ * check-init.c (check_init): Likewise.
+
+2003-09-18 Roger Sayle <roger@eyesopen.com>
+
* jcf-write.c (generate_bytecode_insns): Add support for fconst_2.
2003-09-16 Andrew Haley <aph@redhat.com>
diff --git a/gcc/java/check-init.c b/gcc/java/check-init.c
index c2272a8..04ce354 100644
--- a/gcc/java/check-init.c
+++ b/gcc/java/check-init.c
@@ -792,7 +792,6 @@ check_init (tree exp, words before)
case FIX_FLOOR_EXPR:
case FIX_ROUND_EXPR:
case ABS_EXPR:
- case FFS_EXPR:
/* Avoid needless recursion. */
exp = TREE_OPERAND (exp, 0);
goto again;
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 1c7d501..94f23f3 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -175,7 +175,6 @@ java_truthvalue_conversion (tree expr)
case NEGATE_EXPR:
case ABS_EXPR:
case FLOAT_EXPR:
- case FFS_EXPR:
/* These don't change whether an object is nonzero or zero. */
return java_truthvalue_conversion (TREE_OPERAND (expr, 0));
diff --git a/gcc/tree.def b/gcc/tree.def
index 553e4ed..4b6d236 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -615,13 +615,6 @@ DEFTREECODE (MAX_EXPR, "max_expr", '2', 2)
operand of the ABS_EXPR must have the same type. */
DEFTREECODE (ABS_EXPR, "abs_expr", '1', 1)
-/* Bit scanning and counting. */
-DEFTREECODE (FFS_EXPR, "ffs_expr", '1', 1)
-DEFTREECODE (CLZ_EXPR, "clz_expr", '1', 1)
-DEFTREECODE (CTZ_EXPR, "ctz_expr", '1', 1)
-DEFTREECODE (POPCOUNT_EXPR, "popcount_expr", '1', 1)
-DEFTREECODE (PARITY_EXPR, "parity_expr", '1', 1)
-
/* Shift operations for shift and rotate.
Shift means logical shift if done on an
unsigned type, arithmetic shift if done on a signed type.