Index: gcc/tree-vect-data-refs.c
===================================================================
--- gcc/tree-vect-data-refs.c	(revision 200626)
+++ gcc/tree-vect-data-refs.c	(working copy)
@@ -2311,6 +2311,21 @@
   return vect_analyze_group_access (dr);
 }
 
+
+
+/* Compare two tree nodes. This function is used to compare two 
+   data-references as below. */
+
+static int compare_tree(tree t1, tree t2)
+{
+    if (TREE_CODE(t1) < TREE_CODE(t2))
+        return -1;
+    if (TREE_CODE(t1) > TREE_CODE(t2))
+        return 1;
+    return 0;
+}
+
+
 /* Compare two data-references DRA and DRB to group them into chunks
    suitable for grouping.  */
 
@@ -2319,29 +2334,26 @@
 {
   data_reference_p dra = *(data_reference_p *)const_cast<void *>(dra_);
   data_reference_p drb = *(data_reference_p *)const_cast<void *>(drb_);
-  hashval_t h1, h2;
   int cmp;
 
   /* Stabilize sort.  */
   if (dra == drb)
     return 0;
 
-  /* Ordering of DRs according to base.  */
+  /* Ordering of DRs according to base. */ 
   if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0))
     {
-      h1 = iterative_hash_expr (DR_BASE_ADDRESS (dra), 0);
-      h2 = iterative_hash_expr (DR_BASE_ADDRESS (drb), 0);
-      if (h1 != h2)
-	return h1 < h2 ? -1 : 1;
+      cmp = compare_tree(DR_BASE_ADDRESS(dra), DR_BASE_ADDRESS(drb));
+      if (cmp != 0)
+        return cmp;
     }
 
   /* And according to DR_OFFSET.  */
   if (!dr_equal_offsets_p (dra, drb))
     {
-      h1 = iterative_hash_expr (DR_OFFSET (dra), 0);
-      h2 = iterative_hash_expr (DR_OFFSET (drb), 0);
-      if (h1 != h2)
-	return h1 < h2 ? -1 : 1;
+      cmp = compare_tree(DR_OFFSET(dra), DR_OFFSET(drb));
+      if (cmp != 0)
+        return cmp;
     }
 
   /* Put reads before writes.  */
@@ -2352,19 +2364,18 @@
   if (!operand_equal_p (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dra))),
 			TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb))), 0))
     {
-      h1 = iterative_hash_expr (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dra))), 0);
-      h2 = iterative_hash_expr (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb))), 0);
-      if (h1 != h2)
-	return h1 < h2 ? -1 : 1;
+      cmp = compare_tree(TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dra))),
+                         TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb))));
+      if (cmp != 0)
+        return cmp;
     }
 
   /* And after step.  */
   if (!operand_equal_p (DR_STEP (dra), DR_STEP (drb), 0))
     {
-      h1 = iterative_hash_expr (DR_STEP (dra), 0);
-      h2 = iterative_hash_expr (DR_STEP (drb), 0);
-      if (h1 != h2)
-	return h1 < h2 ? -1 : 1;
+      cmp = compare_tree(DR_STEP(dra), DR_STEP(drb));
+      if (cmp != 0)
+        return cmp;
     }
 
   /* Then sort after DR_INIT.  In case of identical DRs sort after stmt UID.  */
