diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-02-11 11:54:44 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-14 12:35:27 +0100 |
commit | 7fc6d58629d1fce4421e49b1c5a03e8af90381d8 (patch) | |
tree | 50511bffc13bfc47648e117a15ed446abc5fc349 | |
parent | 0d7c70a12ef74e69f7b4cccfeb7d36a6bef4e1c2 (diff) |
V4 IR: remove unused phi targets.
Remove all phi nodes whose target temps have no uses. This obvious
optimization was missing.
Change-Id: I24354e225ba7b01a3c2a6f4b2e40dd78d6ee3d7d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r-- | src/qml/compiler/qv4ssa.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp index 62461665d8..ab20696e01 100644 --- a/src/qml/compiler/qv4ssa.cpp +++ b/src/qml/compiler/qv4ssa.cpp @@ -3248,6 +3248,18 @@ void optimizeSSA(Function *function, DefUsesCalculator &defUses, DominatorTree & W.clear(s); continue; } + + // dead code elimination: + if (defUses.useCount(*phi->targetTemp) == 0) { + foreach (Expr *in, phi->d->incoming) { + if (Temp *t = in->asTemp()) + W += defUses.defStmt(*t); + } + + defUses.removeDef(*phi->targetTemp); + W.clear(s); + continue; + } } else if (Move *m = s->asMove()) { if (Convert *convert = m->source->asConvert()) { if (Const *sourceConst = convert->expr->asConst()) { |