aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-07-06 00:12:40 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-07-23 13:11:20 +0200
commit99b428918d696386fd72ea21a132a2baeb350169 (patch)
tree342830b71a1bf146fa851c9adee0c06812762cdc
parent5da4e09b47011d11c3ed8e1915a316ec8cf8897f (diff)
downloadsparse-dev-99b428918d696386fd72ea21a132a2baeb350169.tar.gz
cast: simplify SEXT(SEXT(x,N),N')
A sign-extension following another sign-extension can always be simplified into a single sign-extension. Simplify away such instructions. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--simplify.c5
-rw-r--r--validation/optim/sext-sext.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/simplify.c b/simplify.c
index b0512402..51c930fa 100644
--- a/simplify.c
+++ b/simplify.c
@@ -1090,6 +1090,11 @@ static int simplify_cast(struct instruction *insn)
insn->orig_type = def->orig_type;
return replace_pseudo(insn, &insn->src, def->src);
}
+ switch (insn->opcode) {
+ case OP_SEXT:
+ insn->orig_type = def->orig_type;
+ return replace_pseudo(insn, &insn->src, def->src);
+ }
break;
}
diff --git a/validation/optim/sext-sext.c b/validation/optim/sext-sext.c
index 3f7a0efc..604a7dd4 100644
--- a/validation/optim/sext-sext.c
+++ b/validation/optim/sext-sext.c
@@ -6,7 +6,6 @@ int foo(signed char offset)
/*
* check-name: sext-sext
* check-command: test-linearize -Wno-decl $file
- * check-known-to-fail
*
* check-output-ignore
* check-output-pattern(1): sext\\.