OSDN Git Service

Fix PR 44955: Strip off the real and complex parts.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Jul 2010 15:44:24 +0000 (15:44 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 21 Jul 2010 15:44:24 +0000 (15:44 +0000)
2010-07-21  Changpeng Fang  <changpeng.fang@amd.com>

PR tree-optimization/44955
* tree-ssa-loop-prefetch.c (analyze_ref): Strip off the real
and imagine parts of a complex, so that they can have the same
base and fall into the same group.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162381 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-loop-prefetch.c

index e4dbeb6..9bca90e 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-21  Changpeng Fang  <changpeng.fang@amd.com>
+
+       * tree-ssa-loop-prefetch.c (analyze_ref): Strip off the real
+       and imagine parts of a complex, so that they can have the same
+       base and fall into the same group.
+
 2010-07-21  Richard Guenther  <rguenther@suse.de>
 
        PR lto/45018
index 1932d05..4840704 100644 (file)
@@ -486,10 +486,18 @@ analyze_ref (struct loop *loop, tree *ref_p, tree *base,
   *step = NULL_TREE;
   *delta = 0;
 
-  /* First strip off the component references.  Ignore bitfields.  */
-  if (TREE_CODE (ref) == COMPONENT_REF
-      && DECL_NONADDRESSABLE_P (TREE_OPERAND (ref, 1)))
-    ref = TREE_OPERAND (ref, 0);
+  /* First strip off the component references.  Ignore bitfields.
+     Also strip off the real and imagine parts of a complex, so that
+     they can have the same base.  */
+  if (TREE_CODE (ref) == REALPART_EXPR
+      || TREE_CODE (ref) == IMAGPART_EXPR
+      || (TREE_CODE (ref) == COMPONENT_REF
+          && DECL_NONADDRESSABLE_P (TREE_OPERAND (ref, 1))))
+    {
+      if (TREE_CODE (ref) == IMAGPART_EXPR)
+        *delta += int_size_in_bytes (TREE_TYPE (ref));
+      ref = TREE_OPERAND (ref, 0);
+    }
 
   *ref_p = ref;