diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-01-19 16:31:32 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-19 16:31:44 +0000 |
commit | 6415e0d2417d133af28ac523400d3f958d2bcd1c (patch) | |
tree | 92fbe77322ba50e984f6d85870f40bad70ccacf4 /src/sksl/SkSLCFGGenerator.h | |
parent | f54b07121f81a56145fb118a2e18841fc135717d (diff) |
Revert "Added constant propagation and better variable liveness tracking to"
This reverts commit f54b07121f81a56145fb118a2e18841fc135717d.
Reason for revert: ASAN failure
Original change's description:
> Added constant propagation and better variable liveness tracking to
> skslc.
>
> This allows skslc to track the values of variables with constant
> values across multiple statements and replace variable references with
> constant values where appropriate.
>
> The improved liveness tracking allows skslc to realize that a
> variable is no longer alive if all references to it have been
> replaced. It is not yet doing much with this information; better
> dead code elimination is coming in a followup change.
>
> BUG=skia:
>
> Change-Id: I6bf267d478b769caf0063ac3597dc16bbe618cb4
> Reviewed-on: https://skia-review.googlesource.com/7033
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>
>
TBR=egdaniel@google.com,ethannicholas@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Change-Id: Id2e26bce96b27df73948f8b32d3dff2e358ae0d6
Reviewed-on: https://skia-review.googlesource.com/7274
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/sksl/SkSLCFGGenerator.h')
-rw-r--r-- | src/sksl/SkSLCFGGenerator.h | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/src/sksl/SkSLCFGGenerator.h b/src/sksl/SkSLCFGGenerator.h index 337fdfac35..c37850112c 100644 --- a/src/sksl/SkSLCFGGenerator.h +++ b/src/sksl/SkSLCFGGenerator.h @@ -27,23 +27,14 @@ struct BasicBlock { }; Kind fKind; - // if false, this node should not be subject to constant propagation. This happens with - // compound assignment (i.e. x *= 2), in which the value x is used as an rvalue for - // multiplication by 2 and then as an lvalue for assignment purposes. Since there is only - // one "x" node, replacing it with a constant would break the assignment and we suppress - // it. Down the road, we should handle this more elegantly by substituting a regular - // assignment if the target is constant (i.e. x = 1; x *= 2; should become x = 1; x = 1 * 2; - // and then collapse down to a simple x = 2;). - bool fConstantPropagation; - std::unique_ptr<Expression>* fExpression; - const Statement* fStatement; + const IRNode* fNode; }; - + std::vector<Node> fNodes; std::set<BlockId> fEntrances; std::set<BlockId> fExits; // variable definitions upon entering this basic block (null expression = undefined) - DefinitionMap fBefore; + std::unordered_map<const Variable*, const Expression*> fBefore; }; struct CFG { @@ -86,9 +77,9 @@ public: private: void addStatement(CFG& cfg, const Statement* s); - void addExpression(CFG& cfg, std::unique_ptr<Expression>* e, bool constantPropagate); + void addExpression(CFG& cfg, const Expression* e); - void addLValue(CFG& cfg, std::unique_ptr<Expression>* e); + void addLValue(CFG& cfg, const Expression* e); std::stack<BlockId> fLoopContinues; std::stack<BlockId> fLoopExits; |