summaryrefslogtreecommitdiff
path: root/src/passes/OptimizeInstructions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r--src/passes/OptimizeInstructions.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index 9f095b333..31ed9348a 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -3037,7 +3037,12 @@ private:
curr->ifTrue)
.hasSideEffects();
- if (validTypes && validEffects) {
+ // In addition, check for specific limitations of select.
+ bool validChildren =
+ !std::is_same<T, Select>::value ||
+ Properties::canEmitSelectWithArms(ifTrueChild, ifFalseChild);
+
+ if (validTypes && validEffects && validChildren) {
// Replace ifTrue with its child.
curr->ifTrue = ifTrueChild;
// Relace ifFalse with its child, and reuse that node outside.