Improve comments for Analysis::IsSelfAssignment.
Change-Id: I34353769f4c65bdfa7205d460671a78f3463a5f2 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/378317 Auto-Submit: John Stiles <johnstiles@google.com> Commit-Queue: Brian Osman <brianosman@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
This commit is contained in:
parent
036ba86489
commit
786d42c6da
@ -562,16 +562,15 @@ bool Analysis::IsTrivialExpression(const Expression& expr) {
|
|||||||
IsTrivialExpression(*expr.as<IndexExpression>().base()));
|
IsTrivialExpression(*expr.as<IndexExpression>().base()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if both expression trees are the same. The left side is expected to be an lvalue.
|
|
||||||
* This only needs to check for trees that can plausibly terminate in a variable, so some basic
|
|
||||||
* candidates like `FloatLiteral` are missing.
|
|
||||||
*/
|
|
||||||
bool Analysis::IsSelfAssignment(const Expression& left, const Expression& right) {
|
bool Analysis::IsSelfAssignment(const Expression& left, const Expression& right) {
|
||||||
if (left.kind() != right.kind() || left.type() != right.type()) {
|
if (left.kind() != right.kind() || left.type() != right.type()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This isn't a fully exhaustive list of expressions that could be involved in a self-
|
||||||
|
// assignment, particularly when arrays are involved; for instance, `x[y+1] = x[y+1]` isn't
|
||||||
|
// detected because we don't look at BinaryExpressions. Since this is intended to be used for
|
||||||
|
// optimization purposes, handling the common cases is sufficient.
|
||||||
switch (left.kind()) {
|
switch (left.kind()) {
|
||||||
case Expression::Kind::kIntLiteral:
|
case Expression::Kind::kIntLiteral:
|
||||||
return left.as<IntLiteral>().value() == right.as<IntLiteral>().value();
|
return left.as<IntLiteral>().value() == right.as<IntLiteral>().value();
|
||||||
|
@ -89,8 +89,7 @@ struct Analysis {
|
|||||||
static bool IsTrivialExpression(const Expression& expr);
|
static bool IsTrivialExpression(const Expression& expr);
|
||||||
|
|
||||||
// Returns true if both expression trees are the same. The left side is expected to be an
|
// Returns true if both expression trees are the same. The left side is expected to be an
|
||||||
// lvalue. This only needs to check for trees that can plausibly terminate in a variable, so
|
// lvalue. Intended for use by the optimizer; won't necessarily catch complex cases.
|
||||||
// some basic candidates like `FloatLiteral` are missing.
|
|
||||||
static bool IsSelfAssignment(const Expression& left, const Expression& right);
|
static bool IsSelfAssignment(const Expression& left, const Expression& right);
|
||||||
|
|
||||||
// Is 'expr' a constant-expression, as defined by GLSL 1.0, section 5.10? A constant expression
|
// Is 'expr' a constant-expression, as defined by GLSL 1.0, section 5.10? A constant expression
|
||||||
|
Loading…
Reference in New Issue
Block a user