aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-10-27 06:19:25 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-10-27 06:19:25 +0100
commit49c98aa3ed1b315ed2f4fbe44271ecd5bdd9cbc7 (patch)
tree818592074b2e66d3ea5a0e926e97aae83aefdaf9
parente1f9cbaefde91a994852798c9f80853411e4b2a3 (diff)
parent6803f19583ea7fefa246427d0ed1edd0e65161bb (diff)
downloadsparse-49c98aa3ed1b315ed2f4fbe44271ecd5bdd9cbc7.tar.gz
Merge branch 'one_use'
* replace nbr_users() & multi_users() by one_use()
-rw-r--r--linearize.h4
-rw-r--r--simplify.c18
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)
diff --git a/simplify.c b/simplify.c
index 307787d0..6f75b1ae 100644
--- a/simplify.c
+++ b/simplify.c
@@ -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