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:
parent
0e159efc76
commit
5561b41dd6
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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user