Lines Matching refs:e1
14 static int expr_eq(struct expr *e1, struct expr *e2);
33 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two() argument
37 e->left.expr = e1; in expr_alloc_two()
51 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and() argument
53 if (!e1) in expr_alloc_and()
55 return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; in expr_alloc_and()
58 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or() argument
60 if (!e1) in expr_alloc_or()
62 return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; in expr_alloc_or()
138 #define e1 (*ep1) macro
143 if (e1->type == type) { in __expr_eliminate_eq()
144 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
145 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
149 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
150 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
153 if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in __expr_eliminate_eq()
154 e1->left.sym == e2->left.sym && in __expr_eliminate_eq()
155 (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) in __expr_eliminate_eq()
157 if (!expr_eq(e1, e2)) in __expr_eliminate_eq()
160 expr_free(e1); expr_free(e2); in __expr_eliminate_eq()
163 e1 = expr_alloc_symbol(&symbol_no); in __expr_eliminate_eq()
167 e1 = expr_alloc_symbol(&symbol_yes); in __expr_eliminate_eq()
177 if (!e1 || !e2) in expr_eliminate_eq()
179 switch (e1->type) { in expr_eliminate_eq()
182 __expr_eliminate_eq(e1->type, ep1, ep2); in expr_eliminate_eq()
186 if (e1->type != e2->type) switch (e2->type) { in expr_eliminate_eq()
193 e1 = expr_eliminate_yn(e1); in expr_eliminate_eq()
197 #undef e1
200 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq() argument
204 if (e1->type != e2->type) in expr_eq()
206 switch (e1->type) { in expr_eq()
213 return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; in expr_eq()
215 return e1->left.sym == e2->left.sym; in expr_eq()
217 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
220 e1 = expr_copy(e1); in expr_eq()
223 expr_eliminate_eq(&e1, &e2); in expr_eq()
224 res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in expr_eq()
225 e1->left.sym == e2->left.sym); in expr_eq()
226 expr_free(e1); in expr_eq()
237 expr_fprint(e1, stdout); in expr_eq()
361 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or() argument
366 if (expr_eq(e1, e2)) in expr_join_or()
367 return expr_copy(e1); in expr_join_or()
368 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_or()
372 if (e1->type == E_NOT) { in expr_join_or()
373 tmp = e1->left.expr; in expr_join_or()
378 sym1 = e1->left.sym; in expr_join_or()
390 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
391 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_or()
392 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { in expr_join_or()
396 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
397 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_or()
398 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { in expr_join_or()
402 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
403 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_or()
404 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { in expr_join_or()
410 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
411 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
417 expr_fprint(e1, stdout); in expr_join_or()
425 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and() argument
430 if (expr_eq(e1, e2)) in expr_join_and()
431 return expr_copy(e1); in expr_join_and()
432 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_and()
436 if (e1->type == E_NOT) { in expr_join_and()
437 tmp = e1->left.expr; in expr_join_and()
442 sym1 = e1->left.sym; in expr_join_and()
454 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
455 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
459 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || in expr_join_and()
460 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) in expr_join_and()
464 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
465 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) in expr_join_and()
470 if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { in expr_join_and()
472 sym2 = e1->right.sym; in expr_join_and()
477 if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { in expr_join_and()
480 if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) in expr_join_and()
481 return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) in expr_join_and()
484 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
485 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_and()
486 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) in expr_join_and()
490 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
491 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_and()
492 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) in expr_join_and()
496 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
497 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_and()
498 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) in expr_join_and()
502 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
503 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || in expr_join_and()
504 (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
505 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
511 expr_fprint(e1, stdout); in expr_join_and()
521 #define e1 (*ep1) in expr_eliminate_dups1() macro
525 if (e1->type == type) { in expr_eliminate_dups1()
526 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
527 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
531 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
532 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
535 if (e1 == e2) in expr_eliminate_dups1()
538 switch (e1->type) { in expr_eliminate_dups1()
540 expr_eliminate_dups1(e1->type, &e1, &e1); in expr_eliminate_dups1()
547 tmp = expr_join_or(e1, e2); in expr_eliminate_dups1()
549 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
550 e1 = expr_alloc_symbol(&symbol_no); in expr_eliminate_dups1()
556 tmp = expr_join_and(e1, e2); in expr_eliminate_dups1()
558 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
559 e1 = expr_alloc_symbol(&symbol_yes); in expr_eliminate_dups1()
567 #undef e1 in expr_eliminate_dups1()
810 struct expr *e1, *e2; in expr_trans_compare() local
820 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
823 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
825 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
830 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
833 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
835 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
1048 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) in expr_simplify_unmet_dep() argument
1052 switch (e1->type) { in expr_simplify_unmet_dep()
1055 expr_simplify_unmet_dep(e1->left.expr, e2), in expr_simplify_unmet_dep()
1056 expr_simplify_unmet_dep(e1->right.expr, e2)); in expr_simplify_unmet_dep()
1059 e = expr_alloc_and(expr_copy(e1), expr_copy(e2)); in expr_simplify_unmet_dep()
1061 ret = (!expr_eq(e, e1)) ? e1 : NULL; in expr_simplify_unmet_dep()
1066 ret = e1; in expr_simplify_unmet_dep()