diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-10-27 06:19:25 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-10-27 06:19:25 +0100 |
commit | 49c98aa3ed1b315ed2f4fbe44271ecd5bdd9cbc7 (patch) | |
tree | 818592074b2e66d3ea5a0e926e97aae83aefdaf9 | |
parent | e1f9cbaefde91a994852798c9f80853411e4b2a3 (diff) | |
parent | 6803f19583ea7fefa246427d0ed1edd0e65161bb (diff) | |
download | sparse-49c98aa3ed1b315ed2f4fbe44271ecd5bdd9cbc7.tar.gz |
Merge branch 'one_use'
* replace nbr_users() & multi_users() by one_use()
-rw-r--r-- | linearize.h | 4 | ||||
-rw-r--r-- | simplify.c | 18 |
2 files changed, 11 insertions, 11 deletions
diff --git a/linearize.h b/linearize.h index d8cbc3f3..57fe2035 100644 --- a/linearize.h +++ b/linearize.h @@ -260,9 +260,9 @@ static inline int has_users(pseudo_t p) return !pseudo_user_list_empty(p->users); } -static inline bool multi_users(pseudo_t p) +static inline bool one_use(pseudo_t p) { - return ptr_list_multiple((struct ptr_list *)(p->users)); + return !ptr_list_multiple((struct ptr_list *)(p->users)); } static inline int nbr_users(pseudo_t p) @@ -676,7 +676,7 @@ static int simplify_mask_or_and(struct instruction *insn, unsigned long long mas // if (M' & M) == 0: ((a & M') | b) -> b return replace_pseudo(insn, &insn->src1, orb); } - if (multi_users(insn->src1)) + if (!one_use(insn->src1)) return 0; // can't modify anything inside the OR if (nmask == mask) { struct instruction *or = insn->src1->def; @@ -684,7 +684,7 @@ static int simplify_mask_or_and(struct instruction *insn, unsigned long long mas // if (M' & M) == M: ((a & M') | b) -> (a | b) return replace_pseudo(or, arg, and->src1); } - if (nmask != omask && !multi_users(ora)) { + if (nmask != omask && one_use(ora)) { // if (M' & M) != M': AND(a, M') -> AND(a, (M' & M)) and->src2 = value_pseudo(nmask); return REPEAT_CSE; @@ -724,7 +724,7 @@ static int simplify_mask_or(struct instruction *insn, unsigned long long mask, s // if (C & M) == M: OR(x, C) -> M return replace_pseudo(insn, &insn->src1, value_pseudo(mask)); } - if (nval != oval && !multi_users(or->target)) { + if (nval != oval && one_use(or->target)) { // if (C & M) != C: OR(x, C) -> OR(x, (C & M)) return replace_pseudo(or, &or->src2, value_pseudo(nval)); } @@ -758,7 +758,7 @@ static int simplify_mask_shift(struct instruction *sh, unsigned long long mask) return 0; switch (DEF_OPCODE(inner, sh->src1)) { case OP_OR: - if (!multi_users(sh->target)) + if (one_use(sh->target)) return simplify_mask_shift_or(sh, inner, mask); break; } @@ -857,7 +857,7 @@ static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long v return replace_with_value(insn, 0); if (nmask == mask) return replace_pseudo(insn, &insn->src1, def->src1); - if (nbr_users(pseudo) > 1) + if (!one_use(pseudo)) break; def->opcode = OP_LSR; def->src2 = insn->src2; @@ -1027,7 +1027,7 @@ static int simplify_seteq_setne(struct instruction *insn, long long value) // and same for setne/eq ... 0/1 return replace_pseudo(insn, &insn->src1, def->src); case OP_TRUNC: - if (multi_users(old)) + if (!one_use(old)) break; // convert // trunc.n %s <- (o) %a @@ -1366,7 +1366,7 @@ static int simplify_associative_binop(struct instruction *insn) insn->src2 = eval_op(insn->opcode, insn->size, insn->src2, def->src2); return replace_pseudo(insn, &insn->src1, def->src1); } - if (multi_users(def->target)) + if (!one_use(def->target)) return 0; switch_pseudo(def, &def->src1, insn, &insn->src2); return REPEAT_CSE; @@ -1618,7 +1618,7 @@ static int simplify_cast(struct instruction *insn) /* A cast of a AND might be a no-op.. */ switch (insn->opcode) { case OP_TRUNC: - if (multi_users(src)) + if (!one_use(src)) break; def->opcode = OP_TRUNC; def->orig_type = def->type; @@ -1636,7 +1636,7 @@ static int simplify_cast(struct instruction *insn) break; // OK, sign bit is 0 case OP_ZEXT: - if (multi_users(src)) + if (!one_use(src)) break; // transform: // and.n %b <- %a, M |