diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index 04661af2dbc..3c8ac5de1c0 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -1309,11 +1309,23 @@ struct OptimizeInstructions right->value = right->value.neg(); return binary; } else { + // skip if LHS is `NaN` + if (auto* leftConst = binary->left->dynCast()) { + if (leftConst->value.isNaN()) { + return nullptr; + } + } // x - 0.0 ==> x return binary->left; } } else if (binary->op == Abstract::getBinary(type, Abstract::Add)) { if (std::signbit(value)) { + // skip if LHS is `NaN` + if (auto* leftConst = binary->left->dynCast()) { + if (leftConst->value.isNaN()) { + return nullptr; + } + } // x + (-0.0) ==> x return binary->left; }