2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-25 08:10:29 +08:00

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
This commit is contained in:
Ian Lance Taylor 2020-01-07 15:35:04 +00:00
parent 0e159efc76
commit 5561b41dd6
2 changed files with 19 additions and 1 deletions
gcc/go/gofrontend

@ -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.

@ -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;
}