diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-04-20 19:31:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-20 23:57:21 +0000 |
commit | cb67096b61f699b047fe8635984db1ac708a7b99 (patch) | |
tree | 3a8bda0962ad77d0d9ccb1d89c15f70578a7fe78 /src/sksl/ir/SkSLPrefixExpression.h | |
parent | e79b473714866682dea85b66c005c5bb2ff6a397 (diff) |
Improved skslc optimizer, particularly around vectors.
BUG=skia:
Change-Id: Idb364d9198f2ff84aad1eb68e236fb45ec1c86b7
Reviewed-on: https://skia-review.googlesource.com/8000
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'src/sksl/ir/SkSLPrefixExpression.h')
-rw-r--r-- | src/sksl/ir/SkSLPrefixExpression.h | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/sksl/ir/SkSLPrefixExpression.h b/src/sksl/ir/SkSLPrefixExpression.h index 4fa54ca32d..a61ff65bd6 100644 --- a/src/sksl/ir/SkSLPrefixExpression.h +++ b/src/sksl/ir/SkSLPrefixExpression.h @@ -22,7 +22,29 @@ struct PrefixExpression : public Expression { , fOperand(std::move(operand)) , fOperator(op) {} - virtual String description() const override { + bool isConstant() const override { + return fOperator == Token::MINUS && fOperand->isConstant(); + } + + bool hasSideEffects() const override { + return fOperator == Token::PLUSPLUS || fOperator == Token::MINUSMINUS || + fOperand->hasSideEffects(); + } + + virtual std::unique_ptr<Expression> constantPropagate( + const IRGenerator& irGenerator, + const DefinitionMap& definitions) override { + if (fOperand->fKind == Expression::kFloatLiteral_Kind) { + return std::unique_ptr<Expression>(new FloatLiteral( + irGenerator.fContext, + Position(), + -((FloatLiteral&) *fOperand).fValue)); + + } + return nullptr; + } + + String description() const override { return Token::OperatorName(fOperator) + fOperand->description(); } |