+
+ if (this->found_unsupported_op)
+ return visit_continue; /* can't handle inner unsupported opcodes */
+
+ /* Skip if the branch cost is high enough or if there's an expensive op.
+ *
+ * Also skip if non-constant array indices were encountered, since those
+ * can be out-of-bounds for a not-taken branch, and so generating an
+ * assignment would be incorrect. In the case of must_lower, it's up to the
+ * backend to deal with any potential fall-out (perhaps by translating the
+ * assignments to hardware-predicated moves).
+ */
+ if (!must_lower &&
+ (this->found_expensive_op ||
+ this->found_dynamic_arrayref ||
+ MAX2(this->then_cost, this->else_cost) >= this->min_branch_cost))