+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.
+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
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)));
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. */
case STRING_CST:
case COMPLEX_CST:
case VECTOR_CST:
- return !TREE_OVERFLOW (t);
+ return true;
default:
return false;