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