This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[PATCH] Remove unused tree codes, FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR (fwd)
- From: Richard Guenther <rguenther at suse dot de>
- To: fortran at gcc dot gnu dot org
- Date: Fri, 10 Nov 2006 12:07:25 +0100 (CET)
- Subject: [PATCH] Remove unused tree codes, FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR (fwd)
(now with the correct address...)
This patch removes the three unused tree-codes FIX_CEIL_EXPR,
FIX_FLOOR_EXPR, FIX_ROUND_EXPR. The only "user" was the fortran frontend
which used them internally (but never created trees with that codes).
So I guess at least the fortran guys should ack this apart from a
middle-end maintainer.
Bootstrapped and tested on x86_64-unknown-linux-gnu.
Ok for mainline?
Thanks,
Richard.
:ADDPATCH middle-end, fortran:
2006-11-10 Richard Guenther <rguenther@suse.de>
* tree.def (FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR):
Remove unused tree codes.
* tree-vrp.c (extract_range_from_unary_expr): Remove handling
of FIX_CEIL_EXPR, FIX_FLOOR_EXPR and FIX_ROUND_EXPR.
* tree-pretty-print.c (dump_generic_node, op_prio): Likewise.
* tree.c (stabilize_reference): Likewise.
* fold-const.c (fold_convert_const_int_from_real, operand_equal_p,
fold_unary): Likewise.
* tree-gimple.c (is_gimple_cast): Likewise.
* dwarf2out.c (loc_descriptor_from_tree_1): Likewise.
* expr.c (expand_expr_real_1): Likewise.
* tree-eh.c (tree_could_trap_p): Likewise.
* gimplify.c (gimplify_expr): Likewise.
* tree-inline.c (estimate_num_insns_1): Likewise.
* tree-cfg.c (verify_expr): Likewise.
cp/
* typeck.c (build_unary_op): Likewise.
java/
* check-init.c (check_init): Likewise.
ada/
* trans.c (maybe_stabilize_reference): Likewise.
fortran/
* trans-intrinsic.c (enum rounding_mode): New enum.
(build_fix_expr, gfc_conv_intrinsic_aint, gfc_conv_intrinsic_mod,
gfc_conv_intrinsic_function): Use it instead of FIX_CEIL_EXPR,
FIX_FLOOR_EXPR, FIX_ROUND_EXPR and FIX_TRUNC_EXPR.
Index: tree-vrp.c
===================================================================
*** tree-vrp.c (revision 118652)
--- tree-vrp.c (working copy)
*************** extract_range_from_unary_expr (value_ran
*** 1596,1604 ****
/* Refuse to operate on certain unary expressions for which we
cannot easily determine a resulting range. */
if (code == FIX_TRUNC_EXPR
- || code == FIX_CEIL_EXPR
- || code == FIX_FLOOR_EXPR
- || code == FIX_ROUND_EXPR
|| code == FLOAT_EXPR
|| code == BIT_NOT_EXPR
|| code == NON_LVALUE_EXPR
--- 1596,1601 ----
Index: tree-pretty-print.c
===================================================================
*** tree-pretty-print.c (revision 118652)
--- tree-pretty-print.c (working copy)
*************** dump_generic_node (pretty_printer *buffe
*** 1324,1332 ****
break;
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
case FLOAT_EXPR:
case CONVERT_EXPR:
case NOP_EXPR:
--- 1324,1329 ----
*************** op_prio (tree op)
*** 2236,2244 ****
case NOP_EXPR:
case CONVERT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
case TARGET_EXPR:
return 14;
--- 2233,2238 ----
Index: java/check-init.c
===================================================================
*** java/check-init.c (revision 118652)
--- java/check-init.c (working copy)
*************** check_init (tree exp, words before)
*** 814,822 ****
case ADDR_EXPR:
case NON_LVALUE_EXPR:
case INSTANCEOF_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
case ABS_EXPR:
/* Avoid needless recursion. */
exp = TREE_OPERAND (exp, 0);
--- 814,819 ----
Index: tree.c
===================================================================
*** tree.c (revision 118652)
--- tree.c (working copy)
*************** stabilize_reference (tree ref)
*** 2595,2603 ****
case CONVERT_EXPR:
case FLOAT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
- case FIX_CEIL_EXPR:
result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
break;
--- 2595,2600 ----
Index: fold-const.c
===================================================================
*** fold-const.c (revision 118652)
--- fold-const.c (working copy)
*************** fold_convert_const_int_from_real (enum t
*** 1859,1876 ****
real_trunc (&r, VOIDmode, &x);
break;
- case FIX_CEIL_EXPR:
- real_ceil (&r, VOIDmode, &x);
- break;
-
- case FIX_FLOOR_EXPR:
- real_floor (&r, VOIDmode, &x);
- break;
-
- case FIX_ROUND_EXPR:
- real_round (&r, VOIDmode, &x);
- break;
-
default:
gcc_unreachable ();
}
--- 1859,1864 ----
*************** operand_equal_p (tree arg0, tree arg1, u
*** 2617,2626 ****
{
case NOP_EXPR:
case CONVERT_EXPR:
- case FIX_CEIL_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
if (TYPE_UNSIGNED (TREE_TYPE (arg0))
!= TYPE_UNSIGNED (TREE_TYPE (arg1)))
return 0;
--- 2605,2611 ----
*************** fold_unary (enum tree_code code, tree ty
*** 7306,7314 ****
case FLOAT_EXPR:
case CONVERT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
if (TREE_TYPE (op0) == type)
return op0;
--- 7291,7296 ----
Index: tree-gimple.c
===================================================================
*** tree-gimple.c (revision 118652)
--- tree-gimple.c (working copy)
*************** is_gimple_cast (tree t)
*** 409,418 ****
{
return (TREE_CODE (t) == NOP_EXPR
|| TREE_CODE (t) == CONVERT_EXPR
! || TREE_CODE (t) == FIX_TRUNC_EXPR
! || TREE_CODE (t) == FIX_CEIL_EXPR
! || TREE_CODE (t) == FIX_FLOOR_EXPR
! || TREE_CODE (t) == FIX_ROUND_EXPR);
}
/* Return true if T is a valid op0 of a CALL_EXPR. */
--- 409,415 ----
{
return (TREE_CODE (t) == NOP_EXPR
|| TREE_CODE (t) == CONVERT_EXPR
! || TREE_CODE (t) == FIX_TRUNC_EXPR);
}
/* Return true if T is a valid op0 of a CALL_EXPR. */
Index: cp/typeck.c
===================================================================
*** cp/typeck.c (revision 118652)
--- cp/typeck.c (working copy)
*************** build_unary_op (enum tree_code code, tre
*** 4146,4154 ****
case CONVERT_EXPR:
case FLOAT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
- case FIX_CEIL_EXPR:
{
tree incremented, modify, value, compound;
if (! lvalue_p (arg) && pedantic)
--- 4146,4151 ----
*************** build_unary_op (enum tree_code code, tre
*** 4301,4309 ****
case CONVERT_EXPR:
case FLOAT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
- case FIX_CEIL_EXPR:
if (! lvalue_p (arg) && pedantic)
pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
break;
--- 4298,4303 ----
Index: dwarf2out.c
===================================================================
*** dwarf2out.c (revision 118652)
--- dwarf2out.c (working copy)
*************** loc_descriptor_from_tree_1 (tree loc, in
*** 9478,9486 ****
break;
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
return 0;
default:
--- 9478,9483 ----
Index: expr.c
===================================================================
*** expr.c (revision 118652)
--- expr.c (working copy)
*************** expand_expr_real_1 (tree exp, rtx target
*** 8188,8198 ****
subtarget, &op0, &op1, 0);
return expand_divmod (1, code, mode, op0, op1, target, unsignedp);
- case FIX_ROUND_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_CEIL_EXPR:
- gcc_unreachable (); /* Not used for C. */
-
case FIX_TRUNC_EXPR:
op0 = expand_normal (TREE_OPERAND (exp, 0));
if (target == 0 || modifier == EXPAND_STACK_PARM)
--- 8188,8193 ----
Index: ada/trans.c
===================================================================
*** ada/trans.c (revision 118652)
--- ada/trans.c (working copy)
*************** maybe_stabilize_reference (tree ref, boo
*** 6033,6041 ****
case CONVERT_EXPR:
case FLOAT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
- case FIX_CEIL_EXPR:
case VIEW_CONVERT_EXPR:
result
= build1 (code, type,
--- 6033,6038 ----
Index: tree-eh.c
===================================================================
*** tree-eh.c (revision 118652)
--- tree-eh.c (working copy)
*************** tree_could_trap_p (tree expr)
*** 1956,1964 ****
case CONVERT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
/* Conversion of floating point might trap. */
return honor_nans;
--- 1956,1961 ----
Index: fortran/trans-intrinsic.c
===================================================================
*** fortran/trans-intrinsic.c (revision 118652)
--- fortran/trans-intrinsic.c (working copy)
*************** typedef struct
*** 160,165 ****
--- 160,166 ----
}
real_compnt_info;
+ enum rounding_mode { RND_ROUND, RND_TRUNC, RND_CEIL, RND_FLOOR };
/* Evaluate the arguments to an intrinsic function. */
*************** build_round_expr (stmtblock_t * pblock,
*** 307,329 ****
static tree
build_fix_expr (stmtblock_t * pblock, tree arg, tree type,
! enum tree_code op)
{
switch (op)
{
! case FIX_FLOOR_EXPR:
return build_fixbound_expr (pblock, arg, type, 0);
break;
! case FIX_CEIL_EXPR:
return build_fixbound_expr (pblock, arg, type, 1);
break;
! case FIX_ROUND_EXPR:
return build_round_expr (pblock, arg, type);
default:
! return build1 (op, type, arg);
}
}
--- 308,331 ----
static tree
build_fix_expr (stmtblock_t * pblock, tree arg, tree type,
! enum rounding_mode op)
{
switch (op)
{
! case RND_FLOOR:
return build_fixbound_expr (pblock, arg, type, 0);
break;
! case RND_CEIL:
return build_fixbound_expr (pblock, arg, type, 1);
break;
! case RND_ROUND:
return build_round_expr (pblock, arg, type);
default:
! gcc_assert (op == RND_TRUNC);
! return build1 (FIX_TRUNC_EXPR, type, arg);
}
}
*************** build_fix_expr (stmtblock_t * pblock, tr
*** 338,344 ****
*/
static void
! gfc_conv_intrinsic_aint (gfc_se * se, gfc_expr * expr, enum tree_code op)
{
tree type;
tree itype;
--- 340,346 ----
*/
static void
! gfc_conv_intrinsic_aint (gfc_se * se, gfc_expr * expr, enum rounding_mode op)
{
tree type;
tree itype;
*************** gfc_conv_intrinsic_aint (gfc_se * se, gf
*** 355,361 ****
/* We have builtin functions for some cases. */
switch (op)
{
! case FIX_ROUND_EXPR:
switch (kind)
{
case 4:
--- 357,363 ----
/* We have builtin functions for some cases. */
switch (op)
{
! case RND_ROUND:
switch (kind)
{
case 4:
*************** gfc_conv_intrinsic_aint (gfc_se * se, gf
*** 373,379 ****
}
break;
! case FIX_TRUNC_EXPR:
switch (kind)
{
case 4:
--- 375,381 ----
}
break;
! case RND_TRUNC:
switch (kind)
{
case 4:
*************** gfc_conv_intrinsic_aint (gfc_se * se, gf
*** 437,443 ****
/* Convert to an integer using the specified rounding mode. */
static void
! gfc_conv_intrinsic_int (gfc_se * se, gfc_expr * expr, int op)
{
tree type;
tree arg;
--- 439,445 ----
/* Convert to an integer using the specified rounding mode. */
static void
! gfc_conv_intrinsic_int (gfc_se * se, gfc_expr * expr, enum rounding_mode op)
{
tree type;
tree arg;
*************** gfc_conv_intrinsic_mod (gfc_se * se, gfc
*** 1076,1084 ****
itype = gfc_get_int_type (ikind);
if (modulo)
! tmp = build_fix_expr (&se->pre, tmp, itype, FIX_FLOOR_EXPR);
else
! tmp = build_fix_expr (&se->pre, tmp, itype, FIX_TRUNC_EXPR);
tmp = convert (type, tmp);
tmp = build3 (COND_EXPR, type, test2, tmp, arg);
tmp = build2 (MULT_EXPR, type, tmp, arg2);
--- 1078,1086 ----
itype = gfc_get_int_type (ikind);
if (modulo)
! tmp = build_fix_expr (&se->pre, tmp, itype, RND_FLOOR);
else
! tmp = build_fix_expr (&se->pre, tmp, itype, RND_TRUNC);
tmp = convert (type, tmp);
tmp = build3 (COND_EXPR, type, test2, tmp, arg);
tmp = build2 (MULT_EXPR, type, tmp, arg2);
*************** gfc_conv_intrinsic_function (gfc_se * se
*** 3474,3480 ****
break;
case GFC_ISYM_AINT:
! gfc_conv_intrinsic_aint (se, expr, FIX_TRUNC_EXPR);
break;
case GFC_ISYM_ALL:
--- 3476,3482 ----
break;
case GFC_ISYM_AINT:
! gfc_conv_intrinsic_aint (se, expr, RND_TRUNC);
break;
case GFC_ISYM_ALL:
*************** gfc_conv_intrinsic_function (gfc_se * se
*** 3482,3488 ****
break;
case GFC_ISYM_ANINT:
! gfc_conv_intrinsic_aint (se, expr, FIX_ROUND_EXPR);
break;
case GFC_ISYM_AND:
--- 3484,3490 ----
break;
case GFC_ISYM_ANINT:
! gfc_conv_intrinsic_aint (se, expr, RND_ROUND);
break;
case GFC_ISYM_AND:
*************** gfc_conv_intrinsic_function (gfc_se * se
*** 3515,3533 ****
case GFC_ISYM_INT2:
case GFC_ISYM_INT8:
case GFC_ISYM_LONG:
! gfc_conv_intrinsic_int (se, expr, FIX_TRUNC_EXPR);
break;
case GFC_ISYM_NINT:
! gfc_conv_intrinsic_int (se, expr, FIX_ROUND_EXPR);
break;
case GFC_ISYM_CEILING:
! gfc_conv_intrinsic_int (se, expr, FIX_CEIL_EXPR);
break;
case GFC_ISYM_FLOOR:
! gfc_conv_intrinsic_int (se, expr, FIX_FLOOR_EXPR);
break;
case GFC_ISYM_MOD:
--- 3517,3535 ----
case GFC_ISYM_INT2:
case GFC_ISYM_INT8:
case GFC_ISYM_LONG:
! gfc_conv_intrinsic_int (se, expr, RND_TRUNC);
break;
case GFC_ISYM_NINT:
! gfc_conv_intrinsic_int (se, expr, RND_ROUND);
break;
case GFC_ISYM_CEILING:
! gfc_conv_intrinsic_int (se, expr, RND_CEIL);
break;
case GFC_ISYM_FLOOR:
! gfc_conv_intrinsic_int (se, expr, RND_FLOOR);
break;
case GFC_ISYM_MOD:
Index: gimplify.c
===================================================================
*** gimplify.c (revision 118652)
--- gimplify.c (working copy)
*************** gimplify_expr (tree *expr_p, tree *pre_p
*** 5489,5497 ****
/* FALLTHRU */
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
/* unary_expr: ... | '(' cast ')' val | ... */
ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
is_gimple_val, fb_rvalue);
--- 5489,5494 ----
Index: tree.def
===================================================================
*** tree.def (revision 118652)
--- tree.def (working copy)
*************** DEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc
*** 634,648 ****
Used for pointer subtraction in C. */
DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2)
! /* Conversion of real to fixed point: four ways to round,
! like the four ways to divide.
! CONVERT_EXPR can also be used to convert a real to an integer,
! and that is what is used in languages that do not have ways of
! specifying which of these is wanted. Maybe these are not needed. */
DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1)
- DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", tcc_unary, 1)
- DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", tcc_unary, 1)
- DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", tcc_unary, 1)
/* Conversion of an integer to a real. */
DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1)
--- 634,641 ----
Used for pointer subtraction in C. */
DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2)
! /* Conversion of real to fixed point by truncation. */
DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1)
/* Conversion of an integer to a real. */
DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1)
Index: tree-inline.c
===================================================================
*** tree-inline.c (revision 118652)
--- tree-inline.c (working copy)
*************** estimate_num_insns_1 (tree *tp, int *wal
*** 1700,1708 ****
case MULT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
case NEGATE_EXPR:
case FLOAT_EXPR:
--- 1700,1705 ----
Index: tree-cfg.c
===================================================================
*** tree-cfg.c (revision 118652)
--- tree-cfg.c (working copy)
*************** verify_expr (tree *tp, int *walk_subtree
*** 3329,3337 ****
case NOP_EXPR:
case CONVERT_EXPR:
case FIX_TRUNC_EXPR:
- case FIX_CEIL_EXPR:
- case FIX_FLOOR_EXPR:
- case FIX_ROUND_EXPR:
case FLOAT_EXPR:
case NEGATE_EXPR:
case ABS_EXPR:
--- 3329,3334 ----