aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-02-11 11:54:44 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-14 12:35:27 +0100
commit7fc6d58629d1fce4421e49b1c5a03e8af90381d8 (patch)
tree50511bffc13bfc47648e117a15ed446abc5fc349 /src
parent0d7c70a12ef74e69f7b4cccfeb7d36a6bef4e1c2 (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>
Diffstat (limited to 'src')
-rw-r--r--src/qml/compiler/qv4ssa.cpp12
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()) {