aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/simplify.c
diff options
Diffstat (limited to 'simplify.c')
-rw-r--r--simplify.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/simplify.c b/simplify.c
index de115d6d..6619bd1b 100644
--- a/simplify.c
+++ b/simplify.c
@@ -1299,8 +1299,13 @@ static int simplify_cast(struct instruction *insn)
}
break;
case OP_TRUNC:
- osize = def->orig_type->bit_size;
- if (insn->opcode == OP_ZEXT && size == osize) {
+ switch (insn->opcode) {
+ case OP_TRUNC:
+ insn->orig_type = def->orig_type;
+ return replace_pseudo(insn, &insn->src1, def->src);
+ case OP_ZEXT:
+ if (size != def->orig_type->bit_size)
+ break;
insn->opcode = OP_AND;
insn->src2 = value_pseudo((1ULL << def->size) - 1);
return replace_pseudo(insn, &insn->src1, def->src);