summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/OptimizeInstructions.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index 64d59ca1d..e1478b54f 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -2266,9 +2266,19 @@ struct OptimizeInstructions
refAsChild->value = curr;
refAsChild->finalize();
replaceCurrent(refAsChild);
+ return;
+ }
+
+ // We can optimize away externalizations of internalizations and vice
+ // versa.
+ if ((curr->op == ExternConvertAny &&
+ refAsChild->op == AnyConvertExtern) ||
+ (curr->op == AnyConvertExtern &&
+ refAsChild->op == ExternConvertAny)) {
+ replaceCurrent(refAsChild->value);
+ return;
}
}
- // TODO: optimize away ExternConvertAny of AnyConvertExtern, etc.
return;
}