[gcc/devel/c++-coroutines] compiler: avoid write barrier for a[i] = a[i][:v]

Iain D Sandoe iains@gcc.gnu.org
Fri Jan 17 11:05:00 GMT 2020


https://gcc.gnu.org/g:5561b41dd67630273479d7661638c5c36a5abb5b

commit 5561b41dd67630273479d7661638c5c36a5abb5b
Author: Ian Lance Taylor <ian@gcc.gnu.org>
Date:   Tue Jan 7 15:35:04 2020 +0000

    compiler: avoid write barrier for a[i] = a[i][:v]
    
        This avoids generating a write barrier for code that appears in the
        Go1.14beta1 runtime package in (*pageAlloc).sysGrow:
            s.summary[l] = s.summary[l][:needIdxLimit]
    
        Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213558
    
    From-SVN: r279962

Diff:
---
 gcc/go/gofrontend/MERGE          |  2 +-
 gcc/go/gofrontend/expressions.cc | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 6dca40f..9f825da 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-d0a102eea2262e3fca89b1eb342fd03328c4aa16
+86d223eaccecff72b44cd23a014bc028b658055e
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 8d72b1f..c228905 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -183,6 +183,24 @@ Expression::is_same_variable(Expression* a, Expression* b)
 					      bu->operand()));
     }
 
+  Array_index_expression* aie = a->array_index_expression();
+  if (aie != NULL)
+    {
+      Array_index_expression* bie = b->array_index_expression();
+      return (aie->end() == NULL
+	      && bie->end() == NULL
+	      && Expression::is_same_variable(aie->array(), bie->array())
+	      && Expression::is_same_variable(aie->start(), bie->start()));
+    }
+
+  Numeric_constant aval;
+  if (a->numeric_constant_value(&aval))
+    {
+      Numeric_constant bval;
+      if (b->numeric_constant_value(&bval))
+	return aval.equals(bval);
+    }
+
   return false;
 }



More information about the Gcc-cvs mailing list