Lines Matching refs:e1

14 static int expr_eq(struct expr *e1, struct expr *e2);
36 struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) in expr_alloc_two() argument
40 e->left.expr = e1; in expr_alloc_two()
54 struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) in expr_alloc_and() argument
56 if (!e1) in expr_alloc_and()
58 return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; in expr_alloc_and()
61 struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) in expr_alloc_or() argument
63 if (!e1) in expr_alloc_or()
65 return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; in expr_alloc_or()
133 #define e1 (*ep1) macro
138 if (e1->type == type) { in __expr_eliminate_eq()
139 __expr_eliminate_eq(type, &e1->left.expr, &e2); in __expr_eliminate_eq()
140 __expr_eliminate_eq(type, &e1->right.expr, &e2); in __expr_eliminate_eq()
144 __expr_eliminate_eq(type, &e1, &e2->left.expr); in __expr_eliminate_eq()
145 __expr_eliminate_eq(type, &e1, &e2->right.expr); in __expr_eliminate_eq()
148 if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in __expr_eliminate_eq()
149 e1->left.sym == e2->left.sym && in __expr_eliminate_eq()
150 (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) in __expr_eliminate_eq()
152 if (!expr_eq(e1, e2)) in __expr_eliminate_eq()
155 expr_free(e1); expr_free(e2); in __expr_eliminate_eq()
158 e1 = expr_alloc_symbol(&symbol_no); in __expr_eliminate_eq()
162 e1 = expr_alloc_symbol(&symbol_yes); in __expr_eliminate_eq()
172 if (!e1 || !e2) in expr_eliminate_eq()
174 switch (e1->type) { in expr_eliminate_eq()
177 __expr_eliminate_eq(e1->type, ep1, ep2); in expr_eliminate_eq()
181 if (e1->type != e2->type) switch (e2->type) { in expr_eliminate_eq()
188 e1 = expr_eliminate_yn(e1); in expr_eliminate_eq()
192 #undef e1
195 static int expr_eq(struct expr *e1, struct expr *e2) in expr_eq() argument
199 if (e1->type != e2->type) in expr_eq()
201 switch (e1->type) { in expr_eq()
204 return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; in expr_eq()
206 return e1->left.sym == e2->left.sym; in expr_eq()
208 return expr_eq(e1->left.expr, e2->left.expr); in expr_eq()
211 e1 = expr_copy(e1); in expr_eq()
214 expr_eliminate_eq(&e1, &e2); in expr_eq()
215 res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && in expr_eq()
216 e1->left.sym == e2->left.sym); in expr_eq()
217 expr_free(e1); in expr_eq()
228 expr_fprint(e1, stdout); in expr_eq()
352 static struct expr *expr_join_or(struct expr *e1, struct expr *e2) in expr_join_or() argument
357 if (expr_eq(e1, e2)) in expr_join_or()
358 return expr_copy(e1); in expr_join_or()
359 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_or()
363 if (e1->type == E_NOT) { in expr_join_or()
364 tmp = e1->left.expr; in expr_join_or()
369 sym1 = e1->left.sym; in expr_join_or()
381 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
382 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_or()
383 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { in expr_join_or()
387 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
388 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_or()
389 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { in expr_join_or()
393 if (e1->type == E_EQUAL && e2->type == E_EQUAL && in expr_join_or()
394 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_or()
395 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { in expr_join_or()
401 if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || in expr_join_or()
402 (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) in expr_join_or()
408 expr_fprint(e1, stdout); in expr_join_or()
416 static struct expr *expr_join_and(struct expr *e1, struct expr *e2) in expr_join_and() argument
421 if (expr_eq(e1, e2)) in expr_join_and()
422 return expr_copy(e1); in expr_join_and()
423 if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) in expr_join_and()
427 if (e1->type == E_NOT) { in expr_join_and()
428 tmp = e1->left.expr; in expr_join_and()
433 sym1 = e1->left.sym; in expr_join_and()
445 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
446 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
450 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || in expr_join_and()
451 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) in expr_join_and()
455 if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
456 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) in expr_join_and()
461 if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { in expr_join_and()
463 sym2 = e1->right.sym; in expr_join_and()
468 if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { in expr_join_and()
471 if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) in expr_join_and()
472 return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) in expr_join_and()
475 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
476 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || in expr_join_and()
477 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) in expr_join_and()
481 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
482 ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || in expr_join_and()
483 (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) in expr_join_and()
487 if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && in expr_join_and()
488 ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || in expr_join_and()
489 (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) in expr_join_and()
493 if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || in expr_join_and()
494 (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || in expr_join_and()
495 (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || in expr_join_and()
496 (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) in expr_join_and()
502 expr_fprint(e1, stdout); in expr_join_and()
512 #define e1 (*ep1) in expr_eliminate_dups1() macro
516 if (e1->type == type) { in expr_eliminate_dups1()
517 expr_eliminate_dups1(type, &e1->left.expr, &e2); in expr_eliminate_dups1()
518 expr_eliminate_dups1(type, &e1->right.expr, &e2); in expr_eliminate_dups1()
522 expr_eliminate_dups1(type, &e1, &e2->left.expr); in expr_eliminate_dups1()
523 expr_eliminate_dups1(type, &e1, &e2->right.expr); in expr_eliminate_dups1()
526 if (e1 == e2) in expr_eliminate_dups1()
529 switch (e1->type) { in expr_eliminate_dups1()
531 expr_eliminate_dups1(e1->type, &e1, &e1); in expr_eliminate_dups1()
538 tmp = expr_join_or(e1, e2); in expr_eliminate_dups1()
540 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
541 e1 = expr_alloc_symbol(&symbol_no); in expr_eliminate_dups1()
547 tmp = expr_join_and(e1, e2); in expr_eliminate_dups1()
549 expr_free(e1); expr_free(e2); in expr_eliminate_dups1()
550 e1 = expr_alloc_symbol(&symbol_yes); in expr_eliminate_dups1()
558 #undef e1 in expr_eliminate_dups1()
564 #define e1 (*ep1) in expr_eliminate_dups2() macro
568 if (e1->type == type) { in expr_eliminate_dups2()
569 expr_eliminate_dups2(type, &e1->left.expr, &e2); in expr_eliminate_dups2()
570 expr_eliminate_dups2(type, &e1->right.expr, &e2); in expr_eliminate_dups2()
574 expr_eliminate_dups2(type, &e1, &e2->left.expr); in expr_eliminate_dups2()
575 expr_eliminate_dups2(type, &e1, &e2->right.expr); in expr_eliminate_dups2()
577 if (e1 == e2) in expr_eliminate_dups2()
580 switch (e1->type) { in expr_eliminate_dups2()
582 expr_eliminate_dups2(e1->type, &e1, &e1); in expr_eliminate_dups2()
584 tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); in expr_eliminate_dups2()
588 expr_free(e1); in expr_eliminate_dups2()
589 e1 = expr_alloc_symbol(&symbol_no); in expr_eliminate_dups2()
597 expr_eliminate_dups2(e1->type, &e1, &e1); in expr_eliminate_dups2()
599 tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); in expr_eliminate_dups2()
603 expr_free(e1); in expr_eliminate_dups2()
604 e1 = expr_alloc_symbol(&symbol_yes); in expr_eliminate_dups2()
614 #undef e1 in expr_eliminate_dups2()
856 #define e1 (*ep1) in expr_extract_eq() macro
858 if (e1->type == type) { in expr_extract_eq()
859 expr_extract_eq(type, ep, &e1->left.expr, &e2); in expr_extract_eq()
860 expr_extract_eq(type, ep, &e1->right.expr, &e2); in expr_extract_eq()
868 if (expr_eq(e1, e2)) { in expr_extract_eq()
869 *ep = *ep ? expr_alloc_two(type, *ep, e1) : e1; in expr_extract_eq()
872 e1 = expr_alloc_symbol(&symbol_yes); in expr_extract_eq()
875 e1 = expr_alloc_symbol(&symbol_no); in expr_extract_eq()
879 #undef e1 in expr_extract_eq()
885 struct expr *e1, *e2; in expr_trans_compare() local
895 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
898 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
900 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
905 e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); in expr_trans_compare()
908 e = expr_alloc_two(E_OR, e1, e2); in expr_trans_compare()
910 e = expr_alloc_two(E_AND, e1, e2); in expr_trans_compare()
1030 struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) in expr_simplify_unmet_dep() argument
1034 switch (e1->type) { in expr_simplify_unmet_dep()
1037 expr_simplify_unmet_dep(e1->left.expr, e2), in expr_simplify_unmet_dep()
1038 expr_simplify_unmet_dep(e1->right.expr, e2)); in expr_simplify_unmet_dep()
1041 e = expr_alloc_and(expr_copy(e1), expr_copy(e2)); in expr_simplify_unmet_dep()
1043 ret = (!expr_eq(e, e1)) ? e1 : NULL; in expr_simplify_unmet_dep()
1048 ret = e1; in expr_simplify_unmet_dep()