tree-dfa.c (get_virtual_var): Merge real/imaginary parts with handled_component_p...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Fri, 25 Jun 2004 18:30:09 +0000 (18:30 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 25 Jun 2004 18:30:09 +0000 (14:30 -0400)
* tree-dfa.c (get_virtual_var): Merge real/imaginary parts with
handled_component_p handling.
* tree-gimple.c (get_base_address): Likewise and fix typo that
caused both recursion and looping.

From-SVN: r83669

gcc/ChangeLog
gcc/tree-dfa.c
gcc/tree-gimple.c

index 7ac68fc7300460a9f42993c09d6551e01949e79c..93329f92785270daea15e929edd405d0ad6a8942 100644 (file)
@@ -6,6 +6,11 @@
 
 2004-06-25  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * tree-dfa.c (get_virtual_var): Merge real/imaginary parts with
+       handled_component_p handling.
+       * tree-gimple.c (get_base_address): Likewise and fix typo that
+       caused both recursion and looping.
+
        * tree-cfg.c (verify_expr): Add macro CHECK_OK.
        Properly test for nest of handled_components in LHS context.
 
index 2778d53a8b3768e03da571abc8828462ccdc5bab..99f998f9c1dd519179a890ff736d22d868579b78 100644 (file)
@@ -922,11 +922,9 @@ get_virtual_var (tree var)
   if (TREE_CODE (var) == SSA_NAME)
     var = SSA_NAME_VAR (var);
 
-  if (TREE_CODE (var) == REALPART_EXPR || TREE_CODE (var) == IMAGPART_EXPR)
+  while (TREE_CODE (var) == REALPART_EXPR || TREE_CODE (var) == IMAGPART_EXPR
+        || handled_component_p (var))
     var = TREE_OPERAND (var, 0);
-  else
-    while (handled_component_p (var))
-      var = TREE_OPERAND (var, 0);
     
 #ifdef ENABLE_CHECKING
   /* Treating GIMPLE registers as virtual variables makes no sense.
index 36e4393d2b31d49b93bea210be0c3e17b4030668..b1f08dfee4a2958e7322262b1634664f4716805f 100644 (file)
@@ -602,27 +602,19 @@ rationalize_compound_expr (tree top)
 tree
 get_base_address (tree t)
 {
-  do
-    {
-      if (SSA_VAR_P (t)
-         || TREE_CODE (t) == STRING_CST
-         || TREE_CODE (t) == CONSTRUCTOR
-         || TREE_CODE (t) == INDIRECT_REF)
-       return t;
-
-      if (TREE_CODE (t) == REALPART_EXPR || TREE_CODE (t) == IMAGPART_EXPR)
-       t = TREE_OPERAND (t, 0);
-      else if (handled_component_p (t))
-       t = get_base_address (TREE_OPERAND (t, 0));
-      else
-       return NULL_TREE;
-    }
-  while (t);
-
-  return t;
+  while (TREE_CODE (t) == REALPART_EXPR || TREE_CODE (t) == IMAGPART_EXPR
+        || handled_component_p (t))
+    t = TREE_OPERAND (t, 0);
+  
+  if (SSA_VAR_P (t)
+      || TREE_CODE (t) == STRING_CST
+      || TREE_CODE (t) == CONSTRUCTOR
+      || TREE_CODE (t) == INDIRECT_REF)
+    return t;
+  else
+    return NULL_TREE;
 }
 
-
 void
 recalculate_side_effects (tree t)
 {