From f1b190625ecdc8492337c07e6f91c70091b22749 Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak <dvorakz@suse.cz> Date: Mon, 14 Mar 2005 16:23:43 +0100 Subject: [PATCH] tree-cfg.c (find_taken_edge_cond_expr): Use zero_p instead of integer_zerop. * tree-cfg.c (find_taken_edge_cond_expr): Use zero_p instead of integer_zerop. * tree-gimple.c (is_gimple_min_invariant): Consider overflowed constants invariant. * fortran/trans-intrinsic.c (gfc_conv_intrinsic_ishft): Convert the argument of the shift to the unsigned type. From-SVN: r96435 --- gcc/ChangeLog | 7 +++++++ gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/trans-intrinsic.c | 2 +- gcc/tree-cfg.c | 15 +++------------ gcc/tree-gimple.c | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abce9f293cdb..1b8f35215d72 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-03-14 Zdenek Dvorak <dvorakz@suse.cz> + + * tree-cfg.c (find_taken_edge_cond_expr): Use zero_p instead of + integer_zerop. + * tree-gimple.c (is_gimple_min_invariant): Consider overflowed + constants invariant. + 2005-03-14 Zdenek Dvorak <dvorakz@suse.cz> * basic-block.h (BB_VISITED): Removed. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f116966ebdce..63172cb573b4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2005-03-14 Zdenek Dvorak <dvorakz@suse.cz> + + * fortran/trans-intrinsic.c (gfc_conv_intrinsic_ishft): Convert + the argument of the shift to the unsigned type. + 2005-03-13 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> PR fortran/16907 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index f5c0497f7c0a..f24db5fe7f9c 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1793,7 +1793,7 @@ gfc_conv_intrinsic_ishft (gfc_se * se, gfc_expr * expr) numbers, and we try to be compatible with other compilers, most notably g77, here. */ rshift = fold_convert (type, build2 (RSHIFT_EXPR, utype, - convert (type, arg), width)); + convert (utype, arg), width)); tmp = fold (build2 (GE_EXPR, boolean_type_node, arg2, build_int_cst (TREE_TYPE (arg2), 0))); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 18fcab7ba8e9..32dc2bc579c9 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2376,20 +2376,11 @@ find_taken_edge_cond_expr (basic_block bb, tree val) edge true_edge, false_edge; extract_true_false_edges_from_block (bb, &true_edge, &false_edge); - - /* Otherwise, try to determine which branch of the if() will be taken. - If VAL is a constant but it can't be reduced to a 0 or a 1, then - we don't really know which edge will be taken at runtime. This - may happen when comparing addresses (e.g., if (&var1 == 4)). */ - if (integer_nonzerop (val)) - return true_edge; - else if (integer_zerop (val)) - return false_edge; - - gcc_unreachable (); + + gcc_assert (TREE_CODE (val) == INTEGER_CST); + return (zero_p (val) ? false_edge : true_edge); } - /* Given an INTEGER_CST VAL and the entry block BB to a SWITCH_EXPR statement, determine which edge will be taken out of the block. Return NULL if any edge may be taken. */ diff --git a/gcc/tree-gimple.c b/gcc/tree-gimple.c index 61d2ec74ace5..f69d95ef8aac 100644 --- a/gcc/tree-gimple.c +++ b/gcc/tree-gimple.c @@ -180,7 +180,7 @@ is_gimple_min_invariant (tree t) case STRING_CST: case COMPLEX_CST: case VECTOR_CST: - return !TREE_OVERFLOW (t); + return true; default: return false; -- GitLab