@@ -423,27 +423,23 @@ Simplificator::simplifyExpr(const constraints_ty &constraints,
423423
424424 for (auto &constraint : constraints) {
425425 if (const EqExpr *ee = dyn_cast<EqExpr>(constraint)) {
426- ref<Expr> left = ee->left ;
427- ref<Expr> right = ee->right ;
428- if (right->height () < left->height ()) {
429- left = ee->right ;
430- right = ee->left ;
431- }
432- if (isa<ConstantExpr>(ee->left )) {
433- equalities.insert (std::make_pair (ee->right , ee->left ));
434- equalitiesParents.insert ({ee->right , constraint});
435- } else {
436- equalities.insert (std::make_pair (constraint, Expr::createTrue ()));
437- equalities.insert (std::make_pair (right, left));
438- equalitiesParents.insert ({constraint, constraint});
439- equalitiesParents.insert ({right, constraint});
426+ ref<Expr> small = ee->left ;
427+ ref<Expr> big = ee->right ;
428+ if (!isa<ConstantExpr>(small)) {
429+ auto hr = big->height (), hl = small->height ();
430+ if (hr < hl || (hr == hl && big < small))
431+ std::swap (small, big);
432+ equalities.emplace (constraint, Expr::createTrue ());
433+ equalitiesParents.emplace (constraint, constraint);
440434 }
435+ equalities.emplace (big, small);
436+ equalitiesParents.emplace (big, constraint);
441437 } else {
442- equalities.insert ( std::make_pair ( constraint, Expr::createTrue () ));
443- equalitiesParents.insert ({ constraint, constraint} );
438+ equalities.emplace ( constraint, Expr::createTrue ());
439+ equalitiesParents.emplace ( constraint, constraint);
444440 if (const NotExpr *ne = dyn_cast<NotExpr>(constraint)) {
445- equalities.insert ( std::make_pair ( ne->expr , Expr::createFalse () ));
446- equalitiesParents.insert ({ ne->expr , constraint} );
441+ equalities.emplace ( ne->expr , Expr::createFalse ());
442+ equalitiesParents.emplace ( ne->expr , constraint);
447443 }
448444 }
449445 }
0 commit comments