From ac5dc795ad5d0d78956263ddbd525c4bc2a1f7a3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 18 Mar 2008 17:11:30 +0000 Subject: [PATCH] expr.c (store_expr): Assume lang_hooks.reduce_bit_field_operations is true. 2008-03-18 Paolo Bonzini * expr.c (store_expr): Assume lang_hooks.reduce_bit_field_operations is true. (expand_expr_real_1) : Don't look at ignore. (expand_expr_real_1): Assume lang_hooks.reduce_bit_field_operations is true. Add "&& !ignore" condition to reduce_bit_field. Modify target after ignore has been set, and move there also the commputation of subtarget and original_target. * langhooks-def.h (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. (LANG_HOOKS_INITIALIZER): Remove it. * langhooks.h (struct lang_hooks): Remove reduce_bit_field_operations. ada: 2008-03-18 Paolo Bonzini * misc.c (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. cp: 2008-03-18 Paolo Bonzini * cp-lang.c (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. From-SVN: r133316 --- gcc/ChangeLog | 13 +++++++++++++ gcc/ada/ChangeLog | 4 ++++ gcc/ada/misc.c | 2 -- gcc/cp/ChangeLog | 4 ++++ gcc/cp/cp-lang.c | 2 -- gcc/expr.c | 36 +++++++++++++++++------------------- gcc/langhooks-def.h | 2 -- gcc/langhooks.h | 4 ---- 8 files changed, 38 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index add3e25ad86..3a093c12905 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2008-03-18 Paolo Bonzini + + * expr.c (store_expr): Assume lang_hooks.reduce_bit_field_operations + is true. + (expand_expr_real_1) : Don't look at ignore. + (expand_expr_real_1): Assume lang_hooks.reduce_bit_field_operations + is true. Add "&& !ignore" condition to reduce_bit_field. Modify + target after ignore has been set, and move there also the commputation + of subtarget and original_target. + * langhooks-def.h (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. + (LANG_HOOKS_INITIALIZER): Remove it. + * langhooks.h (struct lang_hooks): Remove reduce_bit_field_operations. + 2008-03-18 Richard Guenther * tree-ssa-sccvn.c (visit_reference_op_load): If the lookup diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5960ea96fad..9847af6633e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2008-03-18 Paolo Bonzini + + * misc.c (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. + 2008-03-15 Ralf Wildenhues * gnat_rm.texi (Implementation Defined Characteristics) diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index da0f2d96a0a..fbb6b8ecb77 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -129,8 +129,6 @@ static tree gnat_type_max_size (const_tree); #define LANG_HOOKS_WRITE_GLOBALS gnat_write_global_declarations #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL #define LANG_HOOKS_FINISH_INCOMPLETE_DECL gnat_finish_incomplete_decl -#undef LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS -#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true #undef LANG_HOOKS_GET_ALIAS_SET #define LANG_HOOKS_GET_ALIAS_SET gnat_get_alias_set #undef LANG_HOOKS_EXPAND_EXPR diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d2ae223aaf3..a85346545c5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2008-03-18 Paolo Bonzini + + * cp-lang.c (LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS): Delete. + 2008-03-17 Jason Merrill PR c++/35548 diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index b35f7f3811c..70709298e9a 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -57,8 +57,6 @@ static enum classify_record cp_classify_record (tree type); #define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref #undef LANG_HOOKS_INIT_TS #define LANG_HOOKS_INIT_TS cp_init_ts -#undef LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS -#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true /* Each front end provides its own lang hook initializer. */ const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; diff --git a/gcc/expr.c b/gcc/expr.c index 83e8e442a8a..7e1a0ffa85b 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4484,9 +4484,8 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) converting modes. */ if (INTEGRAL_TYPE_P (TREE_TYPE (exp)) && TREE_TYPE (TREE_TYPE (exp)) == 0 - && (!lang_hooks.reduce_bit_field_operations - || (GET_MODE_PRECISION (GET_MODE (target)) - == TYPE_PRECISION (TREE_TYPE (exp))))) + && GET_MODE_PRECISION (GET_MODE (target)) + == TYPE_PRECISION (TREE_TYPE (exp))) { if (TYPE_UNSIGNED (TREE_TYPE (exp)) != SUBREG_PROMOTED_UNSIGNED_P (target)) @@ -7134,8 +7133,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, rtx subtarget, original_target; int ignore; tree context, subexp0, subexp1; - bool reduce_bit_field = false; -#define REDUCE_BIT_FIELD(expr) (reduce_bit_field && !ignore \ + bool reduce_bit_field; +#define REDUCE_BIT_FIELD(expr) (reduce_bit_field \ ? reduce_to_bit_field_precision ((expr), \ target, \ type) \ @@ -7153,27 +7152,20 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, mode = TYPE_MODE (type); unsignedp = TYPE_UNSIGNED (type); } - if (lang_hooks.reduce_bit_field_operations - && TREE_CODE (type) == INTEGER_TYPE - && GET_MODE_PRECISION (mode) > TYPE_PRECISION (type)) - { - /* An operation in what may be a bit-field type needs the - result to be reduced to the precision of the bit-field type, - which is narrower than that of the type's mode. */ - reduce_bit_field = true; - if (modifier == EXPAND_STACK_PARM) - target = 0; - } - /* Use subtarget as the target for operand 0 of a binary operation. */ - subtarget = get_subtarget (target); - original_target = target; ignore = (target == const0_rtx || ((code == NON_LVALUE_EXPR || code == NOP_EXPR || code == CONVERT_EXPR || code == COND_EXPR || code == VIEW_CONVERT_EXPR) && TREE_CODE (type) == VOID_TYPE)); + /* An operation in what may be a bit-field type needs the + result to be reduced to the precision of the bit-field type, + which is narrower than that of the type's mode. */ + reduce_bit_field = (!ignore + && TREE_CODE (type) == INTEGER_TYPE + && GET_MODE_PRECISION (mode) > TYPE_PRECISION (type)); + /* If we are going to ignore this result, we need only do something if there is a side-effect somewhere in the expression. If there is, short-circuit the most common cases here. Note that we must @@ -7222,6 +7214,12 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, target = 0; } + if (reduce_bit_field && modifier == EXPAND_STACK_PARM) + target = 0; + + /* Use subtarget as the target for operand 0 of a binary operation. */ + subtarget = get_subtarget (target); + original_target = target; switch (code) { diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 9f2cc71a431..bd3fdca6c38 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -97,7 +97,6 @@ extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, #define LANG_HOOKS_STATICP lhd_staticp #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name -#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS true #define LANG_HOOKS_NO_BODY_BLOCKS false #define LANG_HOOKS_PRINT_STATISTICS lhd_do_nothing #define LANG_HOOKS_PRINT_XNODE lhd_print_tree_nothing @@ -257,7 +256,6 @@ extern tree lhd_make_node (enum tree_code); LANG_HOOKS_STATICP, \ LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \ LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \ - LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS, \ LANG_HOOKS_NO_BODY_BLOCKS, \ LANG_HOOKS_PRINT_STATISTICS, \ LANG_HOOKS_PRINT_XNODE, \ diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 9da60f11b23..3ee23f69c0f 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -329,10 +329,6 @@ struct lang_hooks assembler does not talk about it. */ void (*set_decl_assembler_name) (tree); - /* Nonzero if operations on types narrower than their mode should - have their results reduced to the precision of the type. */ - bool reduce_bit_field_operations; - /* Nonzero if this front end does not generate a dummy BLOCK between the outermost scope of the function and the FUNCTION_DECL. See is_body_block in stmt.c, and its callers. */ -- 2.30.2